|
|
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
А на длинных строках разница может быть и вдвое ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 03:48:22 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Строки по 255 символов: 2109 vs 1282 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 03:49:05 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Случайно на x64 тестил. Release x86 (Small Strings) 1078 vs 875 Release x86 (256 Strings) 1125 vs 562 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 03:54:33 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
rgreatСлучайно на x64 тестил. Release x86 (Small Strings) 1078 vs 875 Release x86 (256 Strings) 1125 vs 562 Ну в общем получается что на типичных данных разница менее 30%. Строки в 255 редко засовывают в словарь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 04:00:56 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
asviridenkov, 15-30% - это мало? Кода меньше, и работает он лучше. А CRC32 еще и преинициализации массива требует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 04:10:50 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
rgreatasviridenkov, 15-30% - это мало? Кода меньше, и работает он лучше. А CRC32 еще и преинициализации массива требует. Это не много и не мало. Тут больше вопроса к количестве коллизий. Странно, что обычно используют CRC если есть такой простой и хороший вариант. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 04:32:12 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Ну вообще-то это довольно старый и известный алгоритм от Роберта Седжвика . http://snipplr.com/view/55639/hashing-function-for-c/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 04:43:10 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Ну и в отличие от CRC32 он заточен под WideChar. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 04:45:52 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Ребята, послушайте старого специалиста в оптимизациях Обычно люди запарены на коллизиях. Например, в теории размер хеш-массива должна быть простым числом. Чтобы минимизировать коллизии Однако на самом деле соотношение коллизий к прямому доступа - низкое. При том, что коллизия - это всего лишь несколько дополнительных сравнений. Поэтому ключевой приоритет по производительности - доступ к элементу массива. Если размер хеш-массива является простым числом - то доступ к элементу осуществляется через операцию вычисления остатка от деления. То самое деление, которое выполняет ориентировочно 30 тактов. Именно поэтому ребята-хешеры, достаточно быстро перешли от простого числа к степени двойки - чтобы заменить деление обычным and. Второй вопрос - хеш функция. В большинстве случаев подойдёт длинна и сумма байт/символов. CRC32 хорош, но он лезет в таблицу и делает много промежуточных операций. rgreat тоже классную функцию привёл, но там два умножения. В большинстве случаев хватит этого: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Лично у меня такая функция давала отличные результаты. Но для всяких классификаторов (ИНН, КПП, автомобильные номера, номера договоров, ...) коллизий было действительно много. Длинна строк одинаковая, набор символов похожий, и в сумме хеш совпадал. И не то, чтобы производительность не устраивала, стало сложно отлаживать. Ситуация спасла привязка к индексу символа. Вот такая функция будет быстра и удобна вообще для всего ) Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 11:51:47 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, коллизии сильно зависят от данных, автор же вместо того, что бы рассказать больше о задаче, выгоняет всех из топика. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 12:13:30 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
makhaon, Не сильно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 12:23:42 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
rgreatБыстрый хэшик для строки. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. отличная функция ! утащил к себе в копилку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 12:35:14 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
asviridenkovSOFT FOR YOUпропущено... А ты сравни с CachedSerializer Я же тест выложил, запусти и сравни. Вот тест: Код: 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. Вот результаты: Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 12:55:53 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUВот такая функция будет быстра и удобна вообще для всего SOFT FOR YOUНе сильно Ты хоть проверял, то о чём говоришь? Твоя функция на наборе последовательно изменяющихся ключей с общей частью просто сосёт. На наборе размером в 1млн. ключей (Index1 .. Index1000000) она даёт только 145 уникальных хешей, тогда как Седжвик даёт 999994. То есть, у твоей функции на этом наборе будет 999855 коллизий, а у Седжвика всего 6. На рандомных ключах (GUID) и с тем же размером набора в 1 млн., твоя функция даёт всего 244 уникальных хеша (999756 коллизий), Седжвик даёт 999871 (129 коллизий). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 13:53:00 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Для прикола ещё и на английском словаре проверил. Размер словаря 30322 слова. У твоей функции всего 661 уникальный хеш (29661 коллизий), у Седжвика 30322 (коллизий нет). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 14:07:52 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Код/данные в студию ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 14:20:56 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Понял Попробуй вот так :) Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 14:23:00 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUKazantsev Alexey, Понял Попробуй вот так что там с твоим титаником ? можно забить или есть шанс ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 14:25:57 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUКод/данные в студию Какие данные тебе нужны? Код: pascal 1. Миллион GUID'ов: Код: pascal 1. 2. Последовательные ключи: Код: pascal 1. 2. Хеши сам посчитай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 14:26:37 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
defecatorSOFT FOR YOUKazantsev Alexey, Понял Попробуй вот так что там с твоим титаником ? можно забить или есть шанс ? Скинь свой проект, я буду его трейсить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 14:27:37 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeySOFT FOR YOUКод/данные в студию Какие данные тебе нужны? Код: pascal 1. Миллион GUID'ов: Код: pascal 1. 2. Последовательные ключи: Код: pascal 1. 2. Хеши сам посчитай. Харе лениться. Заколебали Выложи dpr. Ещё я коллизии не считал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 14:28:45 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUdefecatorпропущено... что там с твоим титаником ? можно забить или есть шанс ? Скинь свой проект, я буду его трейсить хм....может быть, ещё и ключи от квартиры, где деньги лежат ? (с) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 14:30:53 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
defecatorSOFT FOR YOUпропущено... Скинь свой проект, я буду его трейсить хм....может быть, ещё и ключи от квартиры, где деньги лежат ? (с) Почему нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 14:31:39 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUПопробуй вот так :) Стало чуть лучше, но всё равно отстой: рандомные ключи 1млн: 7091 уникальный хеш последовательные 1млн: 348 уникальных хешей английский словарь 30322: 1580 уникальных хешей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 14:31:58 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39369126&tid=2041988]: |
0ms |
get settings: |
10ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
52ms |
get topic data: |
14ms |
get forum data: |
4ms |
get page messages: |
87ms |
get tp. blocked users: |
2ms |
| others: | 217ms |
| total: | 415ms |

| 0 / 0 |
