Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Java, B-деревья, бинарный поиск в файле 
:(
    Опции темы
zhazhah
Дата 13.6.2011, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 21.3.2010

Репутация: нет
Всего: нет



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

Пример есть поисковый индекс с именем indexkey: 
Код

вася  1,2,5
коля  4,7,8
петя  2,4,6


Теоретически для меня понятен бинарный поиск, делим пополам узнаём что больше что меньше и т.д пока не найдём нужное число. 
а как прочитать indexkey и вытянуть к примеру петя 2,4,6 бинарным поиском 
может кто ни будь помочь?
PM MAIL   Вверх
koroplysov
Дата 14.6.2011, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 29.8.2009

Репутация: нет
Всего: нет



как в базе организовано досканально не знаю, там есть свои тонкости. почитай двух томник "Фундаментальные алгоритмы на С++" по моему так называется, там очень хорошо и подробно о подобных структурах данных и алгоритмах.
PM MAIL   Вверх
123qw
Дата 17.6.2011, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 12.6.2010

Репутация: нет
Всего: нет



Обязательно у записи должен быть, выражаясь терминами БД, первичный ключ, либо уникальное поле, по которому происходит индексирование. Данные упорядочены по индексу, поэтому на основании этого можно постоить бинарное дерево (тут проблем возникнуть не должно, второй курс университета). Ну, а дальше все элементарно: берешь корень дерева, сравниваешь его с ключем требуемого элемента, если больше, то преходишь в правое поддерево, если меньше в левое, если равны, то возвращаешь данные. Алгоритм продолжать рекурсивно. 
Аналогично и с массивом, важное условие, массив так же должен быть отсортирован по ключу. Есть массив, ты сравниваешь самый правый, самый левый и центральный элемент с ключем искомого элемента. Если все мимо, сравниваешь центральный элемент с искомым, если он (центральный) меньше, то правую границу устанавливаешь на место центрального, если меньше, то на левую границу устанавливаешь на место центрального. Алгоритм повторяешь рекурсивно. 
К примеру, в твоем случае мы обнаружим требуемый элемент уже на первом шаге поиска.
В качестве оптимизации можно смещать правую или левую границу не на центральный элемент, а на последующий(в случае, когда смещаем левую границу) или на предыдущий (в случае, когда смещаем правую границу) относительно центрального, т.к. центральный элемент явно не наш кандидат.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0712 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.