Всем привет,
Конструирую Key-Value структуру данных.
Поиск Log(1), Вставки Log(1)
Особенностью этой структуры есть черезвычайно высокая скорость поиска
(от 3,1 наносекунд до 50 нс занимает один поиск), высокая скорость вставок (от 5нс до 50 нс),
экономия памяти вплоть до компрессии данных,
возможность выборок по диапазону ключей (данные в структуре отсортированы).
Вопрос такой.
Что еще можно потестить из асоциативных массивов, может какая структура данных с со схожими параметрами
ускользнула из вида ?
Здравствуйте, Wolverrum, Вы писали:
W>Здравствуйте, PC_2, Вы писали:
PC_>>Поиск Log(1), Вставки Log(1)
W>Это, простихоспаде как? W>Это за 0 операций вставляется и ищется? Срочно премию получать!
Приятно, что в Эстонии тоже читают рсдн.
"Вся страна играть в футбол умеет, лишь мы 11 человек играть не умеем"(с)КВН
Re: std::map VS Dictionary.NET VS SortedDictionary.NET VS HA
Здравствуйте, PC_2, Вы писали:
PC_>Конструирую Key-Value структуру данных. PC_>Поиск Log(1), Вставки Log(1) PC_>Особенностью этой структуры есть черезвычайно высокая скорость поиска PC_>(от 3,1 наносекунд до 50 нс занимает один поиск), высокая скорость вставок (от 5нс до 50 нс), PC_>экономия памяти вплоть до компрессии данных, PC_>возможность выборок по диапазону ключей (данные в структуре отсортированы).
Протести
1. удаление
2. добавление 1 млн элементов
3. итерации по всему списку
Например hashset выдыхается на удалении, здесь у него O(N^^2) и все становится грустно.
PC_>Вопрос такой. PC_>Что еще можно потестить из асоциативных массивов, может какая структура данных с со схожими параметрами PC_>ускользнула из вида ?
Для твоих тестов это без толку. Нужно тестировать весь набор операций, что бы знать, в каких случаяхможно использовать твой контейнер
Если без каких либо ограничений, то любую структуру можно свести к массиву, например с помощью дополнительного филда и это даст возможность обращаться к к любым таблицам с той же скоростью, как и к массиву. Вобщем надо больше замеров самых разных.
PC_>Бенчмарки можно глянуть здесь PC_>http://www.sql.ru/blogs/stebelek/1269
главное что бы расход памяти не был O(N^^2) Где, кстати расход памяти ?
Re[2]: std::map VS Dictionary.NET VS SortedDictionary.NET VS
Здравствуйте, Ikemefula, Вы писали:
I>Протести I>1. удаление I>2. добавление 1 млн элементов I>3. итерации по всему списку
Удаление я пока что не рассматривал,
поскольку большинство задач это Вставка и Поиск в хештаблице.
Удаление обычно ограничивается Clear.
I>Например hashset выдыхается на удалении, здесь у него O(N^^2) и все становится грустно.
Попробуй протестировать hashset на вставки.
I>Если без каких либо ограничений, то любую структуру можно свести к массиву, например с помощью дополнительного филда и это даст возможность обращаться к к любым таблицам с той же скоростью, как и к массиву. Вобщем надо больше замеров самых разных.
Нельзя, по памяти будет не оптимально для рандом значений.
PC_>>Бенчмарки можно глянуть здесь PC_>>http://www.sql.ru/blogs/stebelek/1269 I>главное что бы расход памяти не был O(N^^2) Где, кстати расход памяти ?
В колонке вроде есть расход памяти, тоже экономней расходует ...
"Вся страна играть в футбол умеет, лишь мы 11 человек играть не умеем"(с)КВН
Re[3]: std::map VS Dictionary.NET VS SortedDictionary.NET VS
Здравствуйте, roro, Вы писали:
R>Здравствуйте, PC_2
R>Сравните с Judy и Ternary Search Tree для поиска по строкам
Спасибо, только боюсь время займет скачать, настроить это все под виндовз, запустить.
Ни у кого случайно нет настроеной среды сделать простенький тест ?
Вставка/Поиск нескольких миллионов ключей.
"Вся страна играть в футбол умеет, лишь мы 11 человек играть не умеем"(с)КВН
Re[5]: std::map VS Dictionary.NET VS SortedDictionary.NET VS
Здравствуйте, PC_2, Вы писали:
PC_>Здравствуйте, roro, Вы писали:
R>>Здравствуйте, PC_2
R>>Сравните с Judy и Ternary Search Tree для поиска по строкам
PC_>Спасибо, только боюсь время займет скачать, настроить это все под виндовз, запустить. PC_>Ни у кого случайно нет настроеной среды сделать простенький тест ? PC_>Вставка/Поиск нескольких миллионов ключей.
Нашел врапер этой либы под дот нет https://github.com/dump247/JudyArray
После нескольких затяжных танцев с бубнами удалось завести сию либу.
Но результаты удручающи. В разы отстала от стандартного Dictionary.NET.
Конечно там еще обертка какойто перформенц отбирает, но не в разы же ...
"Вся страна играть в футбол умеет, лишь мы 11 человек играть не умеем"(с)КВН
Re[6]: std::map VS Dictionary.NET VS SortedDictionary.NET VS
PC_>Всем привет, PC_>Конструирую Key-Value структуру данных. PC_>Поиск Log(1), Вставки Log(1) PC_>Особенностью этой структуры есть черезвычайно высокая скорость поиска PC_>(от 3,1 наносекунд до 50 нс занимает один поиск), высокая скорость вставок (от 5нс до 50 нс), PC_>экономия памяти вплоть до компрессии данных, PC_>возможность выборок по диапазону ключей (данные в структуре отсортированы).
Выделенное ставит под вопрос O(1) для вставки. Возможно, O(1) «амортизированный»?
Здравствуйте, PC_2, Вы писали:
I>>Протести I>>1. удаление I>>2. добавление 1 млн элементов I>>3. итерации по всему списку
PC_>Удаление я пока что не рассматривал, PC_>поскольку большинство задач это Вставка и Поиск в хештаблице. PC_>Удаление обычно ограничивается Clear.
Это и половины случаев не покроет.
I>>Например hashset выдыхается на удалении, здесь у него O(N^^2) и все становится грустно.
PC_>Попробуй протестировать hashset на вставки.
Так себе.
PC_>В колонке вроде есть расход памяти, тоже экономней расходует ...
Ну значит удаление умрёт наверняка
Re[4]: std::map VS Dictionary.NET VS SortedDictionary.NET VS
Здравствуйте, Ikemefula, Вы писали:
I>Здравствуйте, PC_2, Вы писали:
I>>>Протести I>>>1. удаление I>>>2. добавление 1 млн элементов I>>>3. итерации по всему списку
PC_>>Удаление я пока что не рассматривал, PC_>>поскольку большинство задач это Вставка и Поиск в хештаблице. PC_>>Удаление обычно ограничивается Clear.
I>Это и половины случаев не покроет.
Ну а каких случаев ? Почему так важно удаление ?
В нашей рабочей СУБД данные удаляются очень редко, они просто архивируются и база живет дальше.
Также чтобы построить движок фул текст энжин, тоже удаление не нужно.
Чтобы посчитать количество уникальных значений, отсортировать чтото — удаление не нужно.
И так далее. Из операций Вставка/Поиск/Память/Удаление, само по себе Удаление менее всего интересно
как операция.
Но если интересно удаление, то пока происходит обычное разрежение структуры данных за О(1) время.
При разрежении может оказаться, что некоторые страницы памяти пусты. Они удаляются и тогда уже высвобождается память.
Структуру данных можно перестроить, чтото вроде шринка в обычных СУБД.
"Вся страна играть в футбол умеет, лишь мы 11 человек играть не умеем"(с)КВН
Re[5]: std::map VS Dictionary.NET VS SortedDictionary.NET VS
Здравствуйте, PC_2, Вы писали:
I>>Это и половины случаев не покроет.
PC_>Ну а каких случаев ? Почему так важно удаление ?
Потому что память пока что не бесконечная и GC требует больших затрат времени. У меня например структуры где требуется доступ по ключу, живут почти все время, что и приложение.
PC_>Но если интересно удаление, то пока происходит обычное разрежение структуры данных за О(1) время. PC_>При разрежении может оказаться, что некоторые страницы памяти пусты. Они удаляются и тогда уже высвобождается память. PC_>Структуру данных можно перестроить, чтото вроде шринка в обычных СУБД.
У тебя шота все за O(1), чтото не так с тестами. Код тестов ты не выкладывал ?