• Как узнать сколько времени займет поиск значения в тхт-списке?

    @deliro
    Как понять сколько времени будет занимать поиск заданного значения и каким способом эффективнее парсить файл?

    Что известно о файле кроме того, что он есть?

    Если значения в случайном порядке, то сложность будет всегда O(N) в худшем случае

    Если в нём значения отсортированы по какому-то признаку и есть явный разделитель (перевод каретки, например), то можно сделать аналог бинарного поиска (за O(logN)). Ну то есть, тыкаем в середину файла (seek(file_size_in_bytes / 2)), ищем вперёд ближайший разделитель (например, перевод каретки), читаем до следующего разделителя (получается строка), сравниваем ну и дальше как обычно. Но нужно учесть, что если это HDD, то движения головки диска не бесплатные и рандомный seek будет медленней последовательного, так что сравнивать "количество строк в секунду" в лоб не выйдет.

    Если ОЗУ позволяет, то можно вычитать весь файл туда и закинуть в структуру, которая больше подходит. Будь то дерево, сортированный массив или хэш-таблица. Если требуется только ответ на вопрос "есть?", то хэш-таблица будет самым производительным вариантом со сложностью O(1)

    Если ОЗУ не позволяет и большинство запросов заведомо будут "мимо", можно сделать фильтр Блума и сканировать файл только если он "возможно есть" и никогда не сканировать, если его "точно нет" (собственно, эти ответы и даёт фильтр Блума)

    Если ОЗУ не позволяет, но файл можно менять, то можно отсортировать его единоразово и дальше бинарный поиск

    Да можно даже содержимое файла в sqlite залить и решить все проблемы, пусть драйвер сам разбирается, что хранить в ОЗУ
    Ответ написан
    Комментировать
  • Как сделать персональное голосовое приветствие на Java?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день!
    Так как, этот вариант требует написания большого кол-ва строк кода, я думаю над тем как реализовать эту задачу.

    Я бы на вашем месте подумал бы над использованием какого-нибудь подходящего паттерна.
    использовать if ... else или switch case это конечно прикольно, но писать такую махину на несколько тысяч строк как-то не очень.
    Можно подумать над применением паттернов - Command, Strategy илиChain of Responsibility
    Можете начать с этих ресурсов:
    https://stackoverflow.com/questions/28049094/repla...
    https://refactoring.guru/
    Ответ написан
    Комментировать
  • Как сделать персональное голосовое приветствие на Java?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    Примерно так:
    var userPrompts = Map.of("SERGEY", new SimplePrompt("SERGEY.wav"),
                             "ANDREW", new SimplePrompt("ANDREW.wav"));
    
    var block = userPrompts.get("SERGEY");


    Сюда бы еще наполнение мапы из бд прикрутить...
    Ответ написан
    Комментировать