/
itokar98
/
HomeWorkSynchronizationTask1
Обзор
Документация
Войти
/
itokar98
/
HomeWorkSynchronizationTask1
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/Main.java
102 строки
5 KB
Ilya Tokar
first_commit
29 ноя 2025, 13:48
29 ноя 2025, 13:48
0207c1e
Код
Авторство
О чём код?
import java.util.*; import java.util.concurrent.*; public class Main { // Потокобезопасная мапа для хранения частот повторений public static final Map<Integer, Integer> sizeToFreq = new HashMap<>(); // Константы private static final String LETTERS = "RLRFR"; private static final int ROUTE_LENGTH = 100; private static final int THREADS_COUNT = 1000; public static void main(String[] args) throws InterruptedException { System.out.println("🤖 Генерация маршрутов для робота-доставщика"); System.out.println("Количество потоков: " + THREADS_COUNT); System.out.println("Длина маршрута: " + ROUTE_LENGTH); System.out.println("Доступные команды: " + LETTERS); // Создаем пул потоков ExecutorService executor = Executors.newFixedThreadPool(THREADS_COUNT); // Создаем задачи для выполнения List<Future<Integer>> futures = new ArrayList<>(); for (int i = 0; i < THREADS_COUNT; i++) { Callable<Integer> task = new RouteAnalyzer(LETTERS, ROUTE_LENGTH); Future<Integer> future = executor.submit(task); futures.add(future); } // Ждем завершения всех задач executor.shutdown(); executor.awaitTermination(1, TimeUnit.MINUTES); // Собираем результаты for (Future<Integer> future : futures) { try { future.get(); // Просто ждем завершения, результат уже обработан в мапе } catch (ExecutionException e) { e.printStackTrace(); } } // Анализируем результаты printStatistics(); } // Метод для генерации маршрута public static String generateRoute(String letters, int length) { Random random = new Random(); StringBuilder route = new StringBuilder(); for (int i = 0; i < length; i++) { route.append(letters.charAt(random.nextInt(letters.length()))); } return route.toString(); } // Метод для вывода статистики private static void printStatistics() { if (sizeToFreq.isEmpty()) { System.out.println("Нет данных для анализа"); return; } // Находим самую частую частоту Map.Entry<Integer, Integer> mostFrequent = null; for (Map.Entry<Integer, Integer> entry : sizeToFreq.entrySet()) { if (mostFrequent == null || entry.getValue() > mostFrequent.getValue()) { mostFrequent = entry; } } // Выводим результаты System.out.println("\n📊 Результаты анализа маршрутов:"); System.out.println("Самое частое количество повторений " + mostFrequent.getKey() + " (встретилось " + mostFrequent.getValue() + " раз)"); System.out.println("Другие размеры:"); // Сортируем по убыванию частоты List<Map.Entry<Integer, Integer>> sortedEntries = new ArrayList<>(sizeToFreq.entrySet()); sortedEntries.sort((a, b) -> b.getValue().compareTo(a.getValue())); for (Map.Entry<Integer, Integer> entry : sortedEntries) { if (!entry.getKey().equals(mostFrequent.getKey())) { System.out.println("- " + entry.getKey() + " (" + entry.getValue() + " раз)"); } } // Дополнительная статистика System.out.println("\n📈 Дополнительная статистика:"); System.out.println("Всего уникальных частот: " + sizeToFreq.size()); int totalRoutes = sizeToFreq.values().stream().mapToInt(Integer::intValue).sum(); System.out.println("Всего обработано маршрутов: " + totalRoutes); double averageR = sortedEntries.stream() .mapToInt(entry -> entry.getKey() * entry.getValue()) .sum() / (double) totalRoutes; System.out.println("Среднее количество R на маршрут: " + String.format("%.2f", averageR)); System.out.println("Ожидаемое среднее: " + (ROUTE_LENGTH * 0.6)); } }