Важные структуры данных в поиске

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

Я, прежде всего, интересуюсь структурами данных, которые относятся к поисковым приложениям (например, Google / Lucene) и общий компромисс между задержанным вычислением и предварительным вычислением. Я также интересуюсь распределенными структурами данных - структуры данных, которые могут масштабироваться через сотни / тысячи серверов - и вероятностных структур данных - структуры данных, которые помогают нахождению приблизительного ответа, но не должны всегда быть корректными.

Википедия имеет список структур данных. Я в настоящее время рассматриваю:

  • Хеш-таблица
  • B +-Tree
  • R-дерево
  • KD-дерево
  • Дерево основания
  • Фильтр цветка

Есть ли лучший выбор?

Наконец, есть ли какая-либо (главная) проблема с реализацией этих структур на языке как F#?

8
задан Tristan 30 December 2009 в 14:58
поделиться

4 ответа

Очень амбициозно. Я проголосовал за ваш вопрос только ради его рамок.

MIT имеет он-лайн алгоритмы и структуры данных курса . Сопутствующая книга - классика. Я не уверен, что в ней рассматриваются распределенные и вероятностные особенности, но они дадут вам отличное обоснование в основах.

Я бы добавил красно-черное дерево, хэш-таблицы, Патрисию Три и списки пропусков в вашу повестку дня.

Удачи.

5
ответ дан 5 December 2019 в 12:09
поделиться

Если вы собираетесь заниматься подобными вещами на функциональном языке, то вам следует взглянуть на Purely Functional Data Structures Криса Окасаки. Основной урок заключается в том, что структуры данных, с которыми вы знакомы для императивного программирования, могут быть не лучшим выбором для функционального программирования. Я ожидаю, что есть много похожего материала, для которого нужно погуглить

.
4
ответ дан 5 December 2019 в 12:09
поделиться

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

Можно посмотреть на классические алгоритмы поиска, такие как альфа-бета, A*, AO*.

Затем посмотреть на что-то вроде итеративного углубления поиска.

В поисковых алгоритмах такие вещи, как стеки и связанные списки (которые на самом деле являются разновидностью стека) и деревья более важны, чем хэш-таблицы, B-деревья и т.д. Конечно, хэш-таблицы там, несомненно, будут, но это не будет сердцевиной алгоритма.

Вот несколько более важных алгоритмов поиска:

  1. B* поиск
  2. обратный поиск
  3. лучший поиск
  4. лучший поиск
  5. двунаправленный поиск
  6. поиск в горах
  7. имитирующий отжиг
  8. IDA*
  9. итеративный глубинный поиск
  10. мини-максовый поиск
  11. поиск ближайшего соседа
  12. активация расширения
  13. поиск в пространстве (не метод, просто способ концептуализации задачи). Что касается специфических структур данных для поиска, то они действительно не нужны. В принципе, нужен просто обычный инструментарий структур данных - деревья, хэши, списки

    .
3
ответ дан 5 December 2019 в 12:09
поделиться

Поскольку вы очень мало знаете о DS, я думаю, что вам следует начать со списков (одиночных и двойных списков)

Затем вы сможете изучать различные структуры данных деревьев.

Также, поскольку вы интересуетесь DS, относящимся к поиску, я думаю, что вам следует изучить B-дерево+ деревья и хэш-таблицу.

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

.
2
ответ дан 5 December 2019 в 12:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: