Итак, вот ситуация:
У меня есть миллионы, возможно, миллиарды строк, которые я пытаюсь проанализировать и поместить в отсортированную структуру, скажем, у меня есть 5 000 000 строк. Я пытаюсь написать быструю программу, которая может поместить все эти строки из несортированного вектора в упорядоченную структуру данных, которая также может быстро искать структуру, таким образом, рассуждение для дерева AVL (которое в конечном итоге я планирую использовать хеш-таблицу az для еще более быстрого поиска, но это происходит позже). Сначала я помещаю все строки в вектор, но все они перемешаны, не отсортированы и имеют разную длину. Мне не нужны повторяющиеся строки в моем дереве, поэтому, если программа найдет строки «привет» и «привет», она будет иметь только одну запись AVL и будет увеличивать целочисленный держатель для частоты появления этой строки.
Итак, мой вопрос заключается в следующем: было бы быстрее сначала отсортировать вектор (используя что-то быстрое, например, многопоточную быструю сортировку или что-то еще), а затем ввести его в дерево AVL после того, как все слова отсортированы вместе с другими такими же словами, ИЛИ быстрее просто поместить все данные из несортированного вектора в дерево AVL и постоянно проверять дерево AVL на наличие уже существующего слова, а затем увеличивать его.
Итак, чтобы изобразить это в порядке операций, вот два случая:
CASE A:
> Get input/parse strings
> Put strings into vector (unsorted)
> Put vector into array or linked-list
> Quicksort that array/llist
> Input that sorted array into the AVL Tree
CASE B:
> Get input/parse strings
> Put strings into vector (unsorted)
> Insert vector data into AVL tree
> During insertion, check if there are duplicate words, if so, increment the counter
Which case is faster??
--EDIT-- Итак, услышав некоторые комментарии, вставка отсортированного массива в дерево AVL с самого начала была бы плохой идеей, что имеет смысл из-за того, сколько поворотов будет сделано. Кажется, что прямая вставка в дерево AVL, вероятно, хорошая идея, но как лучше всего эффективно вставить слово, когда слово уже находится где-то в дереве? Как я могу убедиться, что найду его? Это где моя сортировка может прийти?
std::lower_bound
) - person Anton Savin   schedule 24.11.2014