|
Организовать хеш-таблицу с открытой адресацией
|
|||
---|---|---|---|
#18+
Организовать хеш-таблицу с открытой адресацией, используя процедуру поиска и вставки по ключу. Для формирования начального хеш-адреса использовать метод деления, а затем при возникновении коллизии процедуру квадратичного исследования.Помогите пжл с заданием. Есть код, но помогите довести до ума, так как я с java никогда не работал: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2020, 20:12 |
|
Организовать хеш-таблицу с открытой адресацией
|
|||
---|---|---|---|
#18+
А этот цикл когда-нибудь остановится? Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2020, 22:29 |
|
Организовать хеш-таблицу с открытой адресацией
|
|||
---|---|---|---|
#18+
Ага вижу. Вот это правило обепечит останов. Слово hash сбивает с толку. Код: java 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2020, 08:55 |
|
Организовать хеш-таблицу с открытой адресацией
|
|||
---|---|---|---|
#18+
ПётрРедин Есть код, но помогите довести до ума Боюсь, что довести этот код до ума можно только полным удалением. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2020, 14:14 |
|
Организовать хеш-таблицу с открытой адресацией
|
|||
---|---|---|---|
#18+
Собсно. Какая помощь нужна от нас? В теории - никто не будет просматривать код глазами в поисках доказательства правоты. И вряд-ли кто-то станет это компилировать. Щас вообще половина людей читают sql.ru через мобильное устройство. Сами понимаете.... Автору надо просто взять JUnit, и написать хотя-бы 3 теста которые покрывают put/get/remove для простой таблички на 3 ключа. Я думаю этого достаточно чтоб покрыть 99% функционала. И еще автору можно ради примера посмотреть на библиотечку trove. Кажется она оперировала примитивными типами и должна поддерживать режим "открытой адресации" ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2020, 15:28 |
|
Организовать хеш-таблицу с открытой адресацией
|
|||
---|---|---|---|
#18+
mayton В теории - никто не будет просматривать код глазами в поисках доказательства правоты. Я и просмотрел. Этот код вообще творит какую-то дичь, обращаясь с хэш-таблицей как с фрагментированным связанным списком. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2020, 14:02 |
|
Организовать хеш-таблицу с открытой адресацией
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov mayton В теории - никто не будет просматривать код глазами в поисках доказательства правоты. Я и просмотрел. Этот код вообще творит какую-то дичь, обращаясь с хэш-таблицей как с фрагментированным связанным списком. Я не смотрел. Не интересно. Интересно просто рассмотреть такие worst-cases, которые в обычной табличке HashMap на базе бакетов со списками просто невозможны. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2020, 18:53 |
|
Организовать хеш-таблицу с открытой адресацией
|
|||
---|---|---|---|
#18+
А тут как? При 100% заполнении массива. Чтобы определить что ключа 100% нет в хешмапе при неудачном раскладе мы обойдем весь хешмап? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2020, 21:28 |
|
Организовать хеш-таблицу с открытой адресацией
|
|||
---|---|---|---|
#18+
mayton Чтобы определить что ключа 100% нет в хешмапе при неудачном раскладе мы обойдем весь хешмап? Да. Хотя все вменяемые люди обходят только список коллизий. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2020, 13:43 |
|
Организовать хеш-таблицу с открытой адресацией
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov mayton Чтобы определить что ключа 100% нет в хешмапе при неудачном раскладе мы обойдем весь хешмап? Да. Хотя все вменяемые люди обходят только список коллизий. А в какой момент мы поймем что цепочка завершилась? Ведь цепочка (виртуальная цепочка которую мы подразумеваем для метода открытой адресации) не имеет явного терминатора и если мы на каком-то шаге неступаем на левый key - означает ли это что наша цепочка прервана или просто этот левый key был "удачно" вставлен при 99% загрузке всех свободных слотов массива? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2020, 13:51 |
|
Организовать хеш-таблицу с открытой адресацией
|
|||
---|---|---|---|
#18+
mayton подразумеваем для метода открытой адресации Виноват, признаю свою ошибку. Никогда до этого не слышал о методе открытой адресации. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.06.2020, 14:28 |
|
Организовать хеш-таблицу с открытой адресацией
|
|||
---|---|---|---|
#18+
И слава богу. Я этот метод изучал еще в университете. И пожалуй .. видел его в книге Седжвика - Фундаментальные Алгоритмы 1-4 У него есть одно преимущество. Он может использовать массив примитивов int (например) для ключей и значений. И заполнить его на 100%. Но при этом у нас должен быть договорняк о том что какая-то константа например MIN_INT обозначает NULL или пустое значение. К сожалению автор обошёл это со стороны просто вводя массив Код: java 1.
и это преимущество в компактности было потеряно. Чуть позже я сфоткаю иллюстрацию с книги седжвика. Там были показаны disadvantages открытой адресации для linear probes и двойного хеша. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.06.2020, 14:37 |
|
Организовать хеш-таблицу с открытой адресацией
|
|||
---|---|---|---|
#18+
Да ладно, я уже почитал в википедии что это за зверь. Вопрос на проверку: вместимость такой хэш-таблицы реально ограничена размером массива? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2020, 13:46 |
|
Организовать хеш-таблицу с открытой адресацией
|
|||
---|---|---|---|
#18+
Хм... хороший вопрос. Дай порассуждаю. Т.к. у меня тоже есть сомнения на этот счет. Для метода линейных проб (linear probes) в случае 1-й неудачи мы должны повторять алгоритм генерации следующего номера ячейки как взаимно-простое число с размером таблицы. Документация пишет что взаимно-простое - нужно для гарантии того что каждая ячейка-слот будет просмотрена хотя-бы 1 раз. Например для размера size=20 я могу взять взаимно простое число 3 и если хеш=15 то следующий слот будет (15 + 3) MOD 20 = 18, потом (18 + 3) MOD 20 = 1 и так далее. Из этого я себе так понимаю что критерий останова - это просмотр всех слотов. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2020, 13:54 |
|
Организовать хеш-таблицу с открытой адресацией
|
|||
---|---|---|---|
#18+
Кусок книги Роберта Седжвика. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2020, 22:31 |
|
Организовать хеш-таблицу с открытой адресацией
|
|||
---|---|---|---|
#18+
mayton Dimitry Sibiryakov пропущено... Да. Хотя все вменяемые люди обходят только список коллизий. А в какой момент мы поймем что цепочка завершилась? Ведь цепочка (виртуальная цепочка которую мы подразумеваем для метода открытой адресации) не имеет явного терминатора и если мы на каком-то шаге неступаем на левый key - означает ли это что наша цепочка прервана или просто этот левый key был "удачно" вставлен при 99% загрузке всех свободных слотов массива? там будет не больше 8 коллизий - я думаю этим ребятам стоит верить) пс.вообще мне бывает смешно - когда кафка 10 % теряет и это ок,а когда в мапу что то кладется и там народ парится за коллизию котоая в реальной жизни произодйтет 1 раз в сто лет) ребаята потеря данных это нормально) - если вы не хотите их терять изайте коробочныне решения - но это стоит денег если денег нет мей би ваши данные не на столько важны? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2020, 20:00 |
|
|
start [/forum/topic.php?fid=59&msg=39971264&tid=2120752]: |
0ms |
get settings: |
25ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
42ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
302ms |
get tp. blocked users: |
1ms |
others: | 23ms |
total: | 427ms |
0 / 0 |