![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
zhazhah |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 21.3.2010 Репутация: нет Всего: нет |
Здравствуйте не могу разобраться как работает индекс, к примеру как организован индекс в базах данных.
Как можно обратиться к любому ключу за очень маленький промежуток времени не сканируя всё подряд. Пример есть поисковый индекс с именем indexkey:
Теоретически для меня понятен бинарный поиск, делим пополам узнаём что больше что меньше и т.д пока не найдём нужное число. а как прочитать indexkey и вытянуть к примеру петя 2,4,6 бинарным поиском может кто ни будь помочь? |
|||
|
||||
koroplysov |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 120 Регистрация: 29.8.2009 Репутация: нет Всего: нет |
как в базе организовано досканально не знаю, там есть свои тонкости. почитай двух томник "Фундаментальные алгоритмы на С++" по моему так называется, там очень хорошо и подробно о подобных структурах данных и алгоритмах.
|
|||
|
||||
123qw |
|
|||
Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 12.6.2010 Репутация: нет Всего: нет |
Обязательно у записи должен быть, выражаясь терминами БД, первичный ключ, либо уникальное поле, по которому происходит индексирование. Данные упорядочены по индексу, поэтому на основании этого можно постоить бинарное дерево (тут проблем возникнуть не должно, второй курс университета). Ну, а дальше все элементарно: берешь корень дерева, сравниваешь его с ключем требуемого элемента, если больше, то преходишь в правое поддерево, если меньше в левое, если равны, то возвращаешь данные. Алгоритм продолжать рекурсивно.
Аналогично и с массивом, важное условие, массив так же должен быть отсортирован по ключу. Есть массив, ты сравниваешь самый правый, самый левый и центральный элемент с ключем искомого элемента. Если все мимо, сравниваешь центральный элемент с искомым, если он (центральный) меньше, то правую границу устанавливаешь на место центрального, если меньше, то на левую границу устанавливаешь на место центрального. Алгоритм повторяешь рекурсивно. К примеру, в твоем случае мы обнаружим требуемый элемент уже на первом шаге поиска. В качестве оптимизации можно смещать правую или левую границу не на центральный элемент, а на последующий(в случае, когда смещаем левую границу) или на предыдущий (в случае, когда смещаем правую границу) относительно центрального, т.к. центральный элемент явно не наш кандидат. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |