Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
Есть у меня тут задача, накидал вариант решения Если коротко, условие задачи выглядит примерно так:
В общем почитал статью А. Шарахова, исходники дельфийского словаря И получилась примерно такая концепция: - размер равен степени 2 минус 1 (минимальный размер 7) - бакет это некоторое виртуальное место, куда можно положить элемент, количество бакетов равно размеру таблицы - индекс это позиция, в которой хранится элемент - бакет может быть меньше индекса, это значит, что было несколько элементов с одним бакетом - если бакет сильно больше индекса, значит было переполнение в конце - при удалении возвращается True если есть дубликат Я зафигачил тестовый проект, где есть проверки: элементарные в случае Release и доскональные в случае Debug Смущает производительность. Даже 100k элементов без дубликатов считаются 1,5 секунды в Release . С дубликатами - уже 6 секунд. В общем есть ощущение, что я что-то делаю не так и производительность должна быть на порядок выше. Смотрите аттач Немного кода под катом: Код: pascal 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. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2021, 23:59 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, Там к статье исходники прилагаются, взял бы и не парился. P.S. Как будет время планирую еще ускорить для очень больших таблиц, но это не твой случай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2021, 02:23 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, Во-первых, у тебя там юзается другая организация данных Во-вторых, не рассчитана на дубликаты В-третьих, у тебя там используются индексы как признак пустой ячейки. У меня могут быть «спец» указатели, совпадающие с индексом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2021, 02:47 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU Aleksandr Sharahov, Во-первых, у тебя там юзается другая организация данных Во-вторых, не рассчитана на дубликаты В-третьих, у тебя там используются индексы как признак пустой ячейки. У меня могут быть «спец» указатели, совпадающие с индексом 1. Ну да, другая, более быстрая, тебе же это надо? 2. Рассчитана, но не по-твоему. А ты правда не знаешь, как сделать их различимыми или как хранить цепочку дубликатоа? 3. И как одно помешает другому? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2021, 09:22 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, Посмотри код Скажи, что там не так Потому что вроде бы всё так Первый приоритет - это потребление памяти Производительность - по остаточному принципу Но 1/4 свободных ячеек - норм ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2021, 11:23 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
В несколько раз ускорил, когда сделал Код: pascal 1. 2. Но всё равно мне кажется не то ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2021, 12:07 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
Сделал размер степени двойки 100k в Release считается за 400мс Вроде неплохо Но стоит добавить хотя бы по одному дубликату - проседает почти до 2 сек ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2021, 12:52 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Код: pascal 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2021, 12:56 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Да, ты прав Небо и земля Может что-то попроще взять? Типа седжвика, например Вот неплохой вариант (от hash_table2.zip): Код: pascal 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2021, 13:17 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, Попроще - это для x86 без хеша вообще, а для x64 брать младшие 4 байта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2021, 13:47 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
Что-то я совсем не догоняю Почему это работает супер быстро: Код: pascal 1. 2. 3. 4. А вот это вот супер медленно: Код: pascal 1. 2. 3. 4. По идее наоборот. Если большинство указателей выровнены на 16 байт, то смещение наоборот должно дать хорошее распределение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2021, 14:46 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUВозможны дубликаты (не часто), функция удаления должна возвращать, остался ли дубликат реализация из дельфи очень плохо ложится на "условие возможности дуликатов" и вообще на "исключающий поиск" т.е. "спрашивать то чего нет" это очень тормознуто это возникает из-за того что для разруливания коллизий используется алгоритм "проверять до пустой", а обычно все значения кучкуются (теоретически вероятность встретить значение типа деградирует как (Size/Capacity)^i, но поди найди идеальную хэш-функцию), т.е. проверка наличия обычно деградирует на поиск совпадающего кеша по большому куску таблицы. лучше поискать реализации с устранением коллизий с помощью бинарных деревьев (есть реализации на плоском массиве, ищи), либо искать очень хорошую хэш-функцию и разряжать массив (Size/Capacity -> 0), что бы дырки были чаще ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2021, 06:47 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, В стандартной либе дельфи нет хеш-таблиц? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2021, 06:54 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU Что-то я совсем не догоняю Почему это работает супер быстро: Код: pascal 1. 2. 3. 4. А вот это вот супер медленно: Код: pascal 1. 2. 3. 4. По идее наоборот. Если большинство указателей выровнены на 16 байт, то смещение наоборот должно дать хорошее распределение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2021, 07:04 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), Действительно в Delphi поиск до пустого Я же ищу только в рамках бакета Насчёт кучковаться. Наоборот скученность должна давать много коллизий Соответственно быть медленной ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2021, 07:56 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU kealon(Ruslan), Действительно в Delphi поиск до пустого Я же ищу только в рамках бакета Насчёт кучковаться. Наоборот скученность должна давать много коллизий Соответственно быть медленной ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2021, 09:16 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), Робин Гуд очень хорошо помогает в ситуации, когда в таблице формируются большие кластеры. Заполненность таблицы можно довести до 0.99 (если правильно помню, в расте хеш-таблицы с робин гудом, и там 0.9 по дефолту). Когда я с ним экспериментировал на обычных данных, то не впечатлился (скорость вставки несколько снижается, по сравнению с линейной схемой), однако, впоследствии, встретил ситуацию, при которой таблица без робин гуда адово тормозила. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2021, 11:33 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Тормозит на 20-30% потому, что "скакать надо" по массиву в произвольном порядке реализации с деревьми тоже такой-же эффект имеют на современных процах, но они не дают обвалиться производительности на плохих случаях - за всё надо платить. В той же jave хвалятся, что реализовали устранение коллизий через бинарное дерево, но факт выше как-то умалчивают, и про перерасход памяти раза в 3 тоже молчат. Можно бы было как вариант поддерживать сортировку по (Hash & C) - это бы позволило не гулять по всему куску при удалении и поиске, но он уже таблицу хешей срезал, что разумно. В его случае, что бы побороться за производительность придётся пустить съэкономленную память на "слабое заполнение". "Открытая адресация" других вариантов не оставляет. Ну и хорошо подбирать хэш-функцию под ситуацию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2021, 12:22 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan) Тормозит на 20-30% Не совсем понял, что тормозит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2021, 14:22 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey kealon(Ruslan) Тормозит на 20-30% Не совсем понял, что тормозит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2021, 15:27 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), В смысле, робингуд тормозит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2021, 15:30 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, да, так же как и 2-choice hashing чем тупее код, тем он в идеальном варианте быстрее (при прочих равных естественно: хэш-функция, ёмкость) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2021, 15:40 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), Ты чего-то путаешь. У робингуда на вставке снижение очень незначительное, ни о каких десятках процентов нет и речи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2021, 15:52 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), И ещё на счёт: kealon(Ruslan) "спрашивать то чего нет" это очень тормознуто Берём таблицу с робингудом на 300K элементов (указателей). Примем условие, что только 30% ключей являются уникальными. Усложним задачу, установив заполнение таблицы: 0.99 Код: plaintext 1. 2. 3. 4. Как видим, поиск существующих и не существующих ключей выполняется за одинаковое время. Теперь посмотрим как выглядит эта таблица: Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2021, 16:23 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, при поиске всегда выдается первый найденный? вставляем 3 раза по 3 дубликата - непонятно как выглядят заголовки процедур? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2021, 16:47 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, Да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2021, 16:51 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, там еще про заголовки непонятка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2021, 16:52 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov вставляем 3 раза по 3 дубликата Нет, вставляются 100K уникальных ключей 3 раза. Aleksandr Sharahov непонятно как выглядят заголовки процедур? Не понял... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2021, 16:53 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, по идее хеш-таблица не содержит дубликатов, поэтому возникают 2 вопроса: - есть ли возможность хранить дубликаты в твоей таблице? - если есть, то каков API? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2021, 16:57 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, Да, хранить дубликаты можно. Код: pascal 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. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. Удаление делается по условию топикстартера, т.е. функция удаления возвращает булево в зависимости от наличия в таблице дубликатов ключа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2021, 17:06 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, понятно. На мой взгляд, как-то костыльно хранить дубликаты с доступом только к первому, то топикстартеру видней, конечно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2021, 17:13 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, Нет смысла делать доступ к каждому из дубликатов, когда нет ассоциированных данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2021, 17:19 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, в данном случае - да (дубликаты просто выполняют роль счетчика), но в общем случае это не так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2021, 17:24 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
О! Нашёл ошибку в удалении ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2021, 17:36 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, ну а если добавить все "красивости": KeyNotify, ValueNotify (с виртуальностью и с поддержкой OnKeyNotify OnValueNotify естественно), стандартный IComparer<T> а не статик функции. взять простые типы вроде Integer, взять данные без существенных коллизий (ну хоть последовательно от 1 до млн) и какая будет разница? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2021, 20:07 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), Дефолтный словарь <integer, integer>, 1M элементов вставка: 221. Таблица с робингудом повторяющая обес словаря с виртуализованными вызовами нотификаций и дефолтным компарером: 154. Если увеличить фактор заполнения таблицы до 0.97, то скорость снижается до: 207, но и расход памяти сокращается в 2 раза. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2021, 21:23 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
Коллеги Мы так и не ответили на вопрос, почему плохая хеш-функция, дающая большое количество коллизий, в итоге даёт многократный прирост ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2021, 22:17 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, Прирост даёт, как раз, функция не имеющая коллизий (даже в 64-битном тесте все указатели не выходят за пределы 32 бит). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2021, 22:37 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, BJ32BitFAHash даёт хороший результат Но NativeUInt(P) and ACapacityMask работает в полтора раза быстрее Посмотри вот это сообщение 22301081 Для тех, кто пропустил Эксперименты с архивом hash_table_2.zip, который указан в 22301038 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2021, 22:47 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU Но NativeUInt(P) and ACapacityMask работает в полтора раза быстрее Я об этом и говорю. NativeUInt(P) - не имеет коллизий в твоём тесте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2021, 22:55 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, На 32 битах гранулярность указателей 8, на 64 - вообще 16 Это значит, что для всех указателей как минимум 3 младших бита равны нулю Это значит, что NativeUInt(P) даёт пустоты в 7 пунктов, а, следовательно, огромное число коллизий ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2021, 23:04 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, Это не коллизии хеш-функции. Это даже не коллизии входов в таблицу, это ухудшение распределения. Вот распределение на робингуде при проекции указателя на хеш (300K элементов, уникальных 100K): ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2021, 23:31 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
А вот так выглядит распределение на робингуде при проекции и сдвиге: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2021, 23:32 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU ...огромное число коллизий а после каждого слота с коллизиями - огромное количество свободных слотов, куда они прекрасно лягут ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2021, 23:32 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
Кстати, прямая проекция будет страдать от большого количества дубликатов сильнее, чем использование хеш-функции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2021, 23:36 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, Ну с таким же успехом можно просто возвращать 0 Тогда они ещё лучше лягут ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2021, 23:39 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, вот же меня опять угораздило, ушел ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2021, 23:44 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2021, 23:45 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey kealon(Ruslan), Дефолтный словарь <integer, integer>, 1M элементов вставка: 221. Таблица с робингудом повторяющая обес словаря с виртуализованными вызовами нотификаций и дефолтным компарером: 154. Если увеличить фактор заполнения таблицы до 0.97, то скорость снижается до: 207, но и расход памяти сокращается в 2 раза. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2021, 10:15 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU Kazantsev Alexey, На 32 битах гранулярность указателей 8, на 64 - вообще 16 Это значит, что для всех указателей как минимум 3 младших бита равны нулю Это значит, что NativeUInt(P) даёт пустоты в 7 пунктов, а, следовательно, огромное число коллизий SOFT FOR YOU тут вот вполне сносное объяснение твоему вопросу авторСхемы открытой адресации также предъявляют более жесткие требования к хэш-функции: помимо более равномерного распределения ключей по сегментам, функция также должна минимизировать кластеризацию последовательных хэш-значений в порядке проверки. как раз то, что я тебе писал в 22301251 ещё у майла интересная статейка была ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2021, 10:18 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan) однако он уже таблицу хэшей срезал Сраведливости ради нужно заметить, что если довести количество элементов таблицы до порога её расширения, то их скорость становится одинаковой. з.ы. Кстати, заметил, что дефолтный словарь теперь адекватно реализует установку capacity. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2021, 10:28 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), Статейки почитаю чуть попозже Спасибо Kazantsev Alexey, А есть где-то исходники твоего TPtrSet? Можно погонять ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2021, 12:31 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, Всё никак руки не доходят оформить и выложить... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2021, 16:20 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, да сам сделай, это обычная сортировка вставками только тебе придётся массив хэшей вернуть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2021, 16:25 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), А чё тебе мой вариант не нравится? Там есть и замер времени, и автотест в дебаге ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2021, 20:36 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU kealon(Ruslan), А чё тебе мой вариант не нравится? Там есть и замер времени, и автотест в дебаге да неплох твой проект в целом, то что хотелось(я так понимаю - это оптимизаия памяти) он закрывает а то что структура немного плоха при удалении - тут надо выбирать: тратить ли память на хэши используя RG, либо не тратить небольшое придирочное замечание Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. пустить цикл вниз ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2021, 09:29 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan) тратить ли память на хэши используя RG, либо не тратить Посмотри на код, что я привёл, там хеши отдельно не хранятся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2021, 11:21 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey kealon(Ruslan) тратить ли память на хэши используя RG, либо не тратить Посмотри на код, что я привёл, там хеши отдельно не хранятся. по этому куску я вообще не вижу как там что хранится ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2021, 14:13 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), И shr 32 ни о чём не говорит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2021, 14:54 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, это догадываться надо, а на шар у меня в последнее время электричества нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2021, 18:37 |
|
||
|
Linear probing хеш-таблица с дубликатами (просьба подключиться А. Шарахова)
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, Обновил текст и исходники в статье http://www.guildalfa.ru/alsha/node/32 См. TShaIntegerMultibox, класс для работы с мультимножеством целых чисел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2021, 18:02 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2037343]: |
0ms |
get settings: |
12ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
179ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
78ms |
get tp. blocked users: |
2ms |
| others: | 279ms |
| total: | 581ms |

| 0 / 0 |
