|
|
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Если говорить об универсальном хеше, то он должен быть байтовый, а не юникодный. Как стандартный Джеткинс Kazantsev Alexey, Твой генератор распределений где выложен? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 19:34:49 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUЕсли говорить об универсальном хеше, то он должен быть байтовый, а не юникодный. Как стандартный Джеткинс Меняем UnicodeString на RawByteString и юникодный Седжвик превращается в байтовый. Меняем RawByteString на UnicodeString и байтовый хеш Шарахова превращается в юникодный. Причём, что в одном, что в другом случае, без потери эффективности. SOFT FOR YOUТвой генератор распределений где выложен? Нигде не выложен. Чего там выкладывать-то? Банальное расставление пикселей в соответствии с признаком занятой ячейки таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 20:17:48 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeySOFT FOR YOUТак выложи нормальные тестовые данные, нормальный тестовый проект, с замером времени, генерацией распределения и прочей штукой. А потом будем думать, что с этим делать Тестовые данные , нормальный тестовый проект . Обгонишь по скорости Седжвика с Дженкинсом, будем рисовать распределение. Вот что ты за человек такой? Даже приведённый тобой вариант на x86 выдаёт такой результат: Код: plaintext 1. 2. 3. 4. Я думал, я зайду, скачаю, а там подсчёт коллизий, замер времени, разные тестовые базы, генерация GIF-а распределения Сейчас адаптирую хеш под UTF-16, выложу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 21:04:14 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUДаже приведённый тобой вариант на x86 выдаёт такой результат: Код: plaintext 1. 2. 3. 4. А какой результат он должен выдавать? SOFT FOR YOUЯ думал, я зайду, скачаю, а там подсчёт коллизий, замер времени, разные тестовые базы, генерация GIF-а распределения Ты меня с дедом морозом не путаешь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 21:16:30 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Просто я искренне не понимаю, зачем эти тонны пространных рассуждений, если можно взять конкретный пример и экспериментировать с ним. Вот по кой фиг нужны были эти изобретения хешей, если на реальном примере мой хеш уже выдаёт лучший результат? Ладно бы вы придумывали что-то что быстрее, или с одинаковой скоростью, но лучшим распределением. Тогда был бы смысл ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 21:20:13 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Последние результаты такие x86: Код: plaintext 1. 2. x64: Код: plaintext 1. 2. Проект (Рядом должен лежать "StringBase.txt") Код: 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. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 21:26:10 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, Гы: TSedgwicComparer... 1750мс TShaPerfectComparer... 1750мс TFastComparer... 1937мс Press Enter :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 21:34:52 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Да, еще надо сделать так: Код: pascal 1. TSedgwicComparer... 1312мс TShaPerfectComparer... 1328мс TFastComparer... 1422мс Press Enter ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 21:39:10 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUПросто я искренне не понимаю, зачем эти тонны пространных рассуждений, если можно взять конкретный пример и экспериментировать с ним. Вот по кой фиг нужны были эти изобретения хешей, если на реальном примере мой хеш уже выдаёт лучший результат? Точно! Давайте возьмём конкретный пример и... загрузим в него словарь Лопатина . Но тестировать будем только с одной итерацией, во избежание. Результат...Default... 32мс TSedgwicComparer... 15мс TSimpleComparer... 46203мс TShiftComparer... 42922мс TFastComparer... 1391мс Press Enter Вот этим и отличается "решение под задачу" от универсального хеша. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 21:46:11 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Шарахов использует строки, а не произвольные байты, ты вообще настаиваешь на Unicode Где тут универсальность? На лицо "решение под задачу" Собственно, словарь Лопатина - тоже весьма специфичная штука. Множество коротких похожих слов В универсале Седжвик неплох, на мой взгляд лучше Дженкинса Но для простых задач, типа сериализации или идентификации лексем, лучше конечно упрощать функции Если нет возможности кодогенерить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 22:08:44 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
немного переделал ваш тест Код: 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. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289. 290. 291. 292. 293. 294. 295. 296. 297. 298. 299. 300. 301. 302. 303. 304. 305. 306. 307. 308. 309. 310. 311. 312. 313. 314. 315. 316. 317. 318. 319. 320. 321. 322. 323. 324. 325. 326. 327. 328. 329. 330. 331. 332. 333. 334. 335. 336. 337. 338. 339. 340. 341. 342. 343. 344. [quote автор] Delphi XE2, intel i7 4710hq Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 22:19:59 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUШарахов использует строки, а не произвольные байты, ты вообще настаиваешь на Unicode Где тут универсальность? Чудак-человек... Универсальность в алгоритме, а не в принимаемом параметре. Я же тебе говорил, что замена байтовой строки на юникод строку не влияет на эффективность этих хешей. И чем байтовая строка отличается от произвольных байтов? Думаешь распределение хуже будет? Не будет. Я тут для прикола засовывал сырые гиды в 8-символьные юникодовые строки без преобразования - всё прекрасно работает. Так что тут подвоха не ищи. SOFT FOR YOUСобственно, словарь Лопатина - тоже весьма специфичная штука. Множество коротких похожих слов Ну вот, опять гранаты не той системы... А я тебе говорил, что слабо меняющиеся ключи (последовательные, как частный случай) это одна из проблем для хешей. Кстати, словарь Лопатина это ещё что, ты на словаре Российских фамилий проверь... SOFT FOR YOUВ универсале Седжвик неплох, на мой взгляд лучше Дженкинса Но для простых задач, типа сериализации или идентификации лексем, лучше конечно упрощать функции Если нет возможности кодогенерить Давно известно, что под задачу можно родить самый быстрый хеш. Поэтому таблицы и имеют возможность заменить хеш-функцию. Кстати, я проверил очередную мутацию твоего хеша . На словаре Лопатина небольшое отставание от Седжвика. На словаре Российских фамилий уже двукратное отставание. На последовательных ключах полный провал - отставание на порядок. Прикладываю распределение на фамилиях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 22:54:24 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyЯ же тебе говорил, что замена байтовой строки на юникод строку не влияет на эффективность этих хешей. Байтовая универсальная функция отличается от юникодовой тем, что выполняется в 2 раза медленнее Kazantsev AlexeyИ чем байтовая строка отличается от произвольных байтов? Думаешь распределение хуже будет? Не будет. Ты прикалываешься? В русском алфавите 33 буквы. А ходовых вообще штук 10-15 Kazantsev AlexeyКстати, я проверил очередную мутацию твоего хеша. На словаре Лопатина небольшое отставание от Седжвика. А ты на какой хеш-таблице тестировал? Собственного приготовления? Kazantsev AlexeyА я тебе говорил, что слабо меняющиеся ключи (последовательные, как частный случай) это одна из проблем для хешей. Мы же вроде уже решили, что для универсального случая Седжвик заруливает Однако универсальных случаев почти нет. И для обычных случаев, как например список HTML-тегов, имеет смысл существенно упростить функцию P.S. Судя по всему, здесь ещё сильно зависит от реализации хеш-таблицы. Дубликация хеша - это по сути 1-2 лишних сравнения, несколько тактов, которые должны быть сэкономлены на простых хеш-функциях Надо так же сказать, что в моей давнишней реализации (x86), сохранялось и предварительно сравнивалось значение функции (не обрезанное), а структуры менеджелись специальными пулами Это я к тому, что можно померяться ещё реализациями хеш-таблиц ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 23:44:34 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUТы прикалываешься? В русском алфавите 33 буквы. А ходовых вообще штук 10-15Да-да. Именно для этого случая Седжвик и тюнил свой алгоритм. Тебе же Казанцев написал, что и на сырых бинарных, даёт нормальное распределение. В этом и есть универсальность при отличном быстродействии. В отличии от твоего ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 23:57:41 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUБайтовая универсальная функция отличается от юникодовой тем, что выполняется в 2 раза медленнее Зависит от реализации. Но для сравнения скорости использовались функции с одинаковым типом параметра, или я отдельно указывал что тип ключа отличается (кроме случая с мурмур3, там на вход подавались байты юникодовой строки). Но о скорости хеша нужно беспокоиться только тогда, когда будет получено хорошее распределение, иначе весь пар уйдёт в свисток компарера. SOFT FOR YOUТы прикалываешься? В русском алфавите 33 буквы. А ходовых вообще штук 10-15 А в английском ещё меньше, и что? Функции с хорошим лавинным эффектом это не мешает. SOFT FOR YOUА ты на какой хеш-таблице тестировал? Собственного приготовления? Разумеется. Хотя, ты можешь сам проверить на своём примере с TDictionary. SOFT FOR YOUОднако универсальных случаев почти нет. И для обычных случаев, как например список HTML-тегов, имеет смысл существенно упростить функцию Ну вот Свириденков писал , что у него набор тегов может расширяться в процессе парсинга. А теги в XML, они и на русском могут быть (кстати, какая-то из наших гос.контор такие XML'ки использует), вот уже и требуется универсальное решение. SOFT FOR YOU P.S. Судя по всему, здесь ещё сильно зависит от реализации хеш-таблицы. Таблицы которые здесь сравнивали, все являются классическими таблицами с открытой адресацией и линейным пробированием. Реализации отличаются, разумеется, но генеральный алгоритм один. SOFT FOR YOUДубликация хеша - это по сути 1-2 лишних сравнения, несколько тактов, которые должны быть сэкономлены на простых хеш-функциях Нет, коллизия хеша это гарантированный поход к компареру за сравнением ключа. SOFT FOR YOUНадо так же сказать, что в моей давнишней реализации (x86), сохранялось и предварительно сравнивалось значение функции (не обрезанное), а структуры менеджелись специальными пулами Это я к тому, что можно померяться ещё реализациями хеш-таблиц ) Ну... Вэлкам! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 00:29:38 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Седжвик. Распределение на строковых GUID: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 01:46:46 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Седжвик. Распределение на "сырых" GUID: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 01:47:51 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, я не совсем понял, в TFastComparerPure.GetHashCode ошибка? или так задумано, что она берёт хеш только от половины строки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 08:23:37 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
пардон, не разобрал с наскоку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 08:31:17 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Байтовые хеши медленнне в 2 раза уникодных потому, что обрабатывают в 2 раза меньше байт за итерацию. Посмотри стандартный хеш строк. Длина умножается на 2, что вроде как естественно и лежит на поверхности ) Хватит приставать со своими коллизиями. И распределениями. Дженкинс даёт отличное распределение, но из-за сложности функции, он даёт проседание производительности Важны 4 составляющие: и реализация таблицы, и коллизии, и скорость функции, и скорость компаратора. А не только распределение Что касается меряние таблицами - жду твой код в общем примере. Ибо мне свою выдирать из библиотеки долго, а количество твоего кода в ветке удручающе маленькое. 0 если не ошибаюсь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 09:27:50 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUБайтовые хеши медленнне в 2 раза уникодных потому, что обрабатывают в 2 раза меньше байт за итерацию. Посмотри стандартный хеш строк. Длина умножается на 2, что вроде как естественно и лежит на поверхности ) Это и так ясно, только не о том ты думаешь. SOFT FOR YOUХватит приставать со своими коллизиями. И распределениями. Коллизии не мои, они у твоего хеша. А чем больше коллизий, тем медленне работает таблица. SOFT FOR YOUДженкинс даёт отличное распределение, но из-за сложности функции, он даёт проседание производительности Важны 4 составляющие: и реализация таблицы, и коллизии, и скорость функции, и скорость компаратора. А не только распределение Всё верно. Только медленный Дженкинс уделывает твой быстрый хеш. SOFT FOR YOUЧто касается меряние таблицами - жду твой код в общем примере. Ибо мне свою выдирать из библиотеки долго, а количество твоего кода в ветке удручающе маленькое. 0 если не ошибаюсь Есть встречное предложение, бери TDictionary. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 11:28:29 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Я подбираю решение под задачу. На тегах мои хеши уделывают Седжвика. А стандартный компаратор (с Дженкинсом) - уделывает в разы. Об чем спор то вообще? Что Седжвик в принципе хорош? Так с этим никто не спорит. Но как показала практика, простые хеши вполне могут давать ощутимый прирост. Особенно на длинных и/или разнородных строках. Я думал, тебя академическая сторона вопроса интересует. Итоговая производительность, приемлемое распределение. А ты споришь только ради спора. Заняться нечем что ли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 12:07:02 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUЯ подбираю решение под задачу. Это ты правильно сейчас говоришь, а раньше утверждал, что твой хеш быстр и удобен вообще для всего . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 12:22:19 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Таки может потому, что в обычной жизни людям не приходит в голову тестировать словарь Лопатина или последовательные числа? В обычной жизни люди делают сериализацию или поиск токенов. И в таких случаях как раз умельцы наворачивают что-то типа Дженкинса. Только потому, что на Лопатине он даёт меньше коллизий ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 12:45:53 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39381369&tid=2041988]: |
0ms |
get settings: |
11ms |
get forum list: |
21ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
203ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
95ms |
get tp. blocked users: |
2ms |
| others: | 237ms |
| total: | 595ms |

| 0 / 0 |
