В качестве аргумента передаётся имя файла со множеством строк. Для каждой строки из stdin выводит "YES", если она встречается в файле, и "NO" иначе. Работа заканчивается после ввода строки "exit".
Для выбора оптимального решения было реализовано несколько решений. Мы имеем дело с задачей многокритериальной оптимизации. Так как нет никакой информации о строках во входном файле (чтобы оптимизировать используемую память) и количестве запросов (чтобы оценить соотношение затрат времени на препроцессинг и ответ на запрос), в качестве итогового выбран бор со сбалансированным деревом переходов в вершинах, обладающий минимальным временем на запрос.
Бор с массивом переходов в каждой вершине. Реализован в качестве эталона для замеров времени работы всех остальных решений. Требует очень много памяти. Результаты тестирования:
Test | Create | Search | Memory |
---|---|---|---|
small | segmentation fault | ||
small1 | 1.99s | 4.41s | 2.9Gb |
medium | segmentation fault | ||
medium1 | 1.27s | 1.20s | 2.5Gb |
domains | segmentation fault |
Бор с односвязным списком переходов в каждой вершине. Результаты тестирования:
Test | Create | Search | Memory |
---|---|---|---|
small | 53.56s | 52.71s | 774Mb |
small1 | 5.86s | 42.10s | 150Mb |
medium | 10.70s | 15.22s | 1.7Gb |
medium1 | 0.37s | 4.04s | 105Mb |
domains | 1.47s | 1.12s | 148Mb |
Бор с упорядоченным односвязным списком переходов в каждой вершине. Результаты тестирования:
Test | Create | Search | Memory |
---|---|---|---|
small | 49.92s | 57.77s | 774Mb |
small1 | 4.80s | 38.97s | 150Mb |
medium | 9.85s | 15.93s | 1.7Gb |
medium1 | 0.36s | 3.86s | 105Mb |
domains | 2.02s | 2.16s | 148Mb |
Бор со сбалансированным деревом переходов в каждой вершине. Результаты тестирования:
Test | Create | Search | Memory |
---|---|---|---|
small | 54.22s | 11.93s | 1.1Gb |
small1 | 5.39s | 9.23s | 225Mb |
medium | 12.73s | 3.58s | 2.6Gb |
medium1 | 0.52s | 1.42s | 170Mb |
domains | 2.48s | 0.94s | 221Mb |
Сет из STL, в котором храним хеши строк. Компилируется под g++. Реализован в качестве альтернативы бору для сравнения. Результаты тестирования:
Test | Create | Search | Memory |
---|---|---|---|
small | 17.51s | 22.76s | 305Mb |
small1 | 2.45s | 19.30s | 55Mb |
medium | 4.86s | 9.95s | 38Mb |
medium1 | 0.26s | 8.63s | 2Mb |
domains | 1.47s | 1.37s | 31Mb |