Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.06.2009, 23:19   #1
diliana
Форумчанин
 
Аватар для diliana
 
Регистрация: 24.05.2009
Сообщений: 119
Вопрос Теоретический Вопрос о поиске

Привет

Теоретический Вопрос

Сколько сравнений требуется для поиска ключа 37 в 10-элементной хеш-таблице вида 70, 51, 22, 13, 94, 25, 0, 37, 0, 89, построенной с помощью простейшей хеш-функции?

1. одно
2. восемь
3. три
4. 10

Я думаю, что ответ№ 2. Это правильно?
diliana вне форума Ответить с цитированием
Старый 10.06.2009, 23:46   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

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

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 11.06.2009, 00:47   #3
diliana
Форумчанин
 
Аватар для diliana
 
Регистрация: 24.05.2009
Сообщений: 119
По умолчанию

Цитата:
Сообщение от Sazary
Вроде, восемь. Но если идти от конца, то три. Как-то неоднозначно получается. Хотя в хеш-таблицах, насколько я знаю, поиск от начала.

а я вот как думаю
эти ключи надо разместить в массиве из 10 ячеек с помощью хеш-функции

для этого делим ключи нацело на 10
остаток - индекс в массиве
получилась такая хеш-таблица
___________________________
1_2_3__4__5__6__7__8__9__10
0_0_70_51_22_13_94_25_37_89


ищем 37 - 37 делим на 10, берем остаток 7, заходим в ячейку 7, но там 94, значит начинаем идти с начала и сравниваем

итого 8 сравнений. пока не доберемся до 37

вроде как-то так.... Это правильно?

Последний раз редактировалось diliana; 11.06.2009 в 00:56.
diliana вне форума Ответить с цитированием
Старый 11.06.2009, 01:09   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Не о том подумал
Мало я знаю о хеш-таблицах... Вроде, все логично.
Но если в качестве элементов таблицы использовать списки, то, по идее, мы найдем нужное значение за 1 сравнение, т.к. 37 будет в ячейке 7.
Разве нет?

То есть таблица будет представлять из себя что-то вроде этого:
Код:
0 1   2   3   4    5   7    9
0 51 22 13 94 25 37  89
0
70
И еще вот добавлю:
Цитата:
ищем 37 - 37 делим на 10, берем остаток 7, заходим в ячейку 7, но там 94, значит начинаем идти с начала и сравниваем
почему сначала? Мы ведь знаем, что 37 будет после 94. Поэтому можно идти от 7-й ячейки.
Тогда уже получится 3 сравнения.. Хм..
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]

Последний раз редактировалось Sazary; 11.06.2009 в 01:18.
Sazary вне форума Ответить с цитированием
Старый 11.06.2009, 01:28   #5
diliana
Форумчанин
 
Аватар для diliana
 
Регистрация: 24.05.2009
Сообщений: 119
По умолчанию

Цитата:
Мало я знаю о хеш-таблицах... Вроде, все логично.
Я тоже

Цитата:
Но если в качестве элементов таблицы использовать списки, то, по идее, мы найдем нужное значение за 1 сравнение, т.к. 37 будет в ячейке 7.
Разве нет?
нет, речь только о массиве

хеш-таблицей называется массив заполненный элементами в порядке определяемом хеш-функцией


Цитата:
То есть таблица будет представлять из себя что-то вроде этого:

Код:
Код:
0 1   2   3   4    5   7    9
0 51 22 13 94 25 37  89
0
70
то что вы изобразили очень похоже на поразрядную сортировку
там как раз списки и применяются, но это не хеш...
diliana вне форума Ответить с цитированием
Старый 11.06.2009, 01:32   #6
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Я не изобретал Это уже придумано до меня ) И называется "внешнее хеширование", или "метод цепочек"
http://wwwcdl.bmstu.ru/iu7/stage8.htm

Если речь конкретно о массиве, то да, число вариантов сокращается до 2-х. Т.к. я по-прежнему считаю, что можно идти сразу от 7-й ячейки, а не от начала.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 11.06.2009, 01:53   #7
diliana
Форумчанин
 
Аватар для diliana
 
Регистрация: 24.05.2009
Сообщений: 119
По умолчанию

Цитата:
Я не изобретал Это уже придумано до меня ) И называется "внешнее хеширование", или "метод цепочек"
http://wwwcdl.bmstu.ru/iu7/stage8.htm
да есть такое, вот только что в лекции прочитала

Цитата:
Если речь конкретно о массиве, то да, число вариантов сокращается до 2-х. Т.к. я по-прежнему считаю, что можно идти сразу от 7-й ячейки, а не от начала.
Но все же Sazary давайте придем к какому-то выводу

Так как варианта ответа «2 сравнения» нет, то остается или вариат «1 сравнение» или «3 сравнение»

Если принять во внимание открытое хеширование+гадание на филосовском камне,то значит побеждает вариант «1 сравнение»
Это правильно?
diliana вне форума Ответить с цитированием
Старый 11.06.2009, 01:58   #8
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Так как варианта ответа «2 сравнения» нет, то остается или вариат «1 сравнение» или «3 сравнение»
Эм..Почему "2 сравнения"?
Проверяем 7-ю ячейку - там 94. Это раз.
Проверяем 8-ю - там 25. Это два.
Проверяем 9-ю - там 37. То, что надо. Итого - 3 сравнения.

Я лично больше склоняюсь именно к варианту 3 (если не брать во внимание открытое хеширование).

А вообще, ведь тут от реализации зависит. Можно сделать и так, чтобы поиск шел от начала (тогда будет 8 сравнений). Но это как-то неэффективно. Ведь мы знаем, что не спроста в 7-й ячейке число, которое дает при делении на 10 в остатке 4. То есть мы знаем, что 37 будет правее 94.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 11.06.2009, 02:14   #9
diliana
Форумчанин
 
Аватар для diliana
 
Регистрация: 24.05.2009
Сообщений: 119
По умолчанию

Цитата:
Эм..Почему "2 сравнения"?

Проверяем 7-ю ячейку - там 94. Это раз.

Проверяем 8-ю - там 25. Это два.

Проверяем 9-ю - там 37. То, что надо. Итого - 3 сравнения.

Я лично больше склоняюсь именно к варианту 3 (если не брать во внимание открытое хеширование).

А вообще, ведь тут от реализации зависит. Можно сделать и так, чтобы поиск шел от начала (тогда будет 8 сравнений). Но это как-то неэффективно. Ведь мы знаем, что не спроста в 7-й ячейке число, которое дает при делении на 10 в остатке 4. То есть мы знаем, что 37 будет правее 94.

Полностью с вами согласна! Все очень логично!
Также еще раз общалась с философским камнем, он тоже это подтвердил!

Sazary большое спасибо за внимание!!!
diliana вне форума Ответить с цитированием
Старый 11.06.2009, 02:28   #10
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от diliana
Также еще раз общалась с философским камнем, он тоже это подтвердил!
Какой разговорчивый камешек

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

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Требуется помощь в поиске информации 5naip Свободное общение 2 21.05.2009 04:54
Нужна помощь в поиске и сортировки(на Delphi) Mamant Помощь студентам 1 05.05.2009 14:40
Нужна помощь в поиске ошибки m9ss Общие вопросы Delphi 6 05.03.2009 13:14