Здравствуйте, vopl, Вы писали:
V>для получения бОльшей эффективности — у алгоритма переработки должна быть 'особенность' (an explicit nested loop), которая при сопряжении с букетным представлением может дать профит. Нет особенности — нет профита.
Да, разумеется, в этом и суть.
Если бы не требовалось добавлять второй цикл, то и сам bucket interface не потребовался бы, так как обычные итераторы могли бы внутри всё что надо использовать и работать быстрее (в этих самых специфичных случаях).
Здравствуйте, vopl, Вы писали:
V>На с++ можно все эти три абстракции реализовать с нулевой одинаковой стоимостью для себжевого случая — перебора элементов хэш-таблицы.
Можно.
Сам итератор для hash table еще как-то можно завернуть в state machine. Коряво, но можно.
Но вот если брать весь набор операций итератора: advance_next(), fetch_current_value() и сравнение двух таких state machines (с тем же самым загадочным end())
то всё это выливается в продемонстрированную реальную проблему.
Здравствуйте, c-smile, Вы писали:
CS>Здравствуйте, vopl, Вы писали:
V>>На с++ можно все эти три абстракции реализовать с нулевой одинаковой стоимостью для себжевого случая — перебора элементов хэш-таблицы.
CS>Можно.
CS>Сам итератор для hash table еще как-то можно завернуть в state machine. Коряво, но можно.
CS>Но вот если брать весь набор операций итератора: advance_next(), fetch_current_value() и сравнение двух таких state machines (с тем же самым загадочным end()) CS>то всё это выливается в продемонстрированную реальную проблему.
Хм.. Наверное мы говорим о разных вещах. Я вот утверждаю что никакой проблемы нет. И в данном топике не видел чтобы была продемонстрирована какая то проблема. О чем речь? Покажи проблему?
Здравствуйте, c-smile, Вы писали:
V>>На с++ можно все эти три абстракции реализовать с нулевой одинаковой стоимостью для себжевого случая — перебора элементов хэш-таблицы.
CS>Можно. CS>Сам итератор для hash table еще как-то можно завернуть в state machine. Коряво, но можно.
Да вроде тривиально. По сути это итерация списка списков: обходишь бакеты по порядку и в каждом из них обходишь элементы.
CS>то всё это выливается в продемонстрированную реальную проблему.
Выливается это в проблему если таблица распухшая и подавляющее большинство бакетов пустое, а посетить придётся каждый. В такой ситуации boolean[32000] может оказаться гораздо эффективнее. А если запаковать побитово, то int32[32000/32] — вообще залетает.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай