Самый простой для реализации онлайн отсортированная структуры данных в C

голоса
1

Я сканирование большого источника данных, в настоящее время около 8 миллионов словарных статей, извлекая на строку на запись, которую я хочу в алфавитном порядке.

Currenlty Я положил их в массиве затем сортировать индекс к ним , используя qsort()который работает отлично.

Но из любопытства я имею в виду, а не вставляя каждую строку в структуру данных, которая поддерживает их в алфавитном порядке, как я просматриваю их из источника данных, отчасти из-за опыта emlplementing один, отчасти потому, что он будет чувствовать себя быстрее, без ожидания для сортировка завершить после завершения осмотра (-:

Какая структура данных будет наиболее просто реализовать в C?

ОБНОВИТЬ

Для уточнения, только операции мне нужно выполнить при вставке элемента и сброса индекса, когда это делается, с помощью которого я имею в виду для каждого элемента в исходном порядке дамп целое число, представляющее порядок это после сортировки.

РЕЗЮМЕ

  • Проще всего реализовать бинарные деревья поиска.
  • Самобалансировани бинарные деревья гораздо лучше, но нетривиальным реализовать.
  • Вставка может быть сделана итерационно, но с упорядочиванием обхода для захоронения результатов и после заказа обхода для удаления дерева, когда сделано и требует либо рекурсии или явный стека.
  • Без реализации балансировки, пробеги заказанного ввода приведет к вырожденной худшем случае, который является связным списком. Это означает, что глубокие деревья, которые сильно влияют на скорость операции вставки.
  • слегка Шаркая вход может распасться упорядоченный ввод значительно и проще реализовать эту балансировку.
Задан 11/04/2011 в 18:23
источник пользователем
На других языках...                            


4 ответов

голоса
3

Бинарные деревья поиска. Или самобалансирующиеся дерева поиска. Но не стоит ожидать тех , кто будет быстрее , чем должным образом реализован динамический массив, поскольку массивы имеют гораздо более локальность ссылок , чем указатель структуры. Кроме того , несбалансированный BSTs может «идти линейным», поэтому весь ваш алгоритм становится O ( п ²), так же , как быстрая сортировка.

Ответил 11/04/2011 в 18:24
источник пользователем

голоса
0

Вы могли бы реализовать быстрее алгоритм сортировки, такие нам Timsort или другие алгоритмы сортировки с NLog (п) худшим случаем и просто найти его с помощью двоичного поиска, так как его быстрее, если список отсортирован.

Ответил 11/04/2011 в 18:29
источник пользователем

голоса
0

Вы должны взглянуть на Trie структуру данных WikiLink я думаю , что это будет служить то , что вы хотите

Ответил 18/04/2011 в 08:20
источник пользователем

голоса
2

Вы уже используете оптимальный подход. Сортировка в конце будет намного дешевле, чем поддержание онлайн отсортированы структуры данных. Вы можете получить тот же O (LogN) с RB-дерева, но константа будет гораздо хуже, не говоря уже значительное пространство над головой.

Это сказало, AVL деревья ПУЭ и деревья гораздо проще осуществить , если вам не нужно поддерживать удаление. Левый наклоняясь Р.Б. дерево может поместиться в 50 или около того строк кода. См http://www.cs.princeton.edu/~rs/talks/LLRB/ (по Седжвик)

Ответил 19/04/2011 в 05:31
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more