Мне нужен способ найти минимальное значение в словаре, полном объектов Node, за O (1) время или действительно любое сублинейное время, если это возможно.
Вот пример того, что мне нужно :
'''
Nodes have 4 attributes:
- stack
- backwards
- forwards
- total_score
'''
dict = {str(Node1.stack): Node1,
str(Node2.stack): Node2, ... } # note that keys are the stacks as strings
key, smallest = min(frontier.items(), key=lambda pair: pair[1].total_score)
( ^^^ something better than this! ^^^ )
Последняя строка выше (ключ, наименьшее ...) - это то, что у меня есть. Работает нормально, но слишком медленно. Я читал в Интернете, что функция min () занимает время O (n). У меня много узлов для обработки, поэтому что-то более быстрое было бы удивительно.
edit Должно быть упомянуто ранее, но это выполняется внутри алгоритма A * - граница обновляется динамически. Мне нужно выполнить следующие операции:
- Найти минимум в O (1) или, по крайней мере,
- Обновить значения указанных элементов c быстро
- легкий доступ к атрибутам