|
|
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexeyrgreat, Сомневаюсь, что этого будет достаточно. Значительно более сложный murmur3, изначально сделаный с поддержкой seed, и тот не устоял.Какой смысл пытаться решить принципиально нерешаемую задачу? Но если уж хочеться - меняйте seed пока кол-во коллизий не уменьшиться ниже определенного порога. Ну или пока не надоест. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2019, 21:09 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
rgreatКакой смысл пытаться решить принципиально нерешаемую задачу? Насколько мне известно, на SipHash и BobJenkisnHash lookup3 (тот что в дельфях) с рандомизированным seed атак нет. rgreatНо если уж хочеться - меняйте seed пока кол-во коллизий не уменьшиться ниже определенного порога. Ну или пока не надоест. Нет, я просто не стану использовать функцию, которая для этого не годится. По крайней мере, не таким способом. Есть другой вариант для простых функций - делать двойное хеширование и на завершающем этапе результат одной из функций использовать в качестве входных данных для другой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2019, 22:01 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyНасколько мне известно, на SipHash и BobJenkisnHash lookup3 (тот что в дельфях) с рандомизированным seed атак нет.За счет какого волшебного механизма они могут исчезнуть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2019, 22:23 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
rgreatЗа счет какого волшебного механизма они могут исчезнуть? Никто не говорит, что они исчезли. Появится завтра новый метод анализа и, возможно, выработают алгоритм для атаки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2019, 22:52 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey> Появится завтра новый метод анализа и, возможно.... Будет хак, новая версия Delphi или будут юзать старые методы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2019, 23:20 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
Довелось сравнить производительность 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 раза). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2019, 00:36 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2019, 01:13 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
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 никто в качестве словарей не использует. Тогда что используют. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2019, 11:50 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
Попробую сравнить с QHash. Судя по описанию, оно должно быть ближе к TDictionary в плане реализации. Название правда отпугивает :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2019, 12:05 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
DmSerМожет map / QMap никто в качестве словарей не использует. Тогда что используют. обычно std::map ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2019, 12:05 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
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 . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2019, 12:07 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
DmSer Может map / QMap никто в качестве словарей не использует. Тогда что используют.словари на сбалансированных деревьях используют, когда нужны жёсткие гарантии времени - т.е. есть вероятность, что на таблицу могут провести внешнюю атаку и когда нужна упорядоченность по ключу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2019, 12:15 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
по хэш-таблицам была одна интересная статейка , там подробно описывается как и с чем он борется ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2019, 12:17 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)т.е. есть вероятность, что на таблицу могут провести внешнюю атаку Разве в Qt'шных таблицах это не залечили использованием QT_HASH_SEED? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2019, 12:18 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexeykealon(Ruslan)т.е. есть вероятность, что на таблицу могут провести внешнюю атаку Разве в Qt'шных таблицах это не залечили использованием QT_HASH_SEED?это усложняет, но не исключает самый известный способ для полного "залечивания" - нужно совмещать хэштаблицу и сбалансированное дерево, что сведёт худший случай к O(LOG(N)) в статейке выше есть красивая попытка ещё более усложнить задачу атаки на хэш, но предсказать ошибки в её дееспособности я не могу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2019, 12:29 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)это усложняет, но не исключает А какая хеш-функция, по дефолту, там используется? Seed они добавили сильно позже чем стало известно о таких атаках, наверняка делали с учётом новых реалий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2019, 12:40 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
Скорость QHash сопоставима с TDictionary. Добавление в QHash медленнее (примерно в 2 раза), зато поиск быстрее (в 2 - 3 раза). Цикл for (int i = 0; i < 1000000; ++i) { dict.contains(i); выполняется примерно 60 мс (при Debug) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2019, 15:15 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyА какая хеш-функция, по дефолту, там используется? Seed они добавили сильно позже чем стало известно о таких атаках, наверняка делали с учётом новых реалий.я с Qt на вы, не ковырял реализацию, но принципиально это не поможет при определённом желании с другой стороны - Qt графическая библиотека и не для серверов, с какого ляду кому-то нагружать свой же комп В гуи обычно проблемы когда нужно копировать из одной таблицы в другую, тогда например тот же TDictonary замедлится чудовищно, из-за одинаковых хэш-функций и взаимнопростых делителей. Достаточно поменять что-то одно и всё будет летать - делитель поменять сложно(фактически переписать реализацию), а вот другую хэш-функцию задать довольно просто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2019, 16:02 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)я с Qt на вы, не ковырял реализацию, но принципиально это не поможет при определённом желании Нашёл, что там что-то на основе PJW, правда не совсем понятно куда там seed прикрутили. А вообще, проблема с этой атакой вполне решаема. Я писал выше о SipHash, почти все на неё перешли. На один из первых вариантов lookup3 тоже была атака, однако, потом были внесены изменения и про атаки на неё больше не слышно. kealon(Ruslan)Qt графическая библиотека и не для серверов Изначально так и было, но сейчас Qt это полноценный фреймвок с очень неплохим покрытием. Да и что там нужно для серверов, умение в сокеты... kealon(Ruslan)когда нужно копировать из одной таблицы в другую, тогда например тот же TDictonary замедлится чудовищно, из-за одинаковых хэш-функций и взаимнопростых делителей. Достаточно поменять что-то одно и всё будет летать - делитель поменять сложно(фактически переписать реализацию), а вот другую хэш-функцию задать довольно просто. Достаточно искоробочную функцию инициализировать рандомно . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2019, 16:34 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), перевод этот читал раньше, сильные чувства обуревали меня: ) замешаны в кучу правда, догадки, игнор очевидного и странные экперименты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2019, 17:05 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyDmSer, А если обеим таблицам предварительно размер установить ? В QT чуть быстрее стало, однако каждый замер отличается очень большим разбросом, поэтому не могу сказать конкретно, на сколько быстрее, может процентов на 10. Стало в среднем 600 мс. В Delphi стало явно быстрее: 400->280 мс (Debug) и 300->234 мс (Release), причем при каждом замере разброс получается минимальным. Видимо, благодаря замечательному менеджеру памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2019, 17:36 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
DmSer, Похоже, таблицы там используют метод цепочек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2019, 17:58 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexeykealon(Ruslan)когда нужно копировать из одной таблицы в другую, тогда например тот же TDictonary замедлится чудовищно, из-за одинаковых хэш-функций и взаимнопростых делителей. Достаточно поменять что-то одно и всё будет летать - делитель поменять сложно(фактически переписать реализацию), а вот другую хэш-функцию задать довольно просто. Достаточно искоробочную функцию инициализировать рандомно . это и есть "поменять хэш-функцию". seed другой -> распределение - другое ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2019, 18:18 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39809522&tid=2039517]: |
0ms |
get settings: |
8ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
403ms |
get topic data: |
13ms |
get forum data: |
4ms |
get page messages: |
83ms |
get tp. blocked users: |
2ms |
| others: | 252ms |
| total: | 788ms |

| 0 / 0 |
