|
|
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Миллион сортированных строк (MSSQL ORDER BY ASC): str: varchar(12), value: int Str - фиксированной длины, то есть все строки всегда одной длинны и содержат только цифры. В режиме многопоточности сканится список и иногда обновляется (путем добавления снизу). Что хотелось бы - скорости в поиске и отсутствия большого объема данных в памяти. В настоящий момент я использую TList<>.BinarySearch. Comparer конкретно в данном случае выглядит примерно так: Код: pascal 1. Но есть другие места, где в схожей задаче comparer выглядит так Код: pascal 1. 2. 3. 4. 5. Вторичный вопрос: Имеет ли особый смысл приведения строковых данных, например, к а) хешу и б) инту (интам), кодируя каждый байт строки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2016, 19:33:58 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Как вариант - разбей гигантский лист на несколько поменьше. И данные в них раздели например по MOD от хэша. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2016, 19:44:08 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
серчер, Хеш быстрее сортированного списка или тем более дерева В чём вопрос - я так и не понял ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2016, 20:37:32 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
серчер, может базе отдать базово и не заниматься творческим онанизмом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2016, 20:45:21 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU , хеш - это же строка в любом случае, нет? 12 символов против 20, а в чем тогда выгода? Это выше вопросы - раз. и два - стоит ли вместо строк хранить хеш в листе и все это делать самому, или, например, воспользвоаться TDictionary - он же сам это все (в тч бинарный поиск) делает или нет? makhaonможет базе отдать базово Ну давайте рассуждать а) много потоков б) в пике до 50 серчей в секунду. в) миллион записей (это порядок цифр, а не точное значение). Что лучше - затрахать базу по ТСР или использовать память и проц сервера? Допустим выбираем "затрахать базу по ТСР". Что сделать? Все строки привести к чему? Или построить индекс по тексту? rgreat , это уже перебор. Не понятно, что это даст. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2016, 21:12:09 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
серчер SOFT FOR YOU , хеш - это же строка в любом случае, нет? нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2016, 21:14:20 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
серчер, ой, да ладно, напугал базу миллионом записей ) >в пике до 50 серчей в секунду. гугл посмотри, и ничего - справляется. весь вопрос в базе, железе и запросах. вообще, я для себя давно вывел простое правило. базы не зря придумали. и алгоритмы для них десятилетиями пилили. и довольно мало шансов, что у себя получится сделать лучше. поэтому всем поиском должна заниматься база. только нужно её нормально настроить и запросы написать. впрочем - дело твоё, конечно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2016, 21:22:03 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
серчер rgreat , это уже перебор. Не понятно, что это даст. Если сделаешь 10 листов вместо одного то искать придется не в миллионе записей а в ста тысячах. Что явно быстрей. И это все почти бесплатно. Опять-таки добавление объекта в маленький сортированый лист будет работать на порядок быстрей чем в большой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2016, 21:25:07 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
серчер, авторЧто лучше - затрахать базу по ТСР или использовать память и проц сервера? к слову - а чё её трахать? если у тебя изменяемых записей почти нет? кидай данные на сторону базы и пусть она там в себе ковыряется сама. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2016, 21:25:15 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
defecator, приведите пример класса с хеш-переменной, какой у нее будет тип? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2016, 21:35:02 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
makhaonсерчер, ой, да ладно, напугал базу миллионом записей ) >в пике до 50 серчей в секунду. гугл посмотри, и ничего - справляется. весь вопрос в базе, железе и запросах. вообще, я для себя давно вывел простое правило. базы не зря придумали. и алгоритмы для них десятилетиями пилили. и довольно мало шансов, что у себя получится сделать лучше. поэтому всем поиском должна заниматься база. только нужно её нормально настроить и запросы написать. впрочем - дело твоё, конечно. Там были еще вопросы или мимо прошли вопросы? :) А я бы почитал ответы :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2016, 21:36:44 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
серчерdefecator, приведите пример класса с хеш-переменной, какой у нее будет тип?Тип может быть любой. От байта до строки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2016, 21:37:35 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Господа, а что вы скажете про TDictionary vs TList<> в плане использования для поиска? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2016, 21:37:55 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
rgreatсерчерdefecator, приведите пример класса с хеш-переменной, какой у нее будет тип?Тип может быть любой. От байта до строки. Разумеется. Какой в данном случае подойдет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2016, 21:39:15 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
серчер, TDictionary по любому быстрей, но могут быть рандомные просадки быстродействия во время его роста. И на TDictionary надо больше памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2016, 21:40:33 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
серчер, Вот - такие у меня для тебя ответы :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2016, 21:40:36 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
серчерГоспода, а что вы скажете про TDictionary vs TList<> в плане использования для поиска? Ищет быстро. Хэши долго делает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2016, 21:40:48 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
серчер, Обычно используют 4 байта. А что подойдет вам - это ваше решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2016, 21:41:27 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
makhaon , да я так и понял, что никаких, кроме блаблабла :) asviridenkov , спасибо rgreat , мой случай это строка из 12 символов. 12 байт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2016, 22:15:09 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
серчерГоспода, а что вы скажете про TDictionary vs TList<> в плане использования для поиска? Скажу - замути тест и сам замерь производительность ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2016, 22:18:41 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
серчерхеш - это же строка в любом случае, нет? Нет, конечно. Результат простой хеш-функции CRC32 это integer ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2016, 00:55:51 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
makhaonсерчер, Приходишь на публичный форум - будь готов к любым ответам. Всё взаимообратно. Отвечаешь что хочешь, ведешь себя непотребно или говоришь не по теме - ты никому нравиться не обязан. Квейд В рамках Дельфи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2016, 16:02:17 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
серчерВсё взаимообратно. Отвечаешь что хочешь, ведешь себя непотребно или говоришь не по теме - ты никому нравиться не обязан.Вообще-то он всё правильно говорил. Кури матчасть. Хэш может быть какой угодно, чаще всего целочисленное число ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2016, 17:23:03 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Ну че там по тестам то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2016, 12:35:15 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU Пока не делал. Лучшим решением все таки было бы хеш сделать. Только не очень понятно чем воспользоваться, чтобы к инту привести вот такие строки D6999900001 D6999900002 A6999900003 F6999900004 .... И затем сравниваемое (которое может входить или не входить в данный набор) так же приводить к уникальному инту и по нему сравнивать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2016, 17:31:21 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
причем чем-то таким, чтобы это еще в базе можно было бы выгрузить в готовом виде. А не так чтобы в коде еще шерстить. Это вариант, если не получится из базы достать готовый. Может есть какие то стандартные функции хеширования в инт для дельфи и мсскл? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2016, 17:33:22 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
CRC32 же! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2016, 17:59:31 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
В современных делфях хэшей вагон и маленькая тележка. Даже модуль специальный есть. А ТС упорно игнорирует совет почитать матчасть чтоб представлять что это и с чем его едят... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2016, 18:14:05 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Кстати, я тут небольшой тест сделал TDictionary<string, object> c Trie. Содержимое - список тегов HTML, прогоняется много раз поиск всего списка в словаре. Получается, что на поиске trie дает где-то 40% выигрыша. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2016, 23:46:03 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Частный случай всегда быстрей чем универсалка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 00:01:31 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
rgreatЧастный случай всегда быстрей чем универсалка. Ага, конечно. Сравни TStringList c TDictionary ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 00:19:49 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
asviridenkov, TStringList не оптимизирован на поиск ключей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 00:23:14 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
asviridenkovКстати, я тут небольшой тест сделал TDictionary<string, object> c Trie. Содержимое - список тегов HTML, прогоняется много раз поиск всего списка в словаре. Получается, что на поиске trie дает где-то 40% выигрыша.Пример выложить можешь? Хочу свой словарик сравнить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 00:34:28 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
asviridenkovКстати, я тут небольшой тест сделал TDictionary<string, object> c Trie. Содержимое - список тегов HTML, прогоняется много раз поиск всего списка в словаре. Получается, что на поиске trie дает где-то 40% выигрыша. Просто TDictionary невероятный тормоз. У меня хеш-таблица построенная по аналогичному алгоритму (открытая адресация с линейным пробированием) тоже уделывает TDictionary. На рандомных ключах (GUID) на 97%, на ключах с последовательно изменяющейся частью (index1 .. 1000000) на 159%, на английском словаре на 46%. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 00:41:48 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
asviridenkovАга, конечно. Сравни TStringList c TDictionary На длинных ключах стринглист надерёт словарю жопу ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 00:43:24 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
white_nigger, он совсем простой Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 00:48:34 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyasviridenkovАга, конечно. Сравни TStringList c TDictionary На длинных ключах стринглист надерёт словарю жопу ;) На малом числе строк, в принципе тоже должен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 00:50:35 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyasviridenkovКстати, я тут небольшой тест сделал TDictionary<string, object> c Trie. Содержимое - список тегов HTML, прогоняется много раз поиск всего списка в словаре. Получается, что на поиске trie дает где-то 40% выигрыша. Просто TDictionary невероятный тормоз. У меня хеш-таблица построенная по аналогичному алгоритму (открытая адресация с линейным пробированием) тоже уделывает TDictionary. На рандомных ключах (GUID) на 97%, на ключах с последовательно изменяющейся частью (index1 .. 1000000) на 159%, на английском словаре на 46%. А хэш какой - CRC32? Ты софлкомплетовскую реализацию Hashrie за основу брал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 00:52:16 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
asviridenkovА хэш какой - CRC32? Ты софлкомплетовскую реализацию Hashrie за основу брал? Хеш Седжвика. За основу брал голый алгоритм таблицы с открытой адресацией, т.к. он самый простой и удовлетворяет некоторым дополнительным условиям. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 00:55:24 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
На ноуте несколько проходов: TDictionary ~3678 TdxNamedObjectDictionary ~2266 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 01:15:19 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
А вообще для таких небольших константных словариков легко идеальный хэш подобрать и сделать специализированный словарь - ещё быстрее будет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 01:22:06 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
white_niggerНа ноуте несколько проходов: TDictionary ~3678 TdxNamedObjectDictionary ~2266 Ну вот у меня на простейшем Trie ровно такой же результат. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 01:27:19 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
asviridenkovКстати, я тут небольшой тест сделал TDictionary<string, object> c Trie. Содержимое - список тегов HTML, прогоняется много раз поиск всего списка в словаре. Получается, что на поиске trie дает где-то 40% выигрыша. А ты сравни с CachedSerializer ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 01:40:57 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
серчерпричем чем-то таким, чтобы это еще в базе можно было бы выгрузить в готовом виде. А не так чтобы в коде еще шерстить. Это вариант, если не получится из базы достать готовый. Может есть какие то стандартные функции хеширования в инт для дельфи и мсскл? Ты меня начинаешь подбешивать TDictionary, когда ключ строка - уже автоматически все делает За тебя ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 01:42:26 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUasviridenkovКстати, я тут небольшой тест сделал TDictionary<string, object> c Trie. Содержимое - список тегов HTML, прогоняется много раз поиск всего списка в словаре. Получается, что на поиске trie дает где-то 40% выигрыша. А ты сравни с CachedSerializer Я же тест выложил, запусти и сравни. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 01:44:11 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Быстрый хэшик для строки. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 03:17:39 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
rgreat, Ты всерьез думаешь что это быстрее CRC32? Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 03:24:31 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
asviridenkov, Проверил, быстрей. А еще говорят дает меньше коллизов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 03:32:13 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
rgreatasviridenkov, Проверил, быстрей. А еще говорят дает меньше коллизов. Насколько быстрее? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 03:41:57 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
asviridenkov, Код: 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. 953 vs 797 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 03:44:13 |
|
||
|
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 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUdefecatorпропущено... хм....может быть, ещё и ключи от квартиры, где деньги лежат ? (с) Почему нет? потому что - нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 14:32:47 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeySOFT FOR YOUПопробуй вот так :) Стало чуть лучше, но всё равно отстой: рандомные ключи 1млн: 7091 уникальный хеш последовательные 1млн: 348 уникальных хешей английский словарь 30322: 1580 уникальных хешей А замер скорости времени поиска? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 14:33:27 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUKazantsev Alexeyпропущено... Стало чуть лучше, но всё равно отстой: пропущено... А замер скорости времени поиска? зачем нужен замер скорости, если сам хеш - говно ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 14:34:48 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUХаре лениться. Заколебали Выложи dpr. Мне лень переводить подсчёт коллизий со своей структуры на словарь. Поэтому нет. SOFT FOR YOUЕщё я коллизии не считал Дело хозяйское. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 14:37:10 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUА замер скорости времени поиска? Какой ещё замер скорости??? У тебя там сплошные коллизии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 14:39:27 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
defecatorSOFT FOR YOUпропущено... А замер скорости времени поиска? зачем нужен замер скорости, если сам хеш - говно ? У меня в оригинале rol и bswap. Что в упрощенном паскале коллизий много - я удивлён Нужен тестовый проект со скоростью поиска и с подсчётом коллизий. Можно будет посмотреть, что не так, докрутить функцию И сравнить варианты между собой Может Алексей что-то не так написал А то без проекта можно с тем же успехом брать цифры с потолка и сюда постить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 14:39:53 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUА то без проекта можно с тем же успехом брать цифры с потолка и сюда постить тебе код привёл, вставь в пустой проект эти 8 строчек ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 14:41:39 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUМожет Алексей что-то не так написал А то без проекта можно с тем же успехом брать цифры с потолка и сюда постить Я тебе все вводные дал - проверяй. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 14:41:50 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Ладно, вот вариант с 1 умножением: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Уникальных: 999772, коллизий: 228 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 14:59:06 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Справедливости ради стоит сказать, что коллизии нужно считать не по хешу, а по младшим битам хеша в соответствии с размером таблицы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 15:06:02 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUЛадно, вот вариант с 1 умножением: ... Уникальных: 999772, коллизий: 228 Ну это на рандомных ключах, а на последовательных и на словаре всё равно дофига коллизий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 15:09:20 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUколлизии нужно считать не по хешу, а по младшим битам хеша в соответствии с размером таблицы Сам-то понял, что сказал? Если у тебя хеши одинаковые, то и вход в таблицу ты получишь один и тот же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 15:13:27 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeySOFT FOR YOUЛадно, вот вариант с 1 умножением: ... Уникальных: 999772, коллизий: 228 Ну это на рандомных ключах, а на последовательных и на словаре всё равно дофига коллизий. Так я тебе поэтому и говорю Код в студию И замер времени поиска Коллизий может быть сколько угодно, в конечном счёте важна скорость поиска ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 15:15:36 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeySOFT FOR YOUколлизии нужно считать не по хешу, а по младшим битам хеша в соответствии с размером таблицы Сам-то понял, что сказал? Если у тебя хеши одинаковые, то и вход в таблицу ты получишь один и тот же. Я к тому, что приведённый твой волшебный хеш на самом деле даёт значительно больше коллизий, чем ты думаешь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 15:16:46 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUКоллизий может быть сколько угодно, в конечном счёте важна скорость поиска SOFT FOR YOUЯ к тому, что приведённый твой волшебный хеш на самом деле даёт значительно больше коллизий, чем ты думаешь Коллизия хеша однозначно приведёт к замедлению поиска. Это аксиома. Аксиомы доказательств не требуют. И кстати, тут никто не говорил, что у хорошей хеш-функции не будет коллизий при получении входа в таблицу (по крайней мере до тех пор, пока размерность хеша не совпадёт с размерностью таблицы), но у плохой их будет ещё больше. Я сейчас попробовал заменить в своей таблице хеш Седжвика на твою функцию. До этого момента она в поиске была быстрее TDictionary на 159%, на последовательных ключах. C твоей функцией (последним её вариантом) я вообще не смог дождаться заполнения таблицы. Закономерный результат. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 15:46:56 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeySOFT FOR YOUКоллизий может быть сколько угодно, в конечном счёте важна скорость поиска SOFT FOR YOUЯ к тому, что приведённый твой волшебный хеш на самом деле даёт значительно больше коллизий, чем ты думаешь Коллизия хеша однозначно приведёт к замедлению поиска. Это аксиома. Аксиомы доказательств не требуют. И кстати, тут никто не говорил, что у хорошей хеш-функции не будет коллизий при получении входа в таблицу (по крайней мере до тех пор, пока размерность хеша не совпадёт с размерностью таблицы), но у плохой их будет ещё больше. Я сейчас попробовал заменить в своей таблице хеш Седжвика на твою функцию. До этого момента она в поиске была быстрее TDictionary на 159%, на последовательных ключах. C твоей функцией (последним её вариантом) я вообще не смог дождаться заполнения таблицы. Закономерный результат. Если на одну позицию хеш-таблицы есть 1000 элементов - тогда да А если на одну позицию ~2 элемента - тогда скорость поиска упирается в скорость функции. А для строк - это цикл по символам У тебя синдром defecator-а? Сложно выложить тестовый проект? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 16:00:11 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Вот проект по коллизиям Хеш корректируется под размер таблицы (1048576) Код: 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. Код: plaintext 1. 2. 3. Отдельно публикую быстрый StringHash Работает по 4 байтам за итерацию, одно умножение, понимает как Unicode-версию Delphi, так и Ansi Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 16:13:20 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUЕсли на одну позицию хеш-таблицы есть 1000 элементов - тогда да А если на одну позицию ~2 элемента - тогда скорость поиска упирается в скорость функции. А для строк - это цикл по символам В скорость функции всё упрётся только тогда, когда каждому выданному хешу будет соответствовать незанятая точка входа. В противном случае, чем больше коллизий даёт функция, тем медленнее работает таблица. SOFT FOR YOUСложно выложить тестовый проект? Сложно. SOFT FOR YOUВот проект по коллизиям Хеш корректируется под размер таблицы (1048576) Подгоняем условия под результат? И снова удобные рандомные ключи На последовательных сделай, и посмотри. И кстати, не у всех таблиц внутренний размер кратен степени двойки. Кстати, вот тебе для облегчения задачи готовый компарер для TDictionary: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Тестируем с последовательными ключами. С Седжвиком TDictionary ускоряется вдвое. С твоей функцией... сам проверь, если дождаться заполнения сумеешь. Моя таблица с твоим хешем медленне в 78(!) раз чем с Седжвиком. Ну и в качестве пищи для размышлений: TDictionary имеет размер внутренней таблицы кратный степени двойки, моя таблица нет. Удачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 17:41:01 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeySOFT FOR YOUЕсли на одну позицию хеш-таблицы есть 1000 элементов - тогда да А если на одну позицию ~2 элемента - тогда скорость поиска упирается в скорость функции. А для строк - это цикл по символам В скорость функции всё упрётся только тогда, когда каждому выданному хешу будет соответствовать незанятая точка входа. В противном случае, чем больше коллизий даёт функция, тем медленнее работает таблица. Чем по твоему грозит коллизия в "ячейке"? Только тем, что будет вызвано на N сравнений больше, когда будет проход по записям с одинаковым хешем Kazantsev AlexeySOFT FOR YOUСложно выложить тестовый проект? Сложно. Бред какой-то Kazantsev AlexeySOFT FOR YOUВот проект по коллизиям Хеш корректируется под размер таблицы (1048576) Подгоняем условия под результат? И снова удобные рандомные ключи На последовательных сделай, и посмотри. И кстати, не у всех таблиц внутренний размер кратен степени двойки. Причём здесь подгоняем? 1048576 - это следующее кратное 2 число после миллиона Покажи хоть один промышленный хеш-массив с размером не равным степени двойки. И давай замерим его производительность И что удобного в рандомных ключах? Там одинаковая длина и диапазон символов - 17 Где ты видел миллион строк "Index" + i ? Даже миллион гвидов - задача, притянутая за уши. Ты же предлагаешь всерьёз воспринимать то, что реалиям не имеет никакого отношения. Но я согласен, в этих случаях лучше Седжвик Kazantsev AlexeyТестируем с последовательными ключами. С Седжвиком TDictionary ускоряется вдвое. С твоей функцией... сам проверь, если дождаться заполнения сумеешь. Моя таблица с твоим хешем медленне в 78(!) раз чем с Седжвиком. Ну и в качестве пищи для размышлений: TDictionary имеет размер внутренней таблицы кратный степени двойки, моя таблица нет. Удачи. Нет проекта - нет дискуссии "Index" + i не имеют ничего общего с реальностью Имеет значение не скорость добавления, а скорость поиска ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 18:32:42 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
С Седжвиком TDictionary ускоряется вдвое. Сейчас проверил на своем примере, с при подстановке компаратора с Седжвиком, поиск стал медленнее в 1.5 раза ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 18:37:34 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
asviridenkov, А что было до Седжвика? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 18:43:20 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
rgreatasviridenkov, А что было до Седжвика? Дефолтный компарер ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 18:55:48 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
asviridenkov, А который у тебя дефорлтный? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 19:03:03 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
rgreatasviridenkov, А который у тебя дефорлтный? Почему у меня, у TDictionary. Не знаю, что именно там. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 19:07:52 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUЧем по твоему грозит коллизия в "ячейке"? Только тем, что будет вызвано на N сравнений больше, когда будет проход по записям с одинаковым хешем Ох и трудный же ты... Отсутствие коллизии хеша не гарантирует отсутствия коллизии на точке входа, зато коллизия хеша её присутствие гарантирует. SOFT FOR YOUБред какой-то Бред, это твой хеш. SOFT FOR YOUПокажи хоть один промышленный хеш-массив с размером не равным степени двойки. И давай замерим его производительность Я тебе ничего доказывать не собираюсь. У меня таблица именно такая, и насколько она опережает TDictionary я уже писал. SOFT FOR YOUИ что удобного в рандомных ключах? Там одинаковая длина и диапазон символов - 17 А подумать? Идентификаторы сессий/объектов/дачегоугодновообще на сервере. SOFT FOR YOUГде ты видел миллион строк "Index" + i ? Это лишь синтетический пример. Последовательные ключи или ключи с постоянной частью это реальная проблема для хеш-функций. Ты бы знал об этом, если бы читал что-нибудь по теме. Поэтому универсальные хеши всегда тестируют на разных наборах данных, а не только на удобных. SOFT FOR YOUНет проекта - нет дискуссии Да бога ради. Если для тебя сложно вставить свой хеш в готовый компарер и проинициализировать им словарь, тут действительно не о чем больше говорить. SOFT FOR YOUИмеет значение не скорость добавления, а скорость поиска Мы бы и померили скорость поиска, если бы смогли заполнить таблицу с твоим хешем. Проблема в том, что я так долго ждать не могу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 19:11:31 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
rgreatБыстрый хэшик для строки. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. А ведь кто-то может утащить в копилку алгоритм с ошибой ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 19:12:14 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyА подумать? Идентификаторы сессий/объектов/дачегоугодновообще на сервере. Integer? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 19:14:22 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
asviridenkovСейчас проверил на своем примере, с при подстановке компаратора с Седжвиком, поиск стал медленнее в 1.5 раза Ничего удивительного. Дефолтный Дженкинс тоже очень хороший хеш. Кстати, в твоём примере словарь слишком маленький, выгоднее было бы захардкодить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 19:14:29 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
У меня простейший словарь: таблица + цепочки. Использую простые числа для размерности таблицыю Юзается Elf. Прикол в правильном подборе размера таблицы. Рядом стоящие простые числа могут давать (на моих данных) от 0 до нескольких тысяч коллизий. Мурмуры, дженкинсы, crc, дотнетовские варианты более устойчивы к размеру таблицы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 19:21:39 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUInteger? Слишком маленький диапазон значений. Большая вероятность коллизий при генерации на разных машинах. А вообще, рандомные ключи удобны для твоего хеша - на них коллизий мало (в последнем варианте). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 19:31:14 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
white_niggerУ меня простейший словарь: таблица + цепочки. У меня первая версия тоже с цепочками была. Но тут есть одна проблема - невозможно гарантировать отсутствие реаллокаций после задания вместимости (capacity) таблицы. В таблице с прямой адресацией такая возможность есть + есть возможность делать перестроение таблицы тоже без реаллокаций. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 19:34:56 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Aleksandr SharahovА ведь кто-то может утащить в копилку алгоритм с ошибой ) Вот тут правильный Седжвик :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 19:39:29 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyasviridenkovСейчас проверил на своем примере, с при подстановке компаратора с Седжвиком, поиск стал медленнее в 1.5 раза Ничего удивительного. Дефолтный Дженкинс тоже очень хороший хеш. Кстати, в твоём примере словарь слишком маленький, выгоднее было бы захардкодить. Нельзя захардкодить, смысл в том, что он может расширяться в процессе работы. Если для html это еще экзотика (хотя кастомные теги исключать нельзя) то для XML вообще каждый раз все свое. Я уже писал, что пока остановился на trie, для подобного набора коротких ключей, мне кажется это оптимальный вариант. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 19:45:47 |
|
||
|
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. Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 20:02:26 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
x64: Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 20:09:34 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUКак-то так :) Седжвик неправильный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 20:39:05 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeySOFT FOR YOUКак-то так :) Седжвик неправильный. Чего в нем не так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 20:47:05 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Компа род рукой нет, чтобы проверить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 20:52:52 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
rgreatKazantsev Alexeyпропущено... Седжвик неправильный. Чего в нем не так? Верхний индекс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 20:54:15 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeySOFT FOR YOUКак-то так :) Седжвик неправильный. Точно. С нуля же надо начать x86: Код: plaintext 1. 2. 3. 4. x64: Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 20:57:52 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 21:22:02 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUasviridenkov, Я тут для тебе кодогенерил Мне удалось объяснить, почему кодогенерация лучше хеша? Да, спасибо. Но как я уже писал, в моих ситуациях это не подходит, т.к. нужна расширяемость словаря. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 21:38:05 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
asviridenkov, Ну у тебя константный набор тегов. В HTML вроде А для расширения - можно совмещать подходы. Вернула StrToHtmlTag значение tagUnknown - значит мутить что-то дальше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 21:41:31 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUasviridenkov, Ну у тебя константный набор тегов. В HTML вроде А для расширения - можно совмещать подходы. Вернула StrToHtmlTag значение tagUnknown - значит мутить что-то дальше Не константный, а усложнять городя иерархические конструкции - смысла нет, выигрыш на копейку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 22:33:00 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
asviridenkov, Смысла как минимум в 10 раз Но правда я не знаю, насколько это актуально у тебя Ты же сам начал говорить про скорость хеша ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 22:56:19 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Хардкодинг при всей своей производительности хорош пока не вылез за пределы своей песочницы. В компаниях/промышленности он на фиг не упирался. Там другие критерии. Главное универсальность, расширяемость и главное стоимость сопровождения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 23:44:06 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUasviridenkov, Смысла как минимум в 10 раз Но правда я не знаю, насколько это актуально у тебя Ты же сам начал говорить про скорость хеша ) Про скорость хеша это я применительно к другим вещам говорил, иногда критична скорость добавления (не здесь). А в данном случае, ускорение в 10 раз даст не более 5 процентов во времени парсинга. Которое на порядок меньше времени расчета стилей, которое в свою очередь еще в разы меньше чем расчет layout-а. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2016, 00:27:52 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
white_nigger, Главное, использовать инструменты согласно задачам Микроскоп - для одного. Молоток - для другого. Ты же рассуждаешь о молотке как о лучшем инструменте для всех задач класса сферического коня в вакууме Сериализирующая кодогенерация нужна для максимально быстрой идентификации заранее известного набора строк. И со своей задачей оно справляется на отличненько, да так, что даже самый лучший хеш нервно курит в сторонке ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2016, 00:31:13 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUы же рассуждаешь о молотке как о лучшем инструменте для всех задач класса сферического коня в вакуумеТы не понял меня. Перечитай ещё раз. А также подумай почему майкрософт, эмбаркадеро, и все столпы программирования предлагают эту парадигму, а не хардкодинг, который, повторю ещё раз, может встречаться глубоко внутри и ни разу наружу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2016, 00:44:07 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUы же рассуждаешь о молотке как о лучшем инструменте для всех задач класса сферического коня в вакуумеТы не понял меня. Перечитай ещё раз. А также подумай почему майкрософт, эмбаркадеро, и все столпы программирования предлагают эту парадигму, а не хардкодинг, который, повторю ещё раз, может встречаться глубоко внутри и ни разу наружу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2016, 00:44:08 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
интересно почему пост продублировался? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2016, 00:45:19 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
white_nigger, Я думаю, ты и сам себя не понял ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2016, 01:11:05 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
makhaon я никого не выгонял из топика. Напротив, он неплохо разросся, потому что задача и смысл задачи представляет немалый интерес. Просто ты зачем-то стал общаться фамильярно. Можно было бы эмоции и свое отношение оставить при себе, ты же не женщина, которая не умеет держать себя в руках. Ну или в одной))) Мы с ребятами на работе тоже посидели-подумали. Вариантов напридумывали. Самый интересный оказался - матрица. Если длина фиксирована и представляет собой цифры (вообще это номера телефонов), то можно создать матрицу массивов с быстрым доступом по индексу позиции искомой цифры и проверке по значению. И память минимизировать до 9 байт по сути на хранение телефона. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2016, 15:20:51 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
серчер makhaon я никого не выгонял из топика. Напротив, он неплохо разросся, потому что задача и смысл задачи представляет немалый интерес. Просто ты зачем-то стал общаться фамильярно. Можно было бы эмоции и свое отношение оставить при себе, ты же не женщина, которая не умеет держать себя в руках. Ну или в одной))) Мы с ребятами на работе тоже посидели-подумали. Вариантов напридумывали. Самый интересный оказался - матрица. Если длина фиксирована и представляет собой цифры (вообще это номера телефонов), то можно создать матрицу массивов с быстрым доступом по индексу позиции искомой цифры и проверке по значению. И память минимизировать до 9 байт по сути на хранение телефона. В таком случае можно написать аналог TDictionary, в котором номер телефона играет одновременно роль хеша, ключа и данных. И память сократить до 4 байт на номер. Даже с учетом коэффициента заполнения потребуется меньше. И быстрее будет, наверное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2016, 15:34:41 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
серчервообще это номера телефоновя делал массив на 120 МБ, в котором хранятся биты по всем сотовым номерам России + хеш-таблицу из строк для всех "несотовых" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2016, 16:02:11 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
fd00ch, MNP? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2016, 16:15:25 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
white_niggerинтересно почему пост продублировался? коллизия хэша ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2016, 16:33:42 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
asviridenkov, а при чем тут это? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2016, 16:38:06 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahovсерчер makhaon я никого не выгонял из топика. Напротив, он неплохо разросся, потому что задача и смысл задачи представляет немалый интерес. Просто ты зачем-то стал общаться фамильярно. Можно было бы эмоции и свое отношение оставить при себе, ты же не женщина, которая не умеет держать себя в руках. Ну или в одной))) Мы с ребятами на работе тоже посидели-подумали. Вариантов напридумывали. Самый интересный оказался - матрица. Если длина фиксирована и представляет собой цифры (вообще это номера телефонов), то можно создать матрицу массивов с быстрым доступом по индексу позиции искомой цифры и проверке по значению. И память минимизировать до 9 байт по сути на хранение телефона. В таком случае можно написать аналог TDictionary, в котором номер телефона играет одновременно роль хеша, ключа и данных. И память сократить до 4 байт на номер. Даже с учетом коэффициента заполнения потребуется меньше. И быстрее будет, наверное. Это как же до 4 байт? Это в смысле если убрать 79 в начале? Иначе в 4 байта не уместиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2016, 16:55:04 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
fd00chсерчервообще это номера телефоновя делал массив на 120 МБ, в котором хранятся биты по всем сотовым номерам России + хеш-таблицу из строк для всех "несотовых" "биты по всем сотовым номерам"? Я не очень понял эту фразу. Слишком захешировано.) Расхешируй ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2016, 16:57:19 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
серчер"биты по всем сотовым номерам"? Я не очень понял эту фразу. Слишком захешировано.) Расхешируйм.б. битсет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2016, 17:09:49 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
серчер, ты выше ее расхешировал))серчерЭто в смысле если убрать 79 в началеполучится диапазон в 1 млрд номеров или бит, т.е. 120 МБ памяти ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2016, 17:10:41 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
удобно с нашими короткими номерами ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2016, 17:21:43 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
fd00chasviridenkov, а при чем тут это? Один из вариантов, для чего нужна база всех сотовых РФ (а не кодов). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2016, 18:26:00 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, вот ты гад, задел меня за живое своими хеш-функциями, больше года держался, а тут на тебе: http://guildalfa.ru/alsha/node/32 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.01.2017, 21:13:10 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, Delphi 7 и RawByteString? Проверил коллизи функций: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2017, 00:30:25 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Ага, у меня объявлено RawByteString=AnsiString для совместимости с другими юнитами, которые обычно использую. Ну, по коллизиям не хуже Седжвика, по крайней мере. Но там главное не только коллизии, а как оно ляжет в таблицу (длина наибольшего кластера). От этого зависит скорость вставки-удаления. Скорость поиска и так всегда была отличная. На самом деле у меня, пока тестирую, все функции параметрические. Сейчас имеется куча найденных значений параметров с примерно одинаковыми характеристиками на словаре Лопатина. Так что если есть готовые словари в текстовом виде (в строке одно слово и ничего больше), то можно из этой кучи выбрать то, что работает хорошо на всем множестве словарей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2017, 08:00:19 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, Хорошая статейка Только нужен тестовый проект с исходными данными И не понятно, почему нет функции, где обрабатывается 4 байта за итерацию ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2017, 11:11:56 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Aleksandr SharahovНу, по коллизиям не хуже Седжвика, по крайней мере. Хорошая, судя по всему, функция. Посмотрел распределение - тоже лучше Седжвика. Aleksandr SharahovНо там главное не только коллизии, а как оно ляжет в таблицу (длина наибольшего кластера). Разумеется, но каждая коллизия увеличивает размер/способствует образованию кластера, плюс добавляет проверку ключа. Aleksandr SharahovТак что если есть готовые словари в текстовом виде (в строке одно слово и ничего больше), то можно из этой кучи выбрать то, что работает хорошо на всем множестве словарей. А можно этот словарь выложить? Я бы тоже свою таблицу погонял. Я словари брал тут (обратный словарь) и тут (фамилии). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2017, 11:59:49 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Сделал ещё карты распределений: RSHash(UTF16) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2017, 12:18:13 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SHAPFCT(1251): ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2017, 12:19:02 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
TFastComparer.GetHashCode отсюда : ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2017, 12:20:18 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2017, 12:20:58 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Распределение на обратном словаре. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2017, 12:21:47 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Дефолтный дельфийский Дженкинс: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2017, 12:30:50 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, Когда ты напишешь функцию с обработкой 4 байта за итерацию, не порождающую больших кластеров в хеш-таблице, ты увидишь, что она не быстрее Седжвика. Kazantsev Alexey, По второй твоей ссылке есть словарь Лопатина http://www.speakrus.ru/dict/lop2v2.zip Но из него надо выбросить повторы и пояснения к словам. Из других словарей, по видимому стоит натаскивать функцию только на фамилии. Вряд ли кому требуются обратные слова и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2017, 12:37:53 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Aleksandr SharahovВряд ли кому требуются обратные слова и т.п. Там нормальные слова, просто отсортированы с учётом обратного чтения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2017, 12:48:54 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyAleksandr SharahovВряд ли кому требуются обратные слова и т.п. Там нормальные слова, просто отсортированы с учётом обратного чтения. Понятно, сначала подумал, что инвертированы) Ну тогда Лопатина достаточно, наверно. Он больше других (Зализняка, например) и не содержит старых неинтересных слов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2017, 12:55:36 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Aleksandr SharahovSOFT FOR YOU, Когда ты напишешь функцию с обработкой 4 байта за итерацию, не порождающую больших кластеров в хеш-таблице, ты увидишь, что она не быстрее Седжвика. Ничего не знаю На реальном примере TFastComparer.GetHashCode всех порвал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2017, 13:36:51 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUНичего не знаю На реальном примере TFastComparer.GetHashCode всех порвал Это решение под задачу. Теперь порви на словаре ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2017, 13:43:54 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Так тестовые проекты нужны На чем экспериментировать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2017, 13:45:34 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUAleksandr SharahovSOFT FOR YOU, Когда ты напишешь функцию с обработкой 4 байта за итерацию, не порождающую больших кластеров в хеш-таблице, ты увидишь, что она не быстрее Седжвика. Ничего не знаю На реальном примере TFastComparer.GetHashCode всех порвал Новый Дженкинс, он тоже по 4 байта работает, а все равно медленно. Не знаешь, почему? ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2017, 13:47:37 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUТак тестовые проекты нужны На чем экспериментировать Ссылки на словари даны, компареры у тебя написаны... Грузи слова в TDictionary, меряй скорость добавления и поиска. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2017, 13:47:54 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeySOFT FOR YOUТак тестовые проекты нужны На чем экспериментировать Ссылки на словари даны, компареры у тебя написаны... Грузи слова в TDictionary, меряй скорость добавления и поиска. Мне лень каждый раз повторять то, что уже написано Если вам западло такие проектики выкладывать, мне тоже западло вносить какие-то оптимизирующие правки Погоня за минимумом коллизий - это хорошо. Но забывать о производительности хеш-функции слишком глупо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2017, 13:58:52 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUМне лень каждый раз повторять то, что уже написано Ты хочешь, чтобы я за тебя написал LoadFromFile и загрузку строк в словарь? SOFT FOR YOUЕсли вам западло такие проектики выкладывать, мне тоже западло вносить какие-то оптимизирующие правки У тебя уже есть готовый проект для TDictoonary, осталось только другие данные загрузить. У меня бенчи это часть юнит-тестов, поэтому вытягивать код оттуда просто так не получится. SOFT FOR YOUПогоня за минимумом коллизий - это хорошо. Но забывать о производительности хеш-функции слишком глупо Какой прок от скорости функции, когда коллизий куча и распределение выглядит как сосредоточение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2017, 14:18:50 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Посчитал количество кластеров на очищенном словаре Лопатина (~151 тыс. слов) : RSHash(UTF16): 28188, десять самых крупных кластеров (61, 54, 54, 49, 47, 47, 46, 46, 45, 45) SHAPFCT(1251): 28587, десять самых крупных кластеров (42, 42, 41, 41, 40, 39, 39, 37, 37, 36) Jenkins(UTF16): 28515, десять самых крупных кластеров (55, 51, 50, 50, 48, 44, 43, 41, 40, 40) FastHash(UTF16): 8266, десять самых крупных кластеров (23804, 15957, 15278, 11214, 8941, 8303, 4138, 3138, 2489, 2177) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2017, 15:47:13 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, А файлы тестовые я тебе из задницы достану? А выгрузку распределения заново писать? Нахрен нужно ) А прок по скорости я вроде уже показал цифрами ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2017, 15:51:56 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUА файлы тестовые я тебе из задницы достану? Ссылки на словари есть на последних двух страницах. Можешь взять последнюю на Лопатина, там всё готово к употреблению. SOFT FOR YOUА выгрузку распределения заново писать? Когда по скорости догонишь Седжвика, тогда я тебе распределение нарисую SOFT FOR YOUА прок по скорости я вроде уже показал цифрами Ещё раз: у тебя было решение под конкретную задачу. Сравнивать это с универсальными хешами не серьезно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2017, 16:03:28 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Под какую нахрен конкретную задачу? Есть словарь из разных слов. А твои GUID и нумераторы - это бред, ничего общего не имеющего с реальностью. Гвиды вообще бред сравнивать по строкам. Это 4 инта ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2017, 16:15:57 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUПод какую нахрен конкретную задачу? Есть словарь из разных слов. А твои GUID и нумераторы - это бред, ничего общего не имеющего с реальностью. Гвиды вообще бред сравнивать по строкам. Это 4 инта ОК, нет в твоей реальности строковых guid и слабоменяющихся ключей - дело хозяйское, кто я такой чтобы тебя переубеждать. Я тебе распределение твоего хеша не на гидах показал, а на, вполне себе, "словаре из разных слов". Если хочешь, ещё и скорость померить могу, только тебе результат не понравится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2017, 16:32:03 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Так выложи нормальные тестовые данные, нормальный тестовый проект, с замером времени, генерацией распределения и прочей штукой. А потом будем думать, что с этим делать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2017, 16:54:42 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUKazantsev Alexey, Так выложи нормальные тестовые данные, нормальный тестовый проект, с замером времени, генерацией распределения и прочей штукой. А потом будем думать, что с этим делать старая песня - "я не хочу ничего делать, но я считаю, что я прав" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2017, 16:59:34 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUТак выложи нормальные тестовые данные, нормальный тестовый проект, с замером времени, генерацией распределения и прочей штукой. А потом будем думать, что с этим делать Тестовые данные , нормальный тестовый проект . Обгонишь по скорости Седжвика с Дженкинсом, будем рисовать распределение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2017, 17:05:24 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
defecator, Я ваще-то компаратор написал и хеш, который всех уделывает ) Ты читаешь иногда или твоя миссия разжечь срач? ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2017, 18:16:07 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUdefecator, Я ваще-то компаратор написал и хеш, который всех уделывает ) Ты читаешь иногда или твоя миссия разжечь срач? ) читаю, и не только тебя. Но Казанцеву я верю гораздо больше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2017, 18:55:35 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
defecator, Вопрос веры - это не ко мне ) У меня есть область применения и цифры :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2017, 19:26:57 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, если интересно, вот еще параметры, дающие неплохие результаты у меня в тестах: хорошие параметры для ShaPerfectHash Код: 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. хорошие параметры для ShaStringDictionaryHash Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2017, 19:58:07 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, забыл добавить, что в каждой группе параметров первая тройка - без учета фамилий, а параметры, начиная с 4, подобраны с учетом фамилий ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2017, 20:04:47 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUdefecator, Вопрос веры - это не ко мне ) У меня есть область применения и цифры :) казанцев убедителен, а ты - нет. Пока что обычный словоблуд ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2017, 21:02:33 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
к статье прикрепил исходник ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2017, 23:31:21 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
исправил найденные баги и опечатки, добавил новые ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 11:42:48 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Сделал анимированные гифки показывающие в динамике распределение при заполнении хеш-таблицы с разными хеш-функциями. В качестве ключей использовались слова из орфографического словаря русского языка Лопатина (~151 тыс. слов. ссылка есть на предыдущей странице). Кадры сделаны через каждые 50 вставок в таблицу. Хотел сделать гифки с поясняющими подписями, чтобы было видно и время и коэффициент заполненности в моменты расширения таблицы, но такие гифы плохо оптимизируются и весят под 70Mb. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 14:31:17 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, С параметрами поэкспериментирую, как придумаю, как это дело автоматизировать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 14:32:54 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey Треш и угар. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 14:36:11 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyВремя заполнения 60 msec. Что так долго? ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 14:57:58 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Aleksandr SharahovЧто так долго? ) Разве долго? TDictionary - 131 msec. У меня Phenom II 3GHz + дельфя на виртуалке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 15:12:44 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyAleksandr SharahovЧто так долго? ) Разве долго? TDictionary - 131 msec. У меня Phenom II 3GHz + дельфя на виртуалке. Мою поделку попробуй ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 15:14:53 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Aleksandr SharahovМою поделку попробуй ) Напрямую не получится. У тебя ключи - байтовые строки, у меня - юникод. У тебя таблица хранит объекты, у меня собственный тип размером 16 байт. К тому же моя таблица поддерживает индексный доступ. Но я всё же померял. Ключи твоей таблице отдал в utf8, у себя изменил внутренний тип данных. В результате паритет - ~30/~37 msec. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 15:38:20 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyAleksandr SharahovМою поделку попробуй ) Напрямую не получится. У тебя ключи - байтовые строки, у меня - юникод. У тебя таблица хранит объекты, у меня собственный тип размером 16 байт. К тому же моя таблица поддерживает индексный доступ. Но я всё же померял. Ключи твоей таблице отдал в utf8, у себя изменил внутренний тип данных. В результате паритет - ~30/~37 msec. Где-то еще тормоза добавил, но скрываешь) Чисто загрузка слов, сидящих в памяти, у меня в 2 с лишним раза быстрее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 15:51:29 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Aleksandr SharahovГде-то еще тормоза добавил, но скрываешь) Наоборот, даже ключи предварительно подготавливаю, чтоб не конвертировать в момент вставки. Aleksandr SharahovЧисто загрузка слов, сидящих в памяти, у меня в 2 с лишним раза быстрее. Железо какое? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 16:05:43 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyAleksandr SharahovГде-то еще тормоза добавил, но скрываешь) Наоборот, даже ключи предварительно подготавливаю, чтоб не конвертировать в момент вставки. Aleksandr SharahovЧисто загрузка слов, сидящих в памяти, у меня в 2 с лишним раза быстрее. Железо какое? i5-3470 3.2GHz 4Gb ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 16:08:22 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahovi5-3470 3.2GHz 4Gb Чему тогда удивляться :) Где Phenom II и где i5. Дельфийский TDictonary за сколько заполняется? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 16:15:44 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Странно, неужели так длина ключа влияет? Попробуй на юникод переделать или через байт ключ обрабатывать. Интересно, на сколько ускорится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 16:17:37 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyAleksandr Sharahovi5-3470 3.2GHz 4Gb Чему тогда удивляться :) Где Phenom II и где i5. Дельфийский TDictonary за сколько заполняется? Дык все равно что-то очень уж. Я на Delphi7. TDictionary не юзаю. Свои таблицы, типа твоей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 16:19:59 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Еще как вариант: т.к. вычисляется другое значение ключа, соответственно работа с памятью в другой последовательности. Но должно же усредняться, блин. Остается проц. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 16:45:04 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, Переделал твою таблицу на юникод (RawByteString = UnicodeString ). Поменял дефолтный хеш на ShaPerfectHash (был ShaPerfectHashAsm). У своей таблицы также поменял хеш на твой и вернул свой тип данных. Перед замером установил вместимость таблиц (на первом замере не устанавливал, и это может объяснять почему моя на первом замере была чуть медленне. у меня, по дефолту, при расширении таблицы используется реаллок, а не перевыделение памяти). Твоя: вставка - 35, поиск всех ключей (1000 итераций) - 21136. Моя: вставка - 34, поиск всех ключей (1000 итераций) - 21952. Паритет ;) Хотя я удивлён, т.к. на вставке у меня 16 байт, вместо 4 у тебя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 16:46:51 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Aleksandr SharahovОстается проц. Скорее всего так и есть. Я первый вариант свой таблицы писал и отлаживал на AMD, потом проверил на древнем Pentium Mobile и за голову схватился - моя работала медленне дельфийского TDictionary (хотя на AMD была сильно быстрее). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 16:50:33 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyТвоя: вставка - 35, поиск всех ключей (1000 итераций) - 21136. Моя: вставка - 34, поиск всех ключей (1000 итераций) - 21952. Ой. Твоя - моя перепутал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 17:09:51 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyKazantsev AlexeyТвоя: вставка - 35, поиск всех ключей (1000 итераций) - 21136. Моя: вставка - 34, поиск всех ключей (1000 итераций) - 21952. Ой. Твоя - моя перепутал. Думаю, если код из FindCodeName перетащить в FindName, разницы вообще не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 17:26:58 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Сейчас ещё сделал чтобы твоя таблица хранила не объекты, а мой тип данных (16 байт). И проверил всё не на виртуальной машине. Три замера, лучшие результаты: Твоя: вставка - 33, поиск всех ключей (1000 итераций) - 21316. Моя: вставка - 33, поиск всех ключей (1000 итераций) - 18707. У меня лучший результат на поиске по причине другой организации данных в таблице (для снижения расхода памяти, из-за размера хранимых значений + индексного доступа). В общем, если привести структуру ко классической таблице, то и по поиску будет паритет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 17:37:14 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
ох ты какой интересный топик, жалко времени нет murmur3 очень интересно как пашет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 17:58:44 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)murmur3 очень интересно как пашет Вставка - 41, Поиск всех ключей (1000 итераций) - 23319 Распределение: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 18:29:15 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, а на чём тестил? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 18:51:22 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, компилятор и проц имею ввиду ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 18:51:51 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)компилятор и проц имею ввиду Delphi XE2, Phenom II X4 940 3GHz. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 18:58:27 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, неплохо, думал хуже будет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 19:20:36 |
|
||
|
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 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Ты же тоже прочитал про размер таблицы простым числом. А как предложили замерить производительность - ты сразу "не, давайте без меня" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 12:48:10 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUТаки может потому, что в обычной жизни людям не приходит в голову тестировать словарь Лопатина или последовательные числа? Хеши "подходящие вообще для всего" и тестировать нужно на всём. Сюрприз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 13:00:09 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, А где автор топика или кто угодно кроме тебя говорил о хешах, подходящих для всего? Хеши используются в особых ситуациях. И если не хочется париться над производительностью в этих ситуациях - берётся стандартные TDictionary с дефолтным хеш-компаратором ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 13:04:26 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUТы же тоже прочитал про размер таблицы простым числом. А как предложили замерить производительность - ты сразу "не, давайте без меня" Ты сейчас о чём вообще? У меня таблица имеет два режима работы: когда внутренний размер кратен степени двойки, и когда не кратен. Второй режим сделан для того, чтобы снизить расход памяти ценой некоторого снижения производительности. Обычное компромиссное решение. Раз в статье Шарахова описывалась таблица с кратным степени двойки и указанным размером, то и я свою тестировал в этих условиях. В чём проблема? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 13:08:25 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUА где автор топика или кто угодно кроме тебя говорил о хешах, подходящих для всего? Да ты же о них и говорил SOFT FOR YOUВот такая функция будет быстра и удобна вообще для всего ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 13:11:02 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, О том, что для снижения количества коллизий, размер таблицы должен быть простым числом И многие умельцы так и делают ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 13:12:42 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Там же чёрным по белому написано: "В большинстве случаев хватит этого" Про словарь Лопатина или последовательные числа - там не написано ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 13:15:33 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUKazantsev Alexey, Там же чёрным по белому написано: "В большинстве случаев хватит этого" Про словарь Лопатина или последовательные числа - там не написано словарь Лопатина вполне себе подходит под "большинство случаев" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 13:16:33 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
defecator, И часто ты видишь 150к уникальных токенов? На русском языке ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 13:24:15 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUО том, что для снижения количества коллизий, размер таблицы должен быть простым числом И многие умельцы так и делают Да фиолетово это, когда коллизии на хеше. SOFT FOR YOUТам же чёрным по белому написано: "В большинстве случаев хватит этого" Вертишься, как уж на сковороде. Про большинство случаев это у тебя для первой функции написано. А для второй написано "Вот такая функция будет быстра и удобна вообще для всего )". SOFT FOR YOUПро словарь Лопатина или последовательные числа - там не написано Под определение "вообще для всего" подходит вообще все. Офигеть, правда? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 13:25:04 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, А чего вертеться? Для тегов у меня быстрее. Для Лопатина тоже. Да, первые варианты оставляли желать лучшего. Но основная идея мессейджа была в том, чтобы обратить внимание на излишнюю зацикленность на коллизиях. Когда сложность хеша существенно превосходит затрат на обработку коллизий. Я, знаешь ли, с Лопатиными не работаю. А когда появится такая необходимость, придумаю что-то ещё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 13:33:43 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUЯ, знаешь ли, с Лопатиными не работаю. А когда появится такая необходимость, придумаю что-то ещё. да, захардкодь его ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 13:38:06 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
defecator, Думаешь, не получится? Утилита есть, исходники открыты, дерзай! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 13:43:21 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUdefecator, Думаешь, не получится? Утилита есть, исходники открыты, дерзай! мне не надо, ты грозился ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 13:49:08 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUА чего вертеться? Для тегов у меня быстрее. Для Лопатина тоже. Что, твой быстрый хеш снова мутировал? Ещё вчера на Лопатине он отставал. Теперь, как я полагаю, на очереди словарь Российских фамилий? Хотя о чём это я, кому они нафиг нужны, у людей же только токены да сериализация SOFT FOR YOUНо основная идея мессейджа была в том, чтобы обратить внимание на излишнюю зацикленность на коллизиях. Когда сложность хеша существенно превосходит затрат на обработку коллизий. Мессейдж твой о том, что под задачу можно найти самое быстрое решение (и то не факт, что именно под эту оно самое-самое. Набор тегов-то не статичен, по условию). Открыл Америку, что называется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 13:50:50 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
defecator, Заплати мне за хардкоддинг Лопатина - я сделаю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 13:53:37 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUdefecator, Заплати мне за хардкоддинг Лопатина - я сделаю ты не вертись, и на меня не переводи, твои слова были другие: SOFT FOR YOUс Лопатиными не работаю. А когда появится такая необходимость, придумаю что-то ещё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 13:54:34 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Хрена ли они отставали? Исходники выложены, замер времени произведён. Фамилии не смотрел. Да и зачем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 13:54:48 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
defecator, Необходимости нет. Там же написано про необходимость Я теле дал возможность эту необходимость сгенерить А ты как всегда сливаешься ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 13:55:59 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUdefecator, Необходимости нет. Там же написано про необходимость Я теле дал возможность эту необходимость сгенерить А ты как всегда сливаешься покажи, где я конкретно написал про то, что мне нужен этот словарь ? мне кажется, что ты закусил удила ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 13:58:10 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUХрена ли они отставали? Я у себя мерял - отставал твой хеш на Лопатине. И не только у меня . SOFT FOR YOUФамилии не смотрел. Да и зачем? Да и правильно, сложно даже представить, кому это они могут понадобиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 14:02:26 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
defecator, Какое мне дело, нужен он тебе или нет? У меня необходимости нет Я дал тебе возможность эту необходимость сгенерить Или сгенерировать код самостоятельно, открыв исходники и бинарники утилиты Мне глубоко плевать, что там тебе нужно или нет. И гадать на кофейной гуще я тоже не буду ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 14:03:00 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUdefecator, Какое мне дело, нужен он тебе или нет? У меня необходимости нет Я дал тебе возможность эту необходимость сгенерить Или сгенерировать код самостоятельно, открыв исходники и бинарники утилиты Мне глубоко плевать, что там тебе нужно или нет. И гадать на кофейной гуще я тоже не буду ) но ты же гадаешь, и остановить свою фантазию ну никак не можешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 14:04:24 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Ты на виртуалке тестировал? Может быть и теги тоже медленнее работают? По поводу фамилий. Бери реальную выборку ФИО на 2000 человек - и будем смотреть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 14:05:28 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
defecator, И в чем же это гадание выражается? Смешной ты, честное слово ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 14:06:29 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUdefecator, И в чем же это гадание выражается? на мою подколку 20088831 тебя растащило на десяток сообщений, не относящихся к делу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 14:08:23 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUТы на виртуалке тестировал? Нет. Хоть это и не имеет значения. SOFT FOR YOUМожет быть и теги тоже медленнее работают? Нет. С тегами результат воспроизводим, но цифры разумеется другие. SOFT FOR YOUПо поводу фамилий. Бери реальную выборку ФИО на 2000 человек - и будем смотреть Почему только 2 тысячи, мне 248 больше нравятся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 14:11:20 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, И да, смоделируй, пожалуйста, ситуацию, близкую к реальной, где понадобится хеш по Фамилиям? Поисковые системы типа регистратуры выдают результаты после 3 введённых букв. И хеш по фамилиям тут не катит. Разве что по первым трём буквам ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 14:12:00 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
defecator, На свою подколку, я тебе сказал, что это реально Остальное - не более чем твои влажные фантазии ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 14:13:46 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUdefecator, На свою подколку, я тебе сказал, что это реально Остальное - не более чем твои влажные фантазии ты мне начал втирать про то, чтобы я взял и сделал то, что мне не надо. так что фантазии у тебя ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 14:15:58 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
defecator, Ты начал втирать, что я грозился. Хотя было ясно, чётко, понятно, что это не так :) Причём, что забавно, это было даже в тех цитатах, которые ты приводил в качестве аргумента ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 14:17:56 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUdefecator, Ты начал втирать, что я грозился. Хотя было ясно, чётко, понятно, что это не так :) Причём, что забавно, это было даже в тех цитатах, которые ты приводил в качестве аргумента ))) о боже ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 14:18:51 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUИ да, смоделируй, пожалуйста, ситуацию, близкую к реальной, где понадобится хеш по Фамилиям? Поисковые системы типа регистратуры выдают результаты после 3 введённых букв. И хеш по фамилиям тут не катит. Разве что по первым трём буквам ) Я понять не могу, ты всё еще пытаешься написать хеш "подходящий вообще для всего", или ищешь возможность оправдаться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 14:19:02 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Для всего хорош Дженкинс. Может быть Сейджвик, его тоже надо проверять, интересно, почему его Эмба не взяла Но хеш-таблицы не используются для всего. Каждый случай уникальный ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 14:29:17 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Если ты приколебался про пост, где после "для всего" поставил смайл - так это ежу должно быть понятно, что для множества похожих слов он не годится. Тем более, я потом правил функцию. Или к чему все твои наезду? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 14:35:36 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUНо хеш-таблицы не используются для всего. Каждый случай уникальный Конечно используются. Моя таблица используется в условиях, когда я понятия не имею, что в неё будет загружено. TDictionary вообще универсал. SOFT FOR YOUЕсли ты приколебался про пост, где после "для всего" поставил смайл - так это ежу должно быть понятно, что для множества похожих слов он не годится. Ежу-то может оно и понятно, а кто по русски читает, тот понимает только то о чём прямо написано. Перестань уже изворачиваться. Облажался, так признай это. SOFT FOR YOUТем более, я потом правил функцию. Ну так я и проверял её до самой последней мутации, чуда не случилось. Ты тут вообще много чуши наговорил, и про коллизии, и про твой хеш, который подходит для всего... В следующий раз проверяй то о чём пишешь. Мне совсем не интересно с тобой препираться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 14:52:50 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Тогда может ответишь, почему Седжвик, а не Дженкинс? Почему хеш не побайтовый? Зачем, наконец, сторона степени двойки, а не простое число? Или что, коллизии уже не так важны? Определись уже, я чушь порю, или ты лажаешь с реализацией? P.S. нахрена опять ты говоришь про свою таблицу или про дженерик? Почему просто нельзя согласиться с тем, что юзание хеш-таблиц узко специализировано и уникально? Нафига эти детские перипетии? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 15:08:44 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUТогда может ответишь, почему Седжвик, а не Дженкинс? Почему хеш не побайтовый? Зачем, наконец, сторона степени двойки, а не простое число? Седжвик, потому что он лучше подходит для моих условий - каких угдно строковых ключей в UTF-16. По той же причине он символьный, а не байтовый. Ну а к размеру вообще привязки нет, поддерживаются оба варианта. SOFT FOR YOUИли что, коллизии уже не так важны? Коллизии хеша это однозначный удар по производительности, как бы ни была реализована таблица, пойми это наконец. SOFT FOR YOUОпределись уже, я чушь порю, или ты лажаешь с реализацией? Ты порешь чушь. Если ты внимательно читал, то должен был видеть, что я приводил замеры производительности и своей таблицы, и TDictionary, и таблицы Шарахова. SOFT FOR YOUПочему просто нельзя согласиться с тем, что юзание хеш-таблиц узко специализировано и уникально? Потому что это не так. Потому что использование универсальной таблицы является более частым вариантом, чем использование узкоспециализированной. Это должно быть понятно тем, кто знаком с понятием достаточной производительности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 15:30:13 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Ты уникальный человек В одном и том же сообщении умудряешься говорить об универсальности, хвастаешься подобранным хешем под частный случай, подчеркиваешь особую важность коллизий для производительности, и берёшь не самую распределяющую функцию. Ах да, ещё и размер таблицы делаешь не по канонам. Это пять! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 15:42:17 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, Используемый мною символный Седжвик, на строковых ключах в UTF-16, даёт хорошее распределение даже будучи адаптированым под байтовые строки, или просто байтовые последовательности. Изменения алгоритма не требуется. Это универсальный хеш. Используется потому, что работает быстрее Дженкинса. Теперь о моей таблице. Моя таблица использует только строковые ключи в UTF-16, и поэтому, по дефолту, использует символьный хеш Седжвика. Алгоритм работы таблицы не завязан именно на строковые ключи в UTF-16. Адаптировать таблицу можно на любые типы ключей, алгоритм работы от этого не изменится. Это универсальная таблица. Собственно говоря, любая таблица реализующая классический алгоритм ни коим образом не зависит от используемых ключей, только от используемого хеша. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 16:12:02 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Это что же получается... Не я ерунду говорю, указывая на быстрый хеш ценой дополнительных коллизий, а ты устраиваешь шоу, руководствуясь озвученными мной принципами? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 16:24:05 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUЭто что же получается... Не я ерунду говорю, указывая на быстрый хеш ценой дополнительных коллизий, а ты устраиваешь шоу, руководствуясь озвученными мной принципами? Ну что за бред опять? Твой, "супер быстрый, подходящий для всего вообще", хеш претерпел уже столько алгоритмических мутаций, что я со счёта сбился, а хорошего распределения так и не даёт. Седжвик с Дженкинсом дают сравнимое распределение, но при этом Седжвик быстрее. Сравнил, тоже мне. Я тебе повторяю уже в который раз - скорость хеша важна, но только после того, как он перестанет генерировать коллизии пачками. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 16:36:08 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Опять не можешь признать собственный косяк? Ты используешь модификацию Седжвика, а не универсальный байтовых оригинал. Потому, что он в 2 раза быстрее. Ты используешь не Дженкинса потому, что Дженкинс медленнее. Хоть и меньше коллизий даёт. И размер таблицы не простое число только потому, что mod во много раз медленнее and Кстати ты ни разу не говорил про "коллизии пачками". Ты говорил о коллизиях и только о них. Теперь по поводу функции. Я говорил о реальных ситуациях. Сериализация, поиск токенов. Других реальных задач я не знаю. Ну может быть поиск имён файлов. Ты же говоришь о синтетических ситуациях. Множество коротких похожих слов. Ну и какие ко мне претензии? Что он ищет Лопатина медленнее? Да кому к черту сдался этот Лопатин в реалиях? Только тебе. А теги ищет каждый автор парсера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 16:51:57 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUОпять не можешь признать собственный косяк? Не вали-ка ты с больной головы на здоровую. SOFT FOR YOUТы используешь модификацию Седжвика, а не универсальный байтовых оригинал. Потому, что он в 2 раза быстрее. Что логично. Только не модификацию, а адаптацию. Там алгоритм не тронут вообще. SOFT FOR YOUТы используешь не Дженкинса потому, что Дженкинс медленнее. Хоть и меньше коллизий даёт. Снова ты несёшь чушь. На русских словарях Дженкинс хуже Седжвика, хоть и совсем незначительно, но при этом медленне. SOFT FOR YOUИ размер таблицы не простое число только потому, что mod во много раз медленнее and Нет, просто у Шарахова была такая таблица, поэтому и замеры сделаны на идентичном варианте. Но вот прямо сейчас заменил And на Mod - разница на наборе в 1млн. ключей всего несколько миллисекунд, в конечном итоге. А если не просто поменять And на Mod, а изменить режим работы таблицы, чтобы её внутренний размер перестал быть кратен степени двойки, то разница на наборе в 1млн. составила всего 26 msec. (7%) на вставке, и 14 msec. (6%) на поиске. Зато потребление памяти снизилось на 4.5Mb (15%). SOFT FOR YOUКстати ты ни разу не говорил про "коллизии пачками". Ты говорил о коллизиях и только о них. Пачками - фигуральное выражение. Ну, если на наборе 248 тыс. фамилий хеш даёт 52 тыс. коллизий, как это ещё назвать? А когда на наборе в 1млн. никому не нужных ключей хеш чуть не весь миллион, а конкретно 900 тыс., обращает в коллизии, то что это? Но, это никому не нужные ключи виноваты, я в курсе. SOFT FOR YOUЯ говорил о реальных ситуациях. Сериализация, поиск токенов. Да ты говорил о столь же синтетической задаче, сколь и никому не нужные, по твоему, мнению ключи. В задаче Свириденкова набор был динамическим, с неизвестным содержим, а у тебя четыре десятка статических тегов. SOFT FOR YOUДругих реальных задач я не знаю. Отлично. Давай на этом и закончим. SOFT FOR YOUТы же говоришь о синтетических ситуациях. Множество коротких похожих слов. Да у тебя всё что тебе не нравится, всё сиснтетическая ситуация. Ну извините, других русских фамилий у меня для вас нет. SOFT FOR YOUНу и какие ко мне претензии? Что он ищет Лопатина медленнее? Да кому к черту сдался этот Лопатин в реалиях? Только тебе. К тебе нет никаких претензий. Но вот твой хеш, который "быстр и удобен вообще для всего )" - полный шлак. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 17:52:50 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Этот шлак обогнал твои хеши на реальной задаче. Получается, не такой уж и шлак? Ты почему-то думаешь, что при увеличении количества тегов, ситуация изменится кардинально Ты запарен на теории, коллизиях и всё такое. Я об этом и писал, что есть 4 параметра, которые нужно учитывать в сумме. А не 1 как у тебя Для Лопатина имеет смысл написать другой хеш Или вообще для строк - более быстрый хеш Но ты ведь дальше Byte-->Word не продвинулся, правда? ) И как свою таблицу сделать быстрее - ты видимо тоже не сильно думаешь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 18:02:49 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, Ты мне надоел, совершенно не хочешь понимать о чём тебе пишут. Я больше не стану тратить на тебя своё время. Удачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 18:14:06 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Наконец-то А то я думал и дальше будешь морочить мне голову своими частными, но универсальными хешами ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 18:22:05 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
кое как дочитал не спорьте, есть задачи где хеш-таблицами категорически нельзя пользоваться по требованиям безопасности ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 18:43:11 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, а ты индексный доступ специально делал? Просто для перебора ключей? Просто думаю насколько велика вероятность, что появится нужда в этом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 22:37:50 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, А на такой функции графическое распределение можете показать: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 23:08:22 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
white_nigger, Я заметил что отлаживаться при работе через индекс гораздо удобней, чем при работе по энумератору. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 23:08:22 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyУ меня лучший результат на поиске по причине другой организации данных в таблице (для снижения расхода памяти, из-за размера хранимых значений + индексного доступа). В общем, если привести структуру ко классической таблице, то и по поиску будет паритет. Насчет снижения расхода памяти не понял. Нам пофиг где там данные, в таблице или снаружи. Мы тестируем только таблицу, к данным не обращаемся, потому как это все всегда можно сделать как угодно. И еще, ты заметил, что у меня кроме function FindName(const Name: RawByteString): integer; есть function GetItemByName(const Name: RawByteString): PShaStringDictionaryItem; ? Это аналог "найти+доступ по индексу", а после этого можно править на месте и все такое. Хотя я не понимаю причем тут вообще это, если тестируем голую таблицу? Может перетестить надо? ) До кучи там еще есть энумератор для прохода по непустым. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 23:33:24 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
white_niggerа ты индексный доступ специально делал? Просто для перебора ключей? Специально. Вообще, главной задачей было сохранить порядок ключей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 23:39:10 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Распределение для ELFHash. Словарь Лопатина: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 23:40:22 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Распределение для ELFHash. Словарь Российских фамилий: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 23:41:17 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Распределение для ELFHash. Строковые GUIDS: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 23:41:57 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Спасибо. И как Вам распределение данной функции? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 23:48:29 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Aleksandr SharahovНасчет снижения расхода памяти не понял. Нам пофиг где там данные, в таблице или снаружи. Мы тестируем только таблицу, к данным не обращаемся, потому как это все всегда можно сделать как угодно. Ну вот у тебя элемент таблицы состоит из Hash, Key, Value. Value у тебя объект, 4 байта, у меня Value 16 байт. У таблицы нехилая избыточность, соответственно за счёт неиспользуемых Value набегает хороший оверхед по памяти. Поэтому у меня Value отделены от самой таблицы, за счёт этого экономится память. Что я сделал с твоей таблицей. Поменял твой 4-байтный Value, на свой 16-байтный Value, дабы корректно оценить скорость вставки. Но из-за этого при поиске твоя таблица стала менее cache friendly, отсюда и отставание. Поэтому я и сказал, что если мне свою таблицу привести ко классической структуре, то она не будет показывать лучший результат на поиске. Aleksandr SharahovЭто аналог "найти+доступ по индексу", а после этого можно править на месте и все такое. Хотя я не понимаю причем тут вообще это, если тестируем голую таблицу? Может перетестить надо? ) Не надо. Там всё честно протестировано (на поиске тестировался только поиск, данные по ключам не вычитывались). Я индексный доступ упомянул, просто для того чтобы стало понятнее о другой внутренней структуре моей таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 23:58:56 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyЧто я сделал с твоей таблицей. Поменял твой 4-байтный Value, на свой 16-байтный Value. Не понял. Зачем? Правильнее было наоборот сделать. Поменять твой 16 на 4. Данные на вставляем же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 00:06:28 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
__Avenger__Спасибо. И как Вам распределение данной функции? Чем более схожи ключи, тем хуже распределение. Вот распределение ELFHash для последовательных ключей index1 .. index262144: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 00:13:01 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Aleksandr SharahovНе понял. Зачем? Правильнее было наоборот сделать. Поменять твой 16 на 4. Данные на вставляем же. Мне бы пришлось полностью изменять структуру своей таблицы, просто по времени было бы более затратно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 00:19:24 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyAleksandr SharahovНе понял. Зачем? Правильнее было наоборот сделать. Поменять твой 16 на 4. Данные на вставляем же. Мне бы пришлось полностью изменять структуру своей таблицы, просто по времени было бы более затратно. Ну тогда вообще ничего не менять. Главное, чтобы при тестировании размер элемента в обеих таблицах точно совпадал. Иначе всегда проиграет тот, у кого в таблице размер элемента больше, т.к. там и вставка и поиск обращаются практически по случайным адресам в пределах таблицы. Получается тестируем кеш. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 00:27:29 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Aleksandr SharahovГлавное, чтобы при тестировании размер элемента в обеих таблицах точно совпадал. С этим-то как раз и проблема. Без переделки структуры моей таблицы этого не сделать. Aleksandr SharahovИначе всегда проиграет тот, у кого в таблице размер элемента больше, т.к. там и вставка и поиск обращаются практически по случайным адресам в пределах таблицы. Получается тестируем кеш. Я же говорил, что напрямую сравнить не получится. Вот сейчас без переделки структуры "просто" заменил свой value на объект, в твоей тоже вернул объект и проверил на реальном железе: по вставке паритет 26/29, на поиске (1 тыс. итераций) 17700/19193. Теперь твоя таблица оказалась в более выгодном положении и на поиске появилось опережение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 00:59:35 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Вот это как раз и интересно. Для корректного сравнения твой элемент таблицы должен полностью совпадать с моим (добавь TObject). Работу со своим Value на время закомментируй, а добавленному полю присваивай адрес передаваемых данных. Разница в скорости как раз и покажет разницу в алгоритмах вставки и поиска. По идее, если ты упорядочиваешь данные при вставке, все должно совпасть, если нет, то на вставке ты должен выиграть, на поиске проиграть. Очень интересно на сколько. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 07:56:00 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Или еще вариант. Для закомментировать TObject в моей структуре (и всю работу с ним). И убрать работу с Value у тебя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 09:12:40 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, Сделал одинаковым размер элементов таблиц. Пришлось изменить структуру у своей таблицы. В результате вставка/поиск: моя - 25/16761, твоя - 26/16237. У меня переупорядочивание не выполняется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 11:09:27 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, совсем почти вровень, посмотрю еще, может получится побыстрее вставку сделать. Не помню, результаты поиска в TDictionary ты приводил? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 11:57:36 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahovсовсем почти вровень, посмотрю еще, может получится побыстрее вставку сделать. Я ещё не убрал дополнительный вызов на вычислении хеша, не стал совсем-то уж маньячить :) Aleksandr SharahovНе помню, результаты поиска в TDictionary ты приводил? Приводил, но там было с моим Value. Вот TDictionary<UnicodeString, TObject>: 81/32369 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 12:12:32 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Давайте таблицами мериться Выложите 1 проект с 2 вариантами таблиц и возможностью добавить третью ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 14:13:37 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Можно даже дженерик заколбасить Когда Key string, а Value - произвольный тип ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 14:19:08 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
И пусть этот Value будет размером, например, 23 байта, и содержать будет хотя бы один из сложных типов: string/interface/дин.массив ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 14:22:56 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Да вы маньячки, товарищи! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 17:35:11 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Barmaley57, Маньяк здесь только один человек - я ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 17:42:58 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUДавайте таблицами мериться Выложите 1 проект с 2 вариантами таблиц и возможностью добавить третью ну да, очень увлекательное занятие мерил как-то свои поделки мапы и сеты ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 18:28:58 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), Так то деревья А это хеши ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 18:41:23 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, там всё вместе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 19:07:42 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), Ну значит 4 таблицы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 19:09:26 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
За пол дня почему-то так ни у кого и не хватило смелости сравнить таблицы Совпадение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 21:31:54 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUЗа пол дня почему-то так ни у кого и не хватило смелости сравнить таблицы Совпадение? просто всем пофигу на твои потуги. Иди допиливай супербыстрый менеджер памяти, там у тебя протухло ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 21:32:53 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 21:33:06 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
defecator, Дружище, если бы было всем пофиг, люди бы не обоссывались за свои суперхеши на 10 страниц, не писали статьи и не генерировали гифки. Это к сожалению далеко не первый раз, когда на предложение посоревноваться на чем то реальном - языки засовывают сам знаешь куда ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 21:43:06 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUdefecator, Дружище, если бы было всем пофиг, люди бы не обоссывались за свои суперхеши на 10 страниц, не писали статьи и не генерировали гифки. Это к сожалению далеко не первый раз, когда на предложение посоревноваться на чем то реальном - языки засовывают сам знаешь куда знаешь, дружище, от тебя очень много понтов, но пока всё ещё нуль в результате. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 21:45:45 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
defecator, Я предприниматель в двух странах и живу за границей Для начала ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 21:48:10 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUdefecator, Я предприниматель в двух странах и живу за границей Для начала ) ну и что ? ты ТУТ очень много кидал понтов, результат где ? Тот, который самый быстрый в мире, покроет всех кобылиц и так далее ? ГДЕ РЕЗУЛЬТАТ ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 21:50:47 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
defecator, Ты слепой? У меня есть страница на гитхабе https://github.com/d-mozulyov Каждая библиотека показала себя на тестах, бенчмарки есть. Есть баги и роудмапы. Как и в любом другом продукте. И да, понты - у тебя в голове. Нормальным мужикам интересно соревноваться, общаться и развиваться в своей области ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 21:55:58 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUЗа пол дня почему-то так ни у кого и не хватило смелости сравнить таблицы Совпадение?Серьезные люди обсудили интересные аспекты, постарались не смеяться над твоим хэшем и разошлись. Чего ещё надо? (риторически) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 21:56:33 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUdefecator, Ты слепой? У меня есть страница на гитхабе https://github.com/d-mozulyov Каждая библиотека показала себя на тестах, бенчмарки есть. Есть баги и роудмапы. Как и в любом другом продукте. И да, понты - у тебя в голове. Нормальным мужикам интересно соревноваться, общаться и развиваться в своей области какие соревнования, если ты вопишь, что готов уделать всех, а на деле сливаешься ? Даже не будем ходить далеко. Где самый быстрый в мире менеджер памяти ? ГДЕ ? Обосрался - обтекай ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 21:58:16 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
white_nigger, На тегах (да и на словаре) мой хеш обогнал. Если предел возможностей таких людей - на 10 страниц обсуждать один единственный алгоритм - мне искренне жаль таких людей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 22:01:50 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 22:04:41 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUdefecator, мне на твои таблицы глубочайше насрать, потому что твой менеджер памяти сливается на реальном приложении 24x7 в Out of memory Мне этого достаточно, чтобы говорить, что ты слился. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 22:07:21 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
defecator, Винда тоже иногда глючит. И что, ты скажешь Бил слился? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 22:09:27 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUdefecator, Не настораживает тот факт, что несмотря на красивую таблицу, люди активно желают не пользоваться твоими продуктами? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 22:22:25 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Товарищ старший сержант, Я постоянно получаю сообщения в скайп на тему как лучше пользоваться той или иной фичей. Когда следующее обновление и что войдёт. В том числе и из-за границы. В том числе и по BrainMM. Более того, это наиболее интересный людям продукт. Видимо всё-таки используют. Я задам встречный вопрос. Тебя не смущает, что вместо написания хорошей хеш-таблицы, или как минимум интереса к оной, ты предпочитаешь обсуждать мою личность ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 22:41:15 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, Ну так и общался бы в скайпе. А для публикации кода бложик заведи. А то заваливаешь форумы своими странными, совершенно не нужными проектами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 22:52:44 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Товарищ старший сержант, Странный ты товарищ. Есть проект на гитхабе. Ему соответствует ветка на форуме. А если ты не в состоянии применить ту или иную библиотеку - это уже не ко мне вопрос. И ты, мне кажется, много на себя берёшь, рассуждая, нужны они кому-то или нет ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 23:20:20 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, а почему ты считаешь, что я много на себя беру? Совершенно очевидно, что ты пустозвон. Сколько пафоса было с "Lua for Delphi" (например). И чем дело закончилось? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 23:34:56 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Товарищ старший сержант, Кончилось тем, что люди как юзали Lua на старых Delphi, так и юзают А на новых - сильно расстраиваются, что нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 23:45:25 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Привет. Диспут интересный. Я, конечно, не спец в хешах, но как-то кажется мне, что уж очень "синтетические" исходные данные. Неудачно выбраны imho. Ну в самом деле! Словарь РЯ! Тут ведь корни! Соответсвенно, множество однокоренных слов. (кстати, на гифках была видна какая-то закономерность-"повторяемость") Словарь Русских личных имён собственных - вообще не в тему (Иванов, Иванков, Иванович, Иванкович, Иванушкин...) А вот... Чтобы вам не выбрать какой-нибудь русский технический словарь терминов? Только не химический - там всё тетра, да окси с нитро. Например надыбать Торговые Названия лек.средств. Или Словарь морских терминов, Авиационный, моторостроительный и т.п. ______________ Я не претендую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2017, 00:40:51 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Gator, Словарь задача не такая уж искусственная. У меня как раз сейчас возможен вариант по построению ассоциативного массива по всем словам текста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2017, 01:01:14 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Gator, Полностью согласен с тобой ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2017, 01:07:50 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
asviridenkovGator, Словарь задача не такая уж искусственная. У меня как раз сейчас возможен вариант по построению ассоциативного массива по всем словам текста.Ну нет. Всё же Текст это не Словарь (не упорядочен и очепятки к тому же) И если не "гальюны на галсах с кнехтами" пусть уж "Война и Мир", например. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2017, 01:22:05 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Саша, пройдись по коду, везде ли я поставил инициализацию/финализацию? По идее нужны нотификаторы как в стандартном TDictionary. Хотя бы на удаление и замену (в оригинале удаление+добавление) Модератор: Вложение удалено. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2017, 02:26:30 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUТоварищ старший сержант, Кончилось тем, что люди как юзали Lua на старых Delphi, так и юзают А на новых - сильно расстраиваются, что нет https://github.com/felipedaragon/pLua-XE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2017, 03:14:01 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUСаша, пройдись по коду, везде ли я поставил инициализацию/финализацию? По идее нужны нотификаторы как в стандартном TDictionary. Хотя бы на удаление и замену (в оригинале удаление+добавление) Похоже надо кое-что прояснить. Идея описать другие хеш-функции сообществу родилась по трем причинам: 1. Мне показалось, что в ходе обсуждения начала формироваться мысль, что каноническая реализация Седжвика - наше все. На самом деле Седжвик - это целое семейство функций, которое можно подстроить под язык и множество слов. Я порулил только одним параметром, но идея должна быть понятна. 2. Мне показалось, что идея простоты хеш-функции некоторыми участниками дискуссии возводится в абсолют и они несколько хаотично ей следуют. Хотя в целом верно, но давайте использовать хотя бы школьные знания, если не хотим читать теорию. Отсюда берется вторая хеш-функция. 3. Хеш-функции имеют 2 главных применения - сравнение данных и поиск данных. Наиболее просто продемонстрировать достоинства и недостатки хеш-функций можно на хеш-таблицах. Отсюда вытекает вторая часть статьи. На самом деле в своей работе я никогда не использовал хеш-таблиц в том виде, как там описано. Иногда надо было надо хранить только строки или только числа (без объектов). Иногда именованные объекты (имя не снаружи а внутри объекта) иногда объекты с идентификаторами. Так что класс TShaStringDictionary реализован только для демонстрации идеи, и я серьезно подумываю, чтобы его заменить, скажем, классом TShaNamedObjectDictionary. Так что все мои применения самописных подобий словарей чаще всего сводились к следующему 1. Создать контейнер заданной емкости. 2. Наполнить (возможно с переаллокациями). 3. Что-то много искать. 4. Очистить (обычно с сохранением размера). 5. Если надо, повторить с п.2 6. Пробежаться и собрать статистику. Никакие удаления и нотификации мне ни разу не требовались. Свойство Owned - да, часто может упростить код. Но нотификации, на мой взгляд, все равно проще самому ручками. Теперь относительно кода. Там же написано "берите, кто хотите, и делайте, что хотите". Можете даже сослаться на оригинальный код автора, если хотите. Но только большая просьба: НЕ ПИШИТЕ НА СВОЕМ КОДЕ, ЧТО ЭТО МОЙ КОД. P.S. У меня в Delphi7 твой даже не компилируется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2017, 11:10:30 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, Ну с дженериками то ты знаком? Меня удивляет распространённая тут позиция "функция наше всё", ровно как тебя удивила аналогичная фраза с Седжвиком. Очевидно, кроме функции, есть существенный ряд других особенностей, внутри таблицы. На мой взгляд твоя реализация достаточно слаба. Я поправил твой класс на дженерик, где в качестве Value может быть произвольный тип. И попросил тебя проверить. Надеюсь, господин Казанцев тоже выложит свою реализацию. Насколько я помню, его реализация подразумевала произвольный тип в качестве Value А по поводу нотификаторов - всё просто. У тебя есть возможность высвобождать экземпляры класса, то же самое делается в дженериках по нотификатору ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2017, 11:49:20 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, А ты видел структуру его таблицы? Я что-то пропустил ) Эмбы очень обидятся, узнав, что их ты тоже считаешь идиотами Главное, чтобы об этом не узнали Майкрософт, Oracle и другие разного калибра IT-компании, использующие контейнеры на основе хеша ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2017, 14:25:09 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Выше писал уже: элемент правильной хеш-таблицы состоит ровно из двух полей хеш-код и объект (или индекс объекта в другом хранилище). Если другого хранилища нет, то возможны различные варианты эмуляции правильной таблицы в зависимости от размера значения: короткое - вместо объекта, среднее и длинное - в доп. массиве. При этом для средних и длинных возможны свои варианты организации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2017, 15:19:29 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, Ну и в чем тогда проблема, что я Obj заменил на Value? Я у тебя спросил, правильно ли расставлены инициализаторы/финализаторы. Чтобы потом замерить производительность твоего решения И ещё. Не хочешь видеть чужой код - пиши свой. Не хочешь свой - не кричи тогда по поводу копирайтов. Чья ещё эта таблица если не твоя? Устроил тут ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2017, 15:28:49 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUНу и в чем тогда проблема, что я Obj заменил на Value? Проблема в том, что SizeOf(Value)<>4 SOFT FOR YOUНе хочешь видеть чужой код - пиши свой. Не хочешь свой - не кричи тогда по поводу копирайтов. Чья ещё эта таблица если не твоя? Устроил тут ) Ты правда идиот? Напиши, что это твой код. Если хочешь, напиши что взял за образец код с моего сайта. И нет проблем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2017, 15:46:37 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, Для твоего алгоритма нет разница, равен размер Value 4 или нет Нет, я буду распространять этот модуль с твоими копирайтами и пусть люди подумают, что ты умеешь делать дженерики ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2017, 16:02:33 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUпусть люди подумают, что ты умеешь делать дженерики Да ! Пихайте ! пихайте это дженериковое говно везде ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2017, 16:06:43 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
defecator, Спасибо, что одобряешь :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2017, 16:10:47 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUAleksandr Sharahov, Для твоего алгоритма нет разница, равен размер Value 4 или нет Нет, я буду распространять этот модуль с твоими копирайтами и пусть люди подумают, что ты умеешь делать дженерики Но есть разница в скорости. Так что пусть лучше люди думают, что ты можешь писать только тормознутый код. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2017, 16:13:32 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, Саня, чё ты взьелся? Дженерики есть с 2009 года, всю черновую работу я тебе уже прописал. На тот случай если ты сам не умеешь, или времени нет, или оба варианта. У Казанцева таблица универсальная, у Эмбы (да и вообще у всех) универсальная, у тебя только TObject-ы. Надо же сравнивать твою таблицу на универсальном Value, а ты вместо благодарности слюной брызжешь. По поводу скорости... а ты думаешь другим авторам таблиц легко? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2017, 16:30:55 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUДженерики есть с 2009 года, всю черновую работу я тебе уже прописал. На тот случай если ты сам не умеешь, или времени нет, или оба варианта. У Казанцева таблица универсальная, у Эмбы (да и вообще у всех) универсальная, у тебя только TObject-ы. У нас разные представления об универсальности. Как сделать универсально на TObject, я уже писал не раз. А реализация на Value в твоем исполнении - это полный бред и я так никогда бы не сделал. SOFT FOR YOUНадо же сравнивать твою таблицу на универсальном Value, а ты вместо благодарности слюной брызжешь. Если хочешь сравнить свою реализацию с моей - бери код с сайта без всяких изменений. А в своем коде поменяй Value на TObject. SOFT FOR YOUПо поводу скорости... а ты думаешь другим авторам таблиц легко? Вот соревнуйтесь между собой. Нефиг ломать чужой код, а потом выезжать на белом коне. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2017, 17:07:19 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUУ Казанцева таблица универсальная В который раз убеждаюсь, что ты, либо не читаешь, либо не понимаешь написанного. На счёт универсальности перечитай ещё раз . Речи о данных не было вообще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2017, 17:22:00 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, TObject плох тем, что для каждого экземпляра дёргается менеджер памяти, куча обвязок типа Before/After, Init/Cleanup. В случае менеджмента структурами менеджер задействуется при реаллоке, а поля могут вообще никак не модифицироваться если нет сложных типов из строк/интерфейсов/дин.массивов Поэтому если ты думаешь, что сделать TObject это большое достижение - то ты сильно заблуждаешься. Нет ни гибкости, ни выигрыша по скорости. Почему ты подумал, что при переходе с Obj на дженерик в рамках текущей архитектуры будет проседание по производительности - я не понял. Но если они есть - Эмба, boost и C# как-то решают их. В моей реализации разницы нет Ты сегодня успел назвать меня идиотом только потому, что "ты бы так не сделал". Аргумент конечно... но слабый. И в целом показывает уровень культуры, я думал, он выше. Нет силы соревноваться - я могу это понять. Если великая ценность твоей статьи в том, что ты немного дополнил Седжвика - я тоже это приму. Но раньше я думал, что уровень твоего профессионализма выше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2017, 17:51:53 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Понятно. Я думал твоя таблица представляет какую-то ценность ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2017, 17:55:03 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, культура общения в первую очередь состоит в умении слушать, что говорит собеседник, и не навязывать ему свою точку зрения, а как профессионал замени TObject на Pointer ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2017, 17:58:58 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, Профессиональные авторы контейнеров делают Value универсальным Глупо нам всем подстраиваться под твой TObject/Pointer только потому, что ты не умеешь дженерики ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2017, 18:04:13 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, Глупо не понимать, то что разжевано вдоль и поперек. Как правило, TObject уже существует где-то в момент добавления ссылки на него в таблицу. А профессиональные авторы контейнеров пишут их для тех, кто не может/не хочет написать контейнер для себя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2017, 18:09:22 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUЯ думал, потенциал больше, но окончилось чем окончилосьВопросы связанные с разработкой hash очень важны и интересны. И действительно использование hash в многих алгоритмах целесообразно. Понятно, что скорее всего нет и быть не может "универсального" hash. Нет ли у вас tools, который позволял анализировать входной поток данных и предоставлять рекомендации по использованию того или иного подхода. Или к примеру имеет смысл подумать над вопросом "адаптивного" hash. О чем речь? Программа в процессе работы в течении некоторого времени ее эксплуатации пытается использовать тот или иной подход связанный с hash, tree, ... и пытается адаптироваться /то бишь использовать/ самый лучший из ей известный подход. Понятно, что при таком подходе должны быть использованы интерфейсы, которые бы скрывали native структуры используемые при обработке данных. Приблизительно как при разработки interafaces скажем для ActiveX. В этом случае программа будет как-бы "самоулучшаемая". Экспромтом. На счет collision. Может быть при их возникновении такие данные следует помещать во вторичную hash таблицу /для которой используется иной алгоритм расчета hash/? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2017, 01:25:40 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Владимир2012, Относительно хешей очень много теории и разработок. В частности, ваш экспромт называется FKS Hashing. У него рассматриваются статический и динамический варианты. Есть его же развитие на случай вторичного хеширования. В частности доказывается, что для вторичного хеширования можно из очень простого семейства линейных хешей выбрать такие, что там не будет коллизий, а суммарный размер таблиц будет при этом расти линейно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2017, 09:44:02 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Пошарился тут по коду TDictionary в Seattle. Заменил хеш-функции для Integer и String ключей на свои. Результаты: с родным System.Generics.Defaults.pas Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. с кастомным System.Generics.Defaults.pas Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Для Integer словаря выигрыш по скорости оказался в 2-3 раза! Эти дятлы расчитывали(!) бобом дженкинсом(!) хэши для 1-4 байтных целых. Для строк переход на Роберта Седжевика дал ускорение поскромней. Но все равно процентов 30 я выиграл. Как-то так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2017, 00:46:10 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Ой, ошибся. Для Integer словаря выигрыш по скорости оказался не в 2-3 раза, а в 3-4+. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2017, 00:49:29 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
У кого берлин стоит, гляньте, там таже фигня? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2017, 00:50:16 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
System.Generics.Defaults.pas Код: pascal 1. 2. 3. 4. Такая фигня? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2017, 00:52:23 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
rgreatТакая фигня?Угу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2017, 03:26:40 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
rgreatЭти дятлы расчитывали(!) бобом дженкинсом(!) хэши для 1-4 байтных целых. Они не дятлы, просто для универсального, во всех отношениях, TDictionary, по дефолту, выбран обладающий хорошим лавинным эффектом (читай, подходящий для всех типов ключей) Дженкинс. При этом предоставлен механизм замены компарера, где можно реализовать какой угодно хеш. Вот где они налажали, так это в установлении Capacity. Кстати, когда я смотрел на применение словаря в VCL/FMX, то не видел мест, где используются кастомные компареры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2017, 09:07:22 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Зачем вообще нужна хеш функция для integer? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2017, 14:23:29 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
rgreatЗачем вообще нужна хеш функция для integer? Я не знаю чем руководствовались в абракадабре, но думаю, что они ориентировались на средний вариант. Например, если мы берём в качестве ключа integer и заполняем таблицу миллионом последовательных ключей, то простое проецирование ключа на хеш даёт хороший результат. Но если мы вставляем миллион рандомных ключей, то производительность деградирует в разы, тогда, как хеш Дженкинса даёт стабильно одинаковый результат. Потестируй у себя, может что интересное получится. У меня, на AMD, Дженкинс немногим медленне худшего случая с рандомными ключами, вдруг у тебя быстрее окажется :) Кстати, тут ещё могу привести пример, когда медленный Дженкинс уделывает быстрого Седжвика. Я тестировал свою таблицу на nextgen-компиляторе (XE5-6), и несмотря на более быстрый хеш Седжвика и более выгодную организацию данных она совсем немого но опережала дефолтный словарь с Дженкинсом. На последних версиях (XE8-10) моя таблица стабильно медленне дефолтного словаря, хотя тоже очень не на много. После того, как я заменил у себя Седжвика на Дженкинса, моя таблица снова стала быстрее на nextgen, несмотря на то, что Дженкинс медленне. Разница только в компиляторе и архитектуре процессора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2017, 16:07:06 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Раз уж пошла такая пьянка... Вот набор целочисленных ключей, на которых медленный Дженкинс рвёт в клочья прямое проецирование ключа на хеш: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Понятное дело, что пример искусственный, но в жизни-то всякое бывает. На этом наборе ключей скорость поиска с Дженкинсом в 55 раз быстрее проецирования, а скорость вставки в 61 раз быстрее. А всё что мы сделали, это сосредоточили входы 1 млн. ключей в первых 995 тыс. яцеек таблицы. Таким образом на проецировании получается 5 тыс. коллизий на входе в таблицу, а у Дженкинса их более 200 тыс., но за счёт хорошего распределения у него очень короткие цепочки, что в результате позволяет ему выиграть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2017, 18:16:05 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyРаз уж пошла такая пьянка... Вот набор целочисленных ключей, на которых медленный Дженкинс рвёт в клочья прямое проецирование ключа на хеш: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Понятное дело, что пример искусственный, но в жизни-то всякое бывает. На этом наборе ключей скорость поиска с Дженкинсом в 55 раз быстрее проецирования, а скорость вставки в 61 раз быстрее. А всё что мы сделали, это сосредоточили входы 1 млн. ключей в первых 995 тыс. яцеек таблицы. Таким образом на проецировании получается 5 тыс. коллизий на входе в таблицу, а у Дженкинса их более 200 тыс., но за счёт хорошего распределения у него очень короткие цепочки, что в результате позволяет ему выиграть.Я в восхищении от твоей способности подобрать такой тест кейс. Но достаточно поменять в нем 1 цифру и Дженкинс опять проиграет. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2017, 18:41:21 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyrgreatЗачем вообще нужна хеш функция для integer? Я не знаю чем руководствовались в абракадабре, но думаю, что они ориентировались на средний вариант. Например, если мы берём в качестве ключа integer и заполняем таблицу миллионом последовательных ключей, то простое проецирование ключа на хеш даёт хороший результат. Но если мы вставляем миллион рандомных ключей, то производительность деградирует в разы, тогда, как хеш Дженкинса даёт стабильно одинаковый результат. Потестируй у себя, может что интересное получится. У меня, на AMD, Дженкинс немногим медленне худшего случая с рандомными ключами, вдруг у тебя быстрее окажется :) Вот такой код у меня стабильно медленней на дженкинсе. Код: pascal 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2017, 18:54:54 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
rgreatНо достаточно поменять в нем 1 цифру и Дженкинс опять проиграет. :) Это и понятно, но замена той же цифры может затормозить проецирование вообще в бесконечность. Вот тебе готовый сценарий для DOS-атаки, на таблицу ;) rgreatВот такой код у меня стабильно медленней на дженкинсе. На сколько, в процентном отношении? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2017, 19:00:15 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
rgreat, Кстати, если мне не изменяет память, у тебя таблица разруливала коллизии методом цепочек. Если всё так, то её этот вариант радикально затормозить не должен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2017, 19:05:53 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexeyrgreat, Кстати, если мне не изменяет память, у тебя таблица разруливала коллизии методом цепочек. Если всё так, то её этот вариант радикально затормозить не должен.Угу. Она у меня скажем так "стабильно не очень быстрая". Соседние коллизии друг на друга не влияют, но зато идет высокая нагрузка на менеджер памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2017, 19:12:32 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyНа сколько, в процентном отношении? Дженкинс: Add 10.000 integers in 10.000.000 iterations. 625 msec Без него: Add 10.000 integers in 10.000.000 iterations. 312 msec. в 2 раза. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2017, 19:14:10 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
rgreatСоседние коллизии друг на друга не влияют, но зато идет высокая нагрузка на менеджер памяти. На nextgen не проверял, а то там с менеджером совсем плохо? rgreatв 2 раза. О! У меня всего 20-25% ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2017, 19:18:11 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyО! У меня всего 20-25% Это от того, что у меня верхняя граница High(Integer); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2017, 19:48:34 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyKazantsev AlexeyО! У меня всего 20-25% Это от того, что у меня верхняя граница High(Integer);Похоже на то. Но этот случай для ключей не очень вероятный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2017, 19:53:55 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyНа nextgen не проверял, а то там с менеджером совсем плохо? Думаю там многое будет зависить от конкретной реализации в OS. Да и разброс в железе велик. Замучаешься выводить закономерности. Небось придется делать свой микро-менеджер памяти внутри цепочки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2017, 19:56:05 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Вот мой тестовый пример. http://www.rgreat.ru/tmp/Test.zip Я там базовые модули Generics.* переименовал в Indexes.* для простоты. Для теста достаточно в Indexes.Collections.Pas поменять Uses Код: pascal 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2017, 19:58:17 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
У меня с базовыми TDictionary результат пока такой: Код: plaintext 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. Но там еще есть чего оптимизировать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2017, 20:00:32 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
TDictionary без Дженкинса: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2017, 20:06:13 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
rgreatДумаю там многое будет зависить от конкретной реализации в OS. Да и разброс в железе велик. Просто там FastMM'а нет :) rgreatНебось придется делать свой микро-менеджер памяти внутри цепочки. Мне в паре мест пришлось менять алгоритм работы с памятью :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2017, 20:07:44 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyПросто там FastMM'а нет :)Потому и будет. :) Может через пару лет и FastMM допилят для NextGen? ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2017, 20:11:27 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2017, 15:45:43 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
обновил статью и исходник в свете последних обсуждений ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2017, 00:04:08 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
rgreat, на таком же тесте с моим словарем на E6850 времена такие 1357 203 78 Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2017, 00:55:07 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Без сравнения с другими мало о чем говорит, кроме того что поиск у тебя гораздо быстрей добавления. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2017, 05:38:37 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
rgreatБез сравнения с другими мало о чем говорит, кроме того что поиск у тебя гораздо быстрей добавления. Это потому, что ищу в пустом словаре ) Сорри, после копи-паста забыл убрать вызов Clear. После исправления поиск и вставка работают одинаково медленно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2017, 08:30:02 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
rgreat, Делаю сейчас комплексный бенчмарк. Судя по всему, ты смог добиться действительно классных результатов Только у тебя много классов, я так и не понял что брать. В бенчмарке используются классы хеш-таблиц с дефолтными хешами TDictionary, THashTable или использовать какую-то другую комбинацию кода? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2017, 00:15:40 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUrgreat, Делаю сейчас комплексный бенчмарк. Судя по всему, ты смог добиться действительно классных результатовНадо-же. Я когда их пилил о особой скорости думал. Сделаешь бенч - интересно будет глянуть. http://www.rgreat.ru/tmp/Delphi/Test.zip Только у тебя много классов, я так и не понял что брать. В бенчмарке используются классы хеш-таблиц с дефолтными хешами TDictionary, THashTable или использовать какую-то другую комбинацию кода?Если тебе нужны объекты с хешами то: THashTable<T> TArrayEx<T> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2017, 02:20:10 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Добавил в свой тест твою Rapid.Generics. По моим тестам x32 так вышло: Код: 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. На первый взгляд у тебя очень шустро вышло. В x64 Rapid.Generics не билдится. Ну и твой TDictionary рушится при Create. Кстати, не надо так называть классы. TDictionary уже есть в базе. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2017, 03:01:58 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
rgreat, Так THashTable<T> или TArrayEx<T>? В чём отличие то? :) И, помнится (если не путаю), у тебя были более быстрые аналоги хешей. Это в каком модуле и как применять? ) Судя по тому, что я увидел... бегло... у тебя код очень похож на стандартный TDictionary. Имеет ли смысл менять класс, может просто взять твой хеш-компаратор? Кстати, не надо так называть классы. TDictionary уже есть в базе. :) Так в том и суть :) Там полные эквиваленты TDictionary, TList, TQueue, TStack, TArray, ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2017, 04:31:31 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUrgreat, Так THashTable<T> или TArrayEx<T>? В чём отличие то? :) Первое - это словарь. Второе - массив, с опциональным поиском в нем через хеш. И, помнится (если не путаю), у тебя были более быстрые аналоги хешей. Это в каком модуле и как применять? ) Судя по тому, что я увидел... бегло... у тебя код очень похож на стандартный TDictionary. Имеет ли смысл менять класс, может просто взять твой хеш-компаратор? Вот тут возьми. https://quality.embarcadero.com/browse/RSP-16730 Так в том и суть :) Там полные эквиваленты TDictionary, TList, TQueue, TStack, TArray, ...Рисковый подход. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2017, 16:15:45 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
rgreat, А в чём преимущество THashTable относительно стандартного TDictionary? Скинь сюда, пожалуйста, я там не зарегистрирован В общем скажи наиболее эффективный способ воспользоваться твоими наработками? THashTable + альтернативные хеши? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2017, 17:47:37 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
rgreatВот тут возьми. https://quality.embarcadero.com/browse/RSP-16730 Там рекомендуется Код: pascal 1. 2. 3. 4. Так нельзя делать. Это будет тормозить, например, если все Value имеют вид 256*i. Имеет смысл использовать функции "взбалтывания", см. пример http://guildalfa.ru/alsha/node/32 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2017, 20:24:02 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
А альтернативные хеши на дженкинсе никто не делал? Имею ввиду реализации IEqualityComparer<T> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2017, 20:47:31 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Блин, хотел модуль Шарахова добавить, а UnicodeString нет, RawByteString-таблица основана на поле в обжекте Нет, хватит париться ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2017, 21:40:20 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Aleksandr SharahovТак нельзя делать. Это будет тормозить, например, если все Value имеют вид 256*i. Имеет смысл использовать функции "взбалтывания", см. пример http://guildalfa.ru/alsha/node/32 Под любой хеш используемый в виде цепочек можно подобрать такие Value что его поставит раком. Какой смысл все усложнять? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2017, 22:25:36 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
На случайных ключах для SizeOf(Value)<=4 быстрей чем Hash:=Value нет ничего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2017, 22:28:22 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
rgreatAleksandr SharahovТак нельзя делать. Это будет тормозить, например, если все Value имеют вид 256*i. Имеет смысл использовать функции "взбалтывания", см. пример http://guildalfa.ru/alsha/node/32 Под любой хеш используемый в виде цепочек можно подобрать такие Value что его поставит раком. Какой смысл все усложнять? Мы боремся не с атакой на хеш. Это бред. Мы боремся с регулярностью ключа. А это реальность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2017, 22:28:29 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Хотел сказать SizeOf(Value)=4. Там где SizeOf(Value)<4 можно соптимизировать попростому. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2017, 22:30:29 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Завершил бенчмарки для проекта Rapid.Generics: https://github.com/d-mozulyov/Rapid.Generics Вот бенчмарк по хеш-таблицам: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 00:56:14 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Что за единицы измерения в этой таблице. Не комильфо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 01:05:26 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Что такое 8752 и почему оно такое большое? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 01:06:32 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
rgreat, Миллисекунды Но важны не они, а коэффициент прироста производительности ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 01:07:00 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Чем отличается Dictionary of RapidDictionary? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 01:08:13 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
rgreat, 8,5 секунд Видимо для Integer хеш даёт много коллизий, и для реализации стандартного TDictionary это даёт серьёзную просадку производительности при добавлении ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 01:10:36 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
rgreat, TRapidDictionary не позволяет задать хеш-компаратор Используются дефолтные и инлайнятся ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 01:12:05 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Aleksandr SharahovМы боремся не с атакой на хеш. Это бред. Мы боремся с регулярностью ключа. А это реальность.Надежней через Capacity это решить. При условии что положение в листе ищется через n:=Value mod Capacity. И коллизий не будет и в скорости не потеряешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 01:14:36 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUrgreat, 8,5 секунд Видимо для Integer хеш даёт много коллизий, и для реализации стандартного TDictionary это даёт серьёзную просадку производительности при добавлении Поменяй свое Код: pascal 1. 2. 3. 4. 5. на Код: pascal 1. 2. 3. 4. Проверь разницу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 01:16:21 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUrgreat, А в чём преимущество THashTable относительно стандартного TDictionary? - Наличие доступа к данным через индекс в массиве словаря, а не только через ключ. - Скорость работы мало страдает от коллизий хеша. - Автоматическое очищение хранимых объектных типов при удалении (отключаемое). - Возможность задания Default значения в случше ненахождения значения в словаре. - BeginUpdates/EndUpdates для пакетного изменения. - Режим хранения значений с дублирующимися ключами. - Lock/Unlock/isLocked. - Tag и прочие мелочи. :) THashTable + альтернативные хеши?Идеала не существует. Кому что больше прет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 01:29:52 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
rgreatПроверь разницу. Лень Там исходники бенчмарка открыты, посмотри, если хочешь Вангую, что скорость будет как у TRapidGenerics Но я считаю, предложенный тобой способ не надёжен для универсального использования. Хотя в частных случаях годится - вполне ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 01:47:41 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
rgreatAleksandr SharahovМы боремся не с атакой на хеш. Это бред. Мы боремся с регулярностью ключа. А это реальность.Надежней через Capacity это решить. При условии что положение в листе ищется через n:=Value mod Capacity. И коллизий не будет и в скорости не потеряешь. Пример. Capacity=256*1024 Заполняем на 3/4, N=3*64*1024 элементов. Ключи вида K=I*256, I=0..N-1. Имеем K mod Capacity = I*256 mod (256*1024), итого 1024 разных значения модуля, т.е. в каждый из 1024 кластеров попадет N/1024=3*64=192 ключа ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 01:49:32 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUЗавершил бенчмарки для проекта Rapid.Generics Ни в одной из этих версий не компилируется: XE2, XE3, XE6, XE7, 10.1 Berlin. (commit: aadf2824eb9003154f5ab048092df53c4fc12c38) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 02:29:23 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUrgreatПроверь разницу. Лень Там исходники бенчмарка открыты, посмотри, если хочешь Вангую, что скорость будет как у TRapidGenerics Но я считаю, предложенный тобой способ не надёжен для универсального использования. Хотя в частных случаях годится - вполне Не угадал. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 02:33:45 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Aleksandr SharahovПример. Capacity=256*1024 Заполняем на 3/4, N=3*64*1024 элементов. Ключи вида K=I*256, I=0..N-1. Имеем K mod Capacity = I*256 mod (256*1024), итого 1024 разных значения модуля, т.е. в каждый из 1024 кластеров попадет N/1024=3*64=192 ключаОпять частный случай. Сделай ключ I*255 или I*257 и проблема исчезает. Как я уже сказал подобрать правило можно под любой хэш в таблице с открытой адресацией. Перебор разных хешей это не более чем игры в угадайку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 02:50:27 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Хотя про "коллизий не будет" это я глупость сказал, конечно. Не подумавши. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 02:51:42 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
rgreatНе угадал. Не :) Я имел ввиду, если ты InterfaceDefaults.GetHashCode_N4 подменишь А вообще буст виден, согласен. Только я на такое в универсальной либе так и не решусь :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 04:48:13 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeySOFT FOR YOUЗавершил бенчмарки для проекта Rapid.Generics Ни в одной из этих версий не компилируется: XE2, XE3, XE6, XE7, 10.1 Berlin. (commit: aadf2824eb9003154f5ab048092df53c4fc12c38) У меня как раз XE8 :) А что ругается? Internal error? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 04:49:29 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUБлин, хотел модуль Шарахова добавить, а UnicodeString нет, RawByteString-таблица основана на поле в обжекте Нет, хватит париться ) Жаль, что твоя гнедая сломала ногу ) Во-первых, заметил небольшую неточность. Тест на время заполнения учитывает время создания словаря и время заполнения, но не учитывает время освобождения. Учел. Во-вторых, ты ж понимаешь, что разницы между UnicodeString и RawByteString в данном нашем случае нет никакой, все особенности легко учитываются внутри хеш-функции. В-третьих, чтобы использовать "поле в обжекте" достаточно умения работать с указателями. В общем добавил немного отсебятины в твой код: Код: 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. скомпилировал на XE8 и прогнал на E6850, результаты ниже: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. женерики наше все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 13:21:59 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Aleksandr SharahovВо-первых, заметил небольшую неточность. Тест на время заполнения учитывает время создания словаря и время заполнения, но не учитывает время освобождения. Учел. Не совсем понял, что ты имеешь ввиду Операцию Delete или Clear? Delete показала бы превосходство моего кода, но Delete происходит редко, поэтому я решил не добавлять в тест Clear тоже не медленнее... на Integer разницы быть не должно, для string разница незначительна. Хотя... в оригинале вроде виртуальные калбеки дёргаются, я уже не помню Aleksandr SharahovВо-вторых, ты ж понимаешь, что разницы между UnicodeString и RawByteString в данном нашем случае нет никакой, все особенности легко учитываются внутри хеш-функции. Не понятно, это ты к чему? Я не против RawByteString :) Aleksandr SharahovВ-третьих, чтобы использовать "поле в обжекте" достаточно умения работать с указателями. Что-то я не понял. А к чему тогда поле Offset? Aleksandr SharahovВ общем добавил немного отсебятины в твой код: скомпилировал на XE8 и прогнал на E6850, результаты ниже: женерики наше все. Так ты RawByteString и UnicodeString похоже сравниваешь. Во втором в 2 раза больше байт ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 14:05:45 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Aleksandr SharahovRandomize; Seed:=RandSeed; Сначала надо Seed сохранять, потом рандомайзить ) Ну и потом здесь специально нет рандомайза, чтобы сохранить одинаковость данных ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 14:08:41 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUAleksandr SharahovВо-первых, заметил небольшую неточность. Тест на время заполнения учитывает время создания словаря и время заполнения, но не учитывает время освобождения. Учел. Не совсем понял, что ты имеешь ввиду Я Instance.Free имею в виду У тебя так: Код: pascal 1. 2. 3. 4. логичее было бы так Код: pascal 1. 2. 3. 4. SOFT FOR YOUAleksandr SharahovВ-третьих, чтобы использовать "поле в обжекте" достаточно умения работать с указателями. Что-то я не понял. А к чему тогда поле Offset? Offset - это смещение поля внутри объекта или записи. В нашем тесте запись состоит из одного единственного строкового поля. Offset=0. SOFT FOR YOUТак ты RawByteString и UnicodeString похоже сравниваешь. Во втором в 2 раза больше байт Разумеется, но у нас с тобой хеш-функции не блобы обрабатывают, а строки посимвольно, т.е. на них это не влияет, т.к. количество операций одинаково. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 14:21:27 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUAleksandr SharahovRandomize; Seed:=RandSeed; Сначала надо Seed сохранять, потом рандомайзить ) Ну и потом здесь специально нет рандомайза, чтобы сохранить одинаковость данных Ты бы разобрался сначала. Так сделано, чтобы генератор крутился с одного значения и у тебя и у меня. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 14:23:25 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Aleksandr SharahovРазумеется, но у нас с тобой хеш-функции не блобы обрабатывают, а строки посимвольно, т.е. на них это не влияет, т.к. количество операций одинаково. Ну у меня данные обрабатываются не посимвольно, а группами байт И потом ты забываешь про компаратор и кеш-мисс ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 14:35:34 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUAleksandr SharahovРазумеется, но у нас с тобой хеш-функции не блобы обрабатывают, а строки посимвольно, т.е. на них это не влияет, т.к. количество операций одинаково. Ну у меня данные обрабатываются не посимвольно, а группами байт И потом ты забываешь про компаратор и кеш-мисс Ну, все в твоих руках, напиши женерик для Raw ) Я не забываю, я на этом как раз играю в своем словаре. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 14:39:33 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
[quot Aleksandr Sharahov]SOFT FOR YOUНу, все в твоих руках, напиши женерик для Raw ) Я не забываю, я на этом как раз играю в своем словаре. Так у меня есть и RawByteString, и DynamicArray, и структуры, и всё что хочешь :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 14:41:19 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUИ потом ты забываешь про компаратор и кеш-мисс В твоих тестах строковый компарер не отрабатывает по данным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 14:44:28 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Отрабатывает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 14:46:09 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, У тебя же там один массив под ключи. И когда ты ищешь все ключи, то фактически, у одинаковых строк сравниваются только адреса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 14:49:01 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeySOFT FOR YOU, У тебя же там один массив под ключи. И когда ты ищешь все ключи, то фактически, у одинаковых строк сравниваются только адреса. Обижаешь :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 14:50:22 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUОбижаешь :) Где я могу увидеть создание копий ключей? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 14:54:01 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, Замена string на RawByteString не добавила скорости твоему словарю: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 14:56:55 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Виноват, *почти* не добавила ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 15:00:46 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeySOFT FOR YOUОбижаешь :) Где я могу увидеть создание копий ключей? Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Если бы сравнивались только указатели, то в данном случае был бы Exception А посмотреть - только трейсить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 15:06:48 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Aleksandr SharahovЗамена string на RawByteString не добавила скорости твоему словарю: Любопытно, я посмотрю А ты точно в Release сравниваешь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 15:07:44 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUAleksandr SharahovЗамена string на RawByteString не добавила скорости твоему словарю: Любопытно, я посмотрю А ты точно в Release сравниваешь? На самом деле небольшое ускорение есть, но все равно моя чуточку быстрее, т.к. не хранит "лишних" данных. Точно релиз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 15:11:18 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, Значит я посмотрю Возможно под x86 имеет смысл использовать стандартный ассемблерный компаратор строк, а не мой самописный ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 15:13:50 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUЕсли бы сравнивались только указатели, то в данном случае был бы Exception А посмотреть - только трейсить У тебя сохранены строки в Items. Cтроки у нас рефкаунтед, а потому там сохранены только указатели. Когда ты вставляешь данные в словарь, то словарь сохраняет строковый ключ и тоже как указатель. Когда ты в поиске даёшь словарю сохранённую в Items строку, то фактически ты передаёшь уже сохранённый адрес. Компарер видя что адреса сравниваемых строк совпадают дальнейшее сравнение не делает. Так понятно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 15:14:55 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, В Items есть Key: TKey Он конечно указатель, но обычный string в соответствующем случае Если указатели string совпадают - то строки равны. А ты как хотел? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 15:18:55 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUЕсли указатели string совпадают - то строки равны. А ты как хотел? Для корректности поиск нужно делать по копиям ключей, чтобы дать возможность отрабатывать компареру, как это происходило бы в реальных сценариях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 15:23:12 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeySOFT FOR YOUЕсли указатели string совпадают - то строки равны. А ты как хотел? Для корректности поиск нужно делать по копиям ключей, чтобы дать возможность отрабатывать компареру, как это происходило бы в реальных сценариях. Очень интересная мысль Наверное, действительно нужно предусмотреть отдельный вариант теста с уникальными строками Но: 1) Стандартный компаратор тоже сравнивает указатели 2) Значит дело не в компараторе x86, а в чём-то другом. Не может у Шарахова поиск по хешу работать быстрее моего :) Но может быть действительно дело в архитектуре, том факте, что память расходуется больше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 15:40:59 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUНе может у Шарахова поиск по хешу работать быстрее моего Самоуверенность просто прёт ! Когда библиотеки Шарахова использовались, ты ещё сиську сосал, и к его коду доверия гораздо больше, чем к коду всемирного оптимизатора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 15:44:32 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Добавил в свой тест ShaDictionary Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 16:57:47 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
rgreat, а где можно скачать исходники? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 17:11:33 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 17:15:50 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
А я в свой тест добавил TShaNamedObjectDictionary Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. rgreat, Кстати я нашёл баг конструктора, про который ты говорил Фиг знает, почему в одних случай конструктор класса происходит, а в других нет В общем исправил, обновил файл в репозитории ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 17:50:06 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, Я так и не понял, у тебя в хеш-таблице есть возможность создать <RawByteString,Integer>, например? Или для хранения Integer должен быть какой-то отдельный массив? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 17:54:06 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
rgreatAleksandr Sharahov, http://www.rgreat.ru/tmp/Delphi/Test.zip Посмотрел, есть несколько предложений: 1. Тесты с целочисленными ключами работают с неодинаковыми случайными данными из-за того, что в начале каждого теста RandSeed имеет разные значения. Исправление: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 2. Мои словари используют взбалтывание идентификаторов, из-за чего работают в неравных условиях с другими. Переделал, теперь это опция, по умолчанию отключенная. Для сравнимости результатов лучше использовать обновленные исходники к статье http://guildalfa.ru/alsha/node/32 3. По аналогии добавил замеры скорости для TShaIntegerBox: Код: 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. После этих изменений на E6850 получил: Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 19:31:15 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUА я в свой тест добавил TShaNamedObjectDictionary Мои словари используют взбалтывание идентификаторов, из-за чего работают в неравных условиях с другими. Переделал, теперь это опция, по умолчанию отключенная. Для сравнимости результатов лучше использовать обновленные исходники к статье http://guildalfa.ru/alsha/node/32 SOFT FOR YOUAleksandr Sharahov, Я так и не понял, у тебя в хеш-таблице есть возможность создать <RawByteString,Integer>, например? Или для хранения Integer должен быть какой-то отдельный массив? У меня элементы хеш-таблицы содержат только два поля: хеш-код и адрес данных. Если ты хочешь хранить в хеш-таблице адреса объектов или записей, которые имеют поля RawByteString, Integer и/или любые другие, то, разумеется, они должны находиться где-то в памяти вне таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 19:42:28 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, Сурово У тебя вызываются калбеки на хеш и компаратор строки. У меня они инлайнятся, кроме того хеш сначала считается четверками байт. Как ты думаешь, почему производительность может уступать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 20:18:59 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUAleksandr Sharahov, Сурово У тебя вызываются калбеки на хеш и компаратор строки. У меня они инлайнятся, кроме того хеш сначала считается четверками байт. Как ты думаешь, почему производительность может уступать? При случайном доступе к элементам хеш-таблицы производительность определяется, в первую очередь, количеством элементов таблицы, которое помещается в кеш-линии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 20:37:47 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, Т.е. если количество элементов будет таким, что все они поместятся в L1, у меня станет быстрее? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 20:49:11 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUТ.е. если количество элементов будет таким, что все они поместятся в L1, у меня станет быстрее? Не в этом дело. Искомый элемент хеш-таблицы может иметь индекс, отличающийся от предсказанного. В этом случае придется последовательно прочитать данные из нескольких кеш-линий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 21:17:20 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, Надо конечно проанализировать коллизии, но, насколько я помню, их было не много ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 21:36:47 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, А есть у твоей реализации ещё какие-то преимущества над стандартным TDictionary? Кроме урезания данных ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 23:19:58 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUAleksandr Sharahov, А есть у твоей реализации ещё какие-то преимущества над стандартным TDictionary? Кроме урезания данных Разумеется, вот те, что мне нравятся: - скорость, - удобство, - единообразное использование, - размер и понятность кода, - отсутствие ненужных мне функций, - простота изменения под себя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 23:35:41 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, Мягко говоря аргументы спорные Но меня интересует именно производительность Есть ли особенности, кроме урезания размера рабочих структур, которые позволяют увеличить производительность относительно стандартной TDictionary? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 23:58:30 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUНо меня интересует именно производительность Есть ли особенности, кроме урезания размера рабочих структур, которые позволяют увеличить производительность относительно стандартной TDictionary? Разумеется, есть неиспользованные возможности. Например, производительность можно дополнительно увеличить инлайнами и всякой другой хренью, ну, ты понял ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2017, 00:08:55 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, Ясно :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2017, 00:24:34 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahovпонятность кода, Смотрю я на твою функцию ShiftItems и понятность от меня уплывает. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2017, 01:01:30 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
rgreatAleksandr Sharahovпонятность кода, Смотрю я на твою функцию ShiftItems и понятность от меня уплывает. :) Если не читал статью, то да, может быть непонятно. Там всего 3 идеи при сдвиге: 1. не делать лишнего, 2. не нарушить упорядоченность, 3. учесть заворот данных при выходе за границу массива. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2017, 07:16:55 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, А чего ты застрял на семёрке? Давно делают юникод и шаблоны ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2017, 13:02:48 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Подписался на этот поисковый "сериал", очень интересно. Лучшее после "теории большого взрыва" :) А если для ускорения поиска модифицировать сам строковый класс? Чтобы часть данных уже была заранее в строке посчитана? Память не жалко. Жалко время. И даже каким-то боком попробовать сюда фильтр Блума прикрутить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2017, 21:06:28 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
ART-CODEПодписался на этот поисковый "сериал", очень интересно. Лучшее после "теории большого взрыва" :) А если для ускорения поиска модифицировать сам строковый класс? Чтобы часть данных уже была заранее в строке посчитана? Память не жалко. Жалко время. И даже каким-то боком попробовать сюда фильтр Блума прикрутить? Ничего модифицировать не надо. Такая возможность уже есть из коробки. Достаточно один раз вычислить хеш строки и хранить его рядом со строкой в самом "объектовом" классе. После чего можно использовать protected методы: AddHashed, PutHashed, FindHashed, GetHashed, ExtractHashed, RemoveHashed. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2017, 21:39:58 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
ART-CODE, Так сериал к концу подошёл. В универсальном случае можно заменить стандартную библиотеку шаблонов на мою. В особых случаях можно реализовать решение на основе кода Шарахова, только заинлайнить хешер и компаратор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2017, 21:40:56 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Спасибо. Прочитал, пора попробовать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2017, 21:58:20 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Похоже, я всё-таки продал душу дьяволу :) Можете посмотреть коммит, не забудьте нажать "Load diff" :) https://github.com/d-mozulyov/Rapid.Generics/commit/6ca71f1b37b493ffd3a8c4af092ec8a47a795aa7 Есть поддержка Delphi 2010 и XE4+ Завести Delphi 2009 и XE1-XE3 так и не удалось Гордо дублирую таблицы бенчмарков: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2017, 01:28:50 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Исправил баг с итераторами ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2017, 18:55:08 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, Да, много работы проделано. Жаль, что у меня XE 3 и поэтому - у меня не работает (а другую версию я уже, наверно, никогда не куплю). В какую сторону "копать" для того, чтобы "завелось"? Или там какие-то принципиальные ограничения? От комментов как-то специально чистили код? Ну, я по себе сужу: я не могу так "мочаливо" писать. Всегда для себя, (чтобы не забыть) подробно комментирую не только ЧТО, но и ПОЧЕМУ делаю именно так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2017, 21:36:26 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
ART-CODEОт комментов как-то специально чистили код? Там код писался не для понимания другими, а для чтобы "быстрее всех в мире" Лишний комментарий - снижение быстродействия ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2017, 21:39:10 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
ART-CODE, Я обычно комментирую много, а тут видимо всё относительно просто, поэтому комментариев по минимуму Изначально либа компилировалась только под XE8, потом пришлось вымучивать код, чтобы компилятор его смог прожевать. Причём заметь, под D2010 компилируется, а под XE1-3 уже нет, хотя используется в точности один и тот же код Связано это с тем, что мало кто пишет дженериковые библиотеки, и стандартной обычно хватает, а те дженерики, что пишутся, обычно просты. Соответственно компилер не протестировали как следует и на данном коде он выдаёт Internal Error. Самые глючные подходы - это метки, локальные типы и локальные структуры без объявленого типа. То есть официально поддерживаться должно, а рушит почти каждый компилятор. Я конечно ещё сделаю заход на XE1-3. Но вообще рекомендую обновиться. Начиная с XE8 уже что-то удобоваримое и работать будет быстрей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2017, 00:33:37 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Добавлена полная поддержка Weak Reference, исправлена пара багов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2017, 00:11:56 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
На нашей улице снова праздник! Удалось сделать сборку для XE1-XE3 Таким образом поддерживаются все версии, начиная с 2010 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2017, 09:36:49 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov Код: pascal 1. 2. 3. 4. 5. 6. Оффтоп. Простите, а выделенное - это религия? Я понимаю, что каждый делает, как хочет. Но вижу такое впервые. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2017, 10:49:46 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Квейд, Я думаю у Шарахова маленький монитор и он работает не в команде. У нас за такое больно бьют по рукам ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2017, 16:23:08 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Квейд, да это религия. История корнями уходит. Если не устраивает, удаляется одной заменой. SOFT FOR YOUЯ думаю у Шарахова маленький монитор и он работает не в команде. У нас за такое больно бьют по рукам ) Ошибаешься оба раза. В вашей команде пора начать бить по голове ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2017, 18:16:16 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU , Спасибо, теперь компилируется. Хотя и пишет: "The library is much faster in XE7+ versions." Результат теста во вложении. Windows 8.1x64. 12Gb i7-4710HQ - 2.50GHz --- Я так понимаю, что чтобы работать на полной скорости - мне придется у кого-то (у кого есть XE10) скомпилировать DLL с набором функций, и далее смогу использовать ее где угодно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2017, 22:25:08 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
В прошлом сообщении были результаты сборки Debug (по ошибке присоединил). Вот результат Release: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2017, 23:44:03 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
ART-CODE, Насчёт версий и скорости Грамотность компилятора в плане версий развивалась постепенно 1) inline. Некоторые методы, особенно в TStack, TQueue и TRapidDicictionary, обозначены как inline. Но вроде бы до версии XE5 методы категорически отказывались инлайниться 2) Константный SizeOf. Код изобилует надписями типа if SizeOf() and 2 <> 0, case SizeOf() of и другими. Начиная вроде бы с версии XE4, все эти записи существенно сокращаются и выполняется только какой-то конкретный код, а до этого код раздувается до огромных размеров 3) Умный тип. Начина с XE7 в язык внедрены классные фишки. Можно "инлайном" определить, является ли тип Managed. Или разновидность типа. На этой концепции построен, например, TRapidDictionary. Там "инлайном" определяется разновидность типа, и для строк применяется один хеш/компаратор, для объектов другой, для чисел - третий. Правда в XE7 проблемы с label (метками), поэтому TRapidDictionary один фиг работает как TDictionary. Поэтому начиная с XE8 норм, а дальше улучшений я не заметил Что до dll - да. Но мне кажется, лучше в dll выносить не отдельные команды, а комплексные. ну там какие-то высокоуровневые функции, не знаю, какая у тебя специфика ). В общем, твори ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.05.2017, 12:37:44 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
На одном другом известном форуме :) возникла необходимость в работе со словарем с бинарными ключами. В результате мой юнит пополнился еще один классом. В связи с этим и не только внес изменения в статейку "Хеширование и хеш-таблицы" по адресу http://guildalfa.ru/alsha/node/32 Плюс кое-что добавлено, в частности: - добавил Murmur3Hash (для строки и буфера), - добавил версию ShaPerfectHash для буфера, - радикально ускорил ShaPerfectHash. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2017, 22:16:33 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Murmur3Hash - это сразу 6+! Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2017, 22:57:32 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов РустамMurmur3Hash - это сразу 6+! Поясни, что развеселило? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2017, 00:25:35 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Название классное. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2017, 00:43:58 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
А где-то есть сравнительное тестирование Murmur2/3 с другими хеш-функциями (Дженкинс, Адлер и др.)? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2017, 00:57:34 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, В статье ничего не нашёл про Murmur3Hash/ShaPerfectHash Пробовал ли ты мой хеш с обработкой 4 байт за итерацию? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2017, 08:44:17 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUAleksandr Sharahov, В статье ничего не нашёл про Murmur3Hash/ShaPerfectHash Пробовал ли ты мой хеш с обработкой 4 байт за итерацию? Значит, смотрел по диагонали. Есть и в статье немного, и в исходниках. Твой хеш не пробовал, т.к. не было особой надобности: Murmur3 один из самых быстрых качественных хешей общего назначения. Мой всего на 10% медленней, но отлично подходит для текстовых ключей в хеш-таблицах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2017, 10:19:45 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUПробовал ли ты мой хеш с обработкой 4 байт за итерацию? Я пробовал. На 6% лучше Седжвика на рандомных ключах и на 11% хуже на последовательных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2017, 11:08:52 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Какова длинна ключей? И какой толк от тестирования последовательных сороковых ключей? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2017, 12:52:30 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUКакова длинна ключей? Рандомные - строковые GUID's. SOFT FOR YOUИ какой толк от тестирования последовательных сороковых ключей? Смысл в выявлении слабых мест. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2017, 13:08:51 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2041988]: |
0ms |
get settings: |
6ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
168ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
257ms |
get tp. blocked users: |
1ms |
| others: | 190ms |
| total: | 646ms |

| 0 / 0 |
