Re[5]: QSet, скорость перебора контейнера
От: watchmaker  
Дата: 17.08.18 14:57
Оценка:
Здравствуйте, vopl, Вы писали:

V>для получения бОльшей эффективности — у алгоритма переработки должна быть 'особенность' (an explicit nested loop), которая при сопряжении с букетным представлением может дать профит. Нет особенности — нет профита.

Да, разумеется, в этом и суть.
Если бы не требовалось добавлять второй цикл, то и сам bucket interface не потребовался бы, так как обычные итераторы могли бы внутри всё что надо использовать и работать быстрее (в этих самых специфичных случаях).
Re[3]: QSet, скорость перебора контейнера
От: c-smile Канада http://terrainformatica.com
Дата: 17.08.18 17:32
Оценка:
Здравствуйте, vopl, Вы писали:

V>На с++ можно все эти три абстракции реализовать с нулевой одинаковой стоимостью для себжевого случая — перебора элементов хэш-таблицы.


Можно.

Сам итератор для hash table еще как-то можно завернуть в state machine. Коряво, но можно.

Но вот если брать весь набор операций итератора: advance_next(), fetch_current_value() и сравнение двух таких state machines (с тем же самым загадочным end())
то всё это выливается в продемонстрированную реальную проблему.
Re[4]: QSet, скорость перебора контейнера
От: vopl Россия  
Дата: 18.08.18 08:01
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Здравствуйте, vopl, Вы писали:


V>>На с++ можно все эти три абстракции реализовать с нулевой одинаковой стоимостью для себжевого случая — перебора элементов хэш-таблицы.


CS>Можно.


CS>Сам итератор для hash table еще как-то можно завернуть в state machine. Коряво, но можно.


CS>Но вот если брать весь набор операций итератора: advance_next(), fetch_current_value() и сравнение двух таких state machines (с тем же самым загадочным end())

CS>то всё это выливается в продемонстрированную реальную проблему.

Хм.. Наверное мы говорим о разных вещах. Я вот утверждаю что никакой проблемы нет. И в данном топике не видел чтобы была продемонстрирована какая то проблема. О чем речь? Покажи проблему?
Re[4]: QSet, скорость перебора контейнера
От: · Великобритания  
Дата: 22.08.18 16:28
Оценка:
Здравствуйте, c-smile, Вы писали:

V>>На с++ можно все эти три абстракции реализовать с нулевой одинаковой стоимостью для себжевого случая — перебора элементов хэш-таблицы.


CS>Можно.

CS>Сам итератор для hash table еще как-то можно завернуть в state machine. Коряво, но можно.
Да вроде тривиально. По сути это итерация списка списков: обходишь бакеты по порядку и в каждом из них обходишь элементы.

CS>то всё это выливается в продемонстрированную реальную проблему.

Выливается это в проблему если таблица распухшая и подавляющее большинство бакетов пустое, а посетить придётся каждый. В такой ситуации boolean[32000] может оказаться гораздо эффективнее. А если запаковать побитово, то int32[32000/32] — вообще залетает.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.