|
|
|
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 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39382171&tid=2041988]: |
0ms |
get settings: |
10ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
193ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 220ms |
| total: | 494ms |

| 0 / 0 |
