Итак, вот что:Что происходит быстрее, сортировка вектора, а затем вставка его в дерево AVL или ввод его непосредственно?
У меня есть миллионы, возможно миллиарды строк, которые я пытаюсь разобрать и разместить в сортированной структуре, скажем, у меня 5 000 000 строк. Я пытаюсь написать быструю программу, которая может поместить все эти строки из несортированного вектора в упорядоченную структуру данных, которая также может быстро искать структуру, поэтому аргументация для дерева AVL (в конечном итоге я планирую использовать хэш таблицу az для более быстрого поиска, но это произойдет позже). Сначала я беру все строки в вектор, но все они перепутаны, несортированы и разной длины. Мне не нужны повторяющиеся строки в моем дереве, поэтому, если программа найдет строки «hello» и «hello», у нее будет только одна запись AVL и будет увеличивать целочисленный держатель для частоты появления этой строки.
Итак, мой вопрос заключается в следующем: было бы быстрее отсортировать вектор сначала (используя что-то быстро, как многопоточное quicksort или что-то еще), а затем ввести его в дерево 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
каком случае быстрее ??
--EDIT-- Поэтому, услышав некоторые комментарии, вставка отсортированного массива в дерево AVL с самого начала была бы плохой идеей, что имеет смысл из-за того, сколько будет сделано вращений. Кажется, что прямая вставка в дерево AVL - это, вероятно, хорошая идея, но каков наилучший способ эффективной вставки, когда слово уже находится в дереве где-то? Как я могу убедиться, что найду? Это где моя сортировка может прийти?
Если вы не планируете добавлять больше строк позже, вы можете просто использовать отсортированный векторный и двоичный поиск (aka 'std :: lower_bound') –
Это зависит от того, есть ли у вас определенная функция для добавления отсортированных элементов в ваше дерево AVL. И все же, вам нужно сделать тест, поскольку результат может быть неинтуитивным. – Jarod42
Можно ли вставить в дерево непосредственно из разбора? – MatthiasB