cyberia
@cyberia
Веб-разработчик, плавно перехожу в мобильные разра

Как применять деревья поиска в реальных проектах?

Учусь заочно, на прошлой сессии ввели предмет САОД, рассказывали про деревья, списки, стеки. Если с последними все понятно, то вот с деревьями не так все просто.

Итак, нам прочитали вводный курс, дали методичку и пару лаб, все сдано и в конце задают курсовую: нужно сделать небольшую БД (сортировки, поиск), по максимуму используя полученные знания. Но вот беда: объяснили нам на цифрах все, а как применить это в реальном проекте у меня мало идей. Как использовать дерево для хранения и поска тех же строк? Что будет ключами, как определять вес в этом случае?

Подскажите где почитать про это? Все что нахожу — это лекции с разных универов, которые, как и моя методичка, всего лишь поверхностное представление дают…
  • Вопрос задан
  • 4669 просмотров
Пригласить эксперта
Ответы на вопрос 5
barmaley_exe
@barmaley_exe
Деревья поиска хороши тем, что позволяют быстро осуществлять все основные операции: поиска, вставка, удаление. Деревьев есть много разных: АВЛ, красно-черные, различные вариации B-деревьев и многие другие.

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

Подробностей архитектуры баз данных и используемых структур я Вам не подскажу (да и они наверняка используют достижения науки, не рассказываемые в университетских курсах), но могу сказать следующее:
  • Если Ваша база будет невелика — используйте красно-черное дерево (или АВЛ).
  • Если база может быть большой — используйте B деревья (для случаев, когда все данные просто не влезут в память).

В каждом узле дерева Вы будете хранить помимо ключа, ссылок на детей и, возможно, некоторой вспомогательной информации для балансировки ещё и те дополнительные значения, которые могут быть ассоциированы с ключом.
Тип ключа, разумеется, совершенно неважен. Главное — возможность сравнивать ключи и определять, какой из двух меньше / больше.

Однако, я бы не очень назвал такое применение реальным проектом. В реальных проектах Вам редко придётся вручную реализовывать какую-либо структуру данных — всегда можно (и нужно) использовать существующие библиотеки.
Ответ написан
Комментировать
vsespb
@vsespb
en.wikipedia.org/wiki/B-Tree

там есть картинка, она всё объясняет. либо поищите b-tree или database index на русском.
Ответ написан
Комментировать
@Elsedar
Купите Кормена, не пожалеете.
www.ozon.ru/context/detail/id/2429691/
Ответ написан
Комментировать
Akson87
@Akson87
Вообще-то деревья не только для строк используют, например в геометрии без них часто никуда не денешься. Посмотрите на kd-tree для поиска ближайших точек или octree для представления объема.
Ответ написан
Комментировать
opium
@opium
Просто люблю качественно работать
Так вы ищите не по строкам а по индексам дерева. Обычно в лабах это подразумевают, а не полнотекстовый поиск.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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