powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Производительность TDictionary
25 сообщений из 60, страница 2 из 3
Производительность TDictionary
    #39807011
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexeyrgreat,

Сомневаюсь, что этого будет достаточно. Значительно более сложный murmur3, изначально сделаный с поддержкой seed, и тот не устоял.Какой смысл пытаться решить принципиально нерешаемую задачу?

Но если уж хочеться - меняйте seed пока кол-во коллизий не уменьшиться ниже определенного порога. Ну или пока не надоест.
...
Рейтинг: 0 / 0
Производительность TDictionary
    #39807029
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatКакой смысл пытаться решить принципиально нерешаемую задачу?
Насколько мне известно, на SipHash и BobJenkisnHash lookup3 (тот что в дельфях) с рандомизированным seed атак нет.

rgreatНо если уж хочеться - меняйте seed пока кол-во коллизий не уменьшиться ниже определенного порога. Ну или пока не надоест.
Нет, я просто не стану использовать функцию, которая для этого не годится. По крайней мере, не таким способом.

Есть другой вариант для простых функций - делать двойное хеширование и на завершающем этапе результат одной из функций использовать в качестве входных данных для другой.
...
Рейтинг: 0 / 0
Производительность TDictionary
    #39807031
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev AlexeyНасколько мне известно, на SipHash и BobJenkisnHash lookup3 (тот что в дельфях) с рандомизированным seed атак нет.За счет какого волшебного механизма они могут исчезнуть?
...
Рейтинг: 0 / 0
Производительность TDictionary
    #39807040
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatЗа счет какого волшебного механизма они могут исчезнуть?
Никто не говорит, что они исчезли. Появится завтра новый метод анализа и, возможно, выработают алгоритм для атаки.
...
Рейтинг: 0 / 0
Производительность TDictionary
    #39807061
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey> Появится завтра новый метод анализа и, возможно....
Будет хак, новая версия Delphi или будут юзать старые методы...
...
Рейтинг: 0 / 0
Производительность TDictionary
    #39809378
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Довелось сравнить производительность TDictionary<Integer,Integer> в D10.2 и QMap<int, int> в QT 5.12.
Сравнение в пользу Delphi.

Такой код в Delphi:
for I := 1 to 1000000 do
d.Add(I, I);
выполняется за 400 мс в Debug и 300 мс в Release.

В QT (msvc 2015 x86) код
for (int i = 0; i < 1000000; ++i) {
dict[i] = i;
}
выполняется 2500 мс (Debug) (релиз не пробовал).

Поиск по ключу в Delphi также выполняется быстрее (примерно в 2 раза).
...
Рейтинг: 0 / 0
Производительность TDictionary
    #39809381
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer,

https://doc.qt.io/qt-5/qmap.html The QMap class is a template class that provides a red-black-tree -based dictionary.
Какой смысл сравнивать разные структуры? Хеш-таблицы там: QHash и QSet.
...
Рейтинг: 0 / 0
Производительность TDictionary
    #39809391
Голландец
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Производительность TDictionary
    #39809450
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev AlexeyDmSer,

https://doc.qt.io/qt-5/qmap.html The QMap class is a template class that provides a red-black-tree -based dictionary.
Какой смысл сравнивать разные структуры? Хеш-таблицы там: QHash и QSet.

Какая разница что там под капотом? Сравнивались аналогичные инструменты. Попробую еще со стандартным map сравнить.
Я c++ не знаю, тем более qt. Может map / QMap никто в качестве словарей не использует. Тогда что используют.
...
Рейтинг: 0 / 0
Производительность TDictionary
    #39809457
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробую сравнить с QHash. Судя по описанию, оно должно быть ближе к TDictionary в плане реализации. Название правда отпугивает :)
...
Рейтинг: 0 / 0
Производительность TDictionary
    #39809458
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSerМожет map / QMap никто в качестве словарей не использует. Тогда что используют.
обычно std::map
...
Рейтинг: 0 / 0
Производительность TDictionary
    #39809460
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSerКакая разница что там под капотом?
Разница большая . Смотри таблицу с ассоциативными контейнерами.

QMap and QHash provide very similar functionality. The differences are:

QHash provides average faster lookups than QMap. (See Algorithmic Complexity for details.)
When iterating over a QHash, the items are arbitrarily ordered. With QMap, the items are always sorted by key.
The key type of a QHash must provide operator==() and a global qHash(Key) function. The key type of a QMap must provide operator<() specifying a total order. Since Qt 5.8.1 it is also safe to use a pointer type as key, even if the underlying operator<() does not provide a total order.


DmSerСравнивались аналогичные инструменты.
Вовсе нет. Словарь - это просто интерфейс. Реализовать его можно очень по-разному. Вот ты взял дельфийский словарь реализованный через хеш-таблицу (просто потому, что других в коробке нет), а сравниваешь со словарём реализованным через красно-чёрное дерево. Правильнее было бы сравнивать с QHash .
...
Рейтинг: 0 / 0
Производительность TDictionary
    #39809463
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer Может map / QMap никто в качестве словарей не использует. Тогда что используют.словари на сбалансированных деревьях используют, когда нужны жёсткие гарантии времени - т.е. есть вероятность, что на таблицу могут провести внешнюю атаку
и когда нужна упорядоченность по ключу
...
Рейтинг: 0 / 0
Производительность TDictionary
    #39809465
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по хэш-таблицам была одна интересная статейка , там подробно описывается как и с чем он борется
...
Рейтинг: 0 / 0
Производительность TDictionary
    #39809467
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)т.е. есть вероятность, что на таблицу могут провести внешнюю атаку
Разве в Qt'шных таблицах это не залечили использованием QT_HASH_SEED?
...
Рейтинг: 0 / 0
Производительность TDictionary
    #39809476
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexeykealon(Ruslan)т.е. есть вероятность, что на таблицу могут провести внешнюю атаку
Разве в Qt'шных таблицах это не залечили использованием QT_HASH_SEED?это усложняет, но не исключает

самый известный способ для полного "залечивания" - нужно совмещать хэштаблицу и сбалансированное дерево, что сведёт худший случай к O(LOG(N))

в статейке выше есть красивая попытка ещё более усложнить задачу атаки на хэш, но предсказать ошибки в её дееспособности я не могу
...
Рейтинг: 0 / 0
Производительность TDictionary
    #39809479
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)это усложняет, но не исключает
А какая хеш-функция, по дефолту, там используется? Seed они добавили сильно позже чем стало известно о таких атаках, наверняка делали с учётом новых реалий.
...
Рейтинг: 0 / 0
Производительность TDictionary
    #39809505
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скорость QHash сопоставима с TDictionary.
Добавление в QHash медленнее (примерно в 2 раза), зато поиск быстрее (в 2 - 3 раза).
Цикл
for (int i = 0; i < 1000000; ++i) {
dict.contains(i);
выполняется примерно 60 мс (при Debug)
...
Рейтинг: 0 / 0
Производительность TDictionary
    #39809508
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer,

А если обеим таблицам предварительно размер установить ?
...
Рейтинг: 0 / 0
Производительность TDictionary
    #39809516
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev AlexeyА какая хеш-функция, по дефолту, там используется? Seed они добавили сильно позже чем стало известно о таких атаках, наверняка делали с учётом новых реалий.я с Qt на вы, не ковырял реализацию, но принципиально это не поможет при определённом желании
с другой стороны - Qt графическая библиотека и не для серверов, с какого ляду кому-то нагружать свой же комп

В гуи обычно проблемы когда нужно копировать из одной таблицы в другую, тогда например тот же TDictonary замедлится чудовищно, из-за одинаковых хэш-функций и взаимнопростых делителей. Достаточно поменять что-то одно и всё будет летать - делитель поменять сложно(фактически переписать реализацию), а вот другую хэш-функцию задать довольно просто.
...
Рейтинг: 0 / 0
Производительность TDictionary
    #39809522
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)я с Qt на вы, не ковырял реализацию, но принципиально это не поможет при определённом желании
Нашёл, что там что-то на основе PJW, правда не совсем понятно куда там seed прикрутили. А вообще, проблема с этой атакой вполне решаема. Я писал выше о SipHash, почти все на неё перешли. На один из первых вариантов lookup3 тоже была атака, однако, потом были внесены изменения и про атаки на неё больше не слышно.

kealon(Ruslan)Qt графическая библиотека и не для серверов
Изначально так и было, но сейчас Qt это полноценный фреймвок с очень неплохим покрытием. Да и что там нужно для серверов, умение в сокеты...

kealon(Ruslan)когда нужно копировать из одной таблицы в другую, тогда например тот же TDictonary замедлится чудовищно, из-за одинаковых хэш-функций и взаимнопростых делителей. Достаточно поменять что-то одно и всё будет летать - делитель поменять сложно(фактически переписать реализацию), а вот другую хэш-функцию задать довольно просто.
Достаточно искоробочную функцию инициализировать рандомно .
...
Рейтинг: 0 / 0
Производительность TDictionary
    #39809533
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan),

перевод этот читал раньше, сильные чувства обуревали меня: )

замешаны в кучу правда, догадки, игнор очевидного и странные экперименты.
...
Рейтинг: 0 / 0
Производительность TDictionary
    #39809537
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev AlexeyDmSer,

А если обеим таблицам предварительно размер установить ?

В QT чуть быстрее стало, однако каждый замер отличается очень большим разбросом, поэтому не могу сказать конкретно, на сколько быстрее, может процентов на 10. Стало в среднем 600 мс.

В Delphi стало явно быстрее: 400->280 мс (Debug) и 300->234 мс (Release), причем при каждом замере разброс получается минимальным. Видимо, благодаря замечательному менеджеру памяти.
...
Рейтинг: 0 / 0
Производительность TDictionary
    #39809542
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer,

Похоже, таблицы там используют метод цепочек.
...
Рейтинг: 0 / 0
Производительность TDictionary
    #39809549
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexeykealon(Ruslan)когда нужно копировать из одной таблицы в другую, тогда например тот же TDictonary замедлится чудовищно, из-за одинаковых хэш-функций и взаимнопростых делителей. Достаточно поменять что-то одно и всё будет летать - делитель поменять сложно(фактически переписать реализацию), а вот другую хэш-функцию задать довольно просто.
Достаточно искоробочную функцию инициализировать рандомно . это и есть "поменять хэш-функцию". seed другой -> распределение - другое
...
Рейтинг: 0 / 0
25 сообщений из 60, страница 2 из 3
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Производительность TDictionary
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]