Как видно из названия, у меня есть файл, содержащий словари (каждая по одной строке), отсортированные по А-Я, и я хотел бы получить все словари с помощью данный префикс. Проблема состоит в том, что файл содержит более одного сортированного пробега A-Z, каждый из которых представляет собой другой язык. Невозможно выполнить предварительную обработку файла данных, и поскольку вы не можете определить длину сортированного прогона, я не могу думать о лучшем способе, чем просто перемещаться по всему файлу и сравнивать на пробеге, который принимает O (n). Можно ли достичь O (logN) с помощью этого странно отсортированного файла?Каков наиболее эффективный способ извлечения строки из файла, содержащего несколько отсортированных прогонов
ответ
Ничего лучше, чем сканирование полного файла, возможно, если ни один индекс, ни изменение файла не разрешены, если пробежки неизвестного размера.
Однако, если начальное смещение каждого прогона известно, то полное сканирование файла необходимо выполнить только один раз, и двоичный поиск может быть использован в каждом разделе - для ~ O(k lg (n/k))
после построения индекса. Стартовые смещения тривиально доступны на время работы программы и могут быть сохранены в файле кеша по мере необходимости.
Если начальный индекс также содержит соответствующий префикс верхнего уровня, такой как начальная буква, тогда начальное пространство поиска можно разделить и избежать нескольких попыток.
Если файл невелик и достаточная память, это также может быть возможностью сохранить все в структуре в памяти. Возможно, стоит также взглянуть на существующий магазин, такой как SQLite; хотя предварительная обработка не была осуществимой.
Файл большой, поэтому сортировка в памяти не является вариантом. И да, было бы неплохо иметь смещение, но, к сожалению, у меня их нет. Возможно, полное сканирование неизбежно. – r0dney
@ r0dney Полномасштабное сканирование необходимо выполнить только один раз, поэтому, если запрос имеет много раз в рамках одного и того же процесса (или создается файл кэша/индекса), то он определенно окупится. – user2864740
Я думал об одном и том же, но просто продолжал задаваться вопросом, есть ли лучшее решение. – r0dney
Вы можете объединить списки k в 1 отсортированный список (k way merge), который является задачей o (n * lg (k)). После этого вы сможете выполнить команду o (log n).
- 1. Каков наиболее эффективный способ извлечения строки из строки?
- 2. Каков наиболее эффективный способ извлечения определенного раздела текста из строки
- 3. Каков наиболее эффективный способ извлечения информации из сложных файлов JSON?
- 4. Каков наиболее эффективный способ сохранения строки для извлечения строк текста?
- 5. Каков наиболее эффективный способ извлечения одного элемента из Outlook (interop)
- 6. Каков наиболее эффективный способ извлечения данных из DataReader?
- 7. Каков наиболее эффективный способ извлечения старого контейнера из контейнера?
- 8. Каков наиболее эффективный способ форматирования следующей строки?
- 9. Каков наиболее эффективный способ чтения форматированных данных из большого файла?
- 10. Наиболее эффективный способ извлечения всех натуральных чисел из строки
- 11. Каков наиболее эффективный способ извлечения данных в этом случае?
- 12. Каков наиболее эффективный способ извлечения объектов отношений «многие ко многим»?
- 13. Каков наиболее эффективный способ объявить пустой стек?
- 14. Каков наиболее эффективный способ обрезать эту таблицу?
- 15. Каков наиболее эффективный способ декодирования двоичного файла UTF16?
- 16. Каков наиболее эффективный способ сравнения двух строк?
- 17. наиболее эффективный способ отдельной строки
- 18. Каков наиболее эффективный способ прохождения символов строки в Javascript?
- 19. Каков наилучший способ извлечения строки версии из файла?
- 20. Каков наиболее эффективный способ сохранения HashMap?
- 21. Каков наиболее эффективный способ извлечения информации из большого количества xml-файлов в python?
- 22. PHP: Каков эффективный способ синтаксического анализа текстового файла, содержащего очень длинные строки?
- 23. Каков наиболее эффективный способ синхронизации двух datagridviews?
- 24. Эффективный способ удаления строки из текстового файла
- 25. Каков наиболее эффективный способ перенаправления запросов?
- 26. Каков наиболее эффективный способ отслеживания строки EditText для ввода пользователем?
- 27. Каков наиболее эффективный способ организовать множество методов?
- 28. Каков наиболее эффективный способ инициализации 3D-вектора?
- 29. Каков наиболее эффективный способ хранения этих данных?
- 30. Каков наиболее эффективный способ загрузки пользовательского каталога?
Можете ли вы определить минимальную длину * отсортированного пробега? Если вы можете, то вы можете использовать это, чтобы пропустить, чтобы определить отсортированные прогоны, не глядя на большинство строк. – btilly
@btilly Я не могу предположить ничего, потому что все, что у меня есть, это всего лишь файл данных, и дизайн должен терпеть что угодно. – r0dney
Можете ли вы подсчитать количество символов в строке? (буквальная длина каждого словаря) – yasen