Я хочу реализовать метод быстрого марширования для Inpainting в Python. В литературе это было реализовано с использованием мини-кучи. Так как это связано с добавлением, удалением и переупорядочением структуры данных много раз и каждый раз при извлечении наименьшего элемента. Поэтому сложность этих операций должна быть минимальной.мини-куча с пользовательскими типами данных Python?
Я знаю, что есть встроенный модуль heapq
в Python. Он принимает одно значение float
. Тем не менее, мне нужно сохранить 3 разных информационных содержимого, соответствующих пикселю. Есть ли способ, я могу настроить heapq
, чтобы принять список, возможно?
В качестве альтернативы, существует ли другая структура данных с этой функциональностью?
Thanks Martijin! Это очень помогает! Что касается богатых методов сравнения, вызывает ли метод вызов, когда я использую оператор вместо явно 'x .__ lt __ (y)', где 'x' и' y' являются экземплярами? Я попробовал. Скажем, 'x' - мой экземпляр. И когда я передаю 'y' как' int' или какой-либо другой тип данных, я получаю 'NotImplemented' только тогда, когда я явно вызываю метод:' x .__ lt __ (1) '. Если вместо этого я говорю «x <1», я получаю «True» или «False». Я делаю что-то неправильно здесь? – Chintak
Да, для этого нужны крючки; для вашего пользовательского класса подключиться к стандартным операторам. Когда 'x .__ lt __ (y)' возвращает 'NotImlemented', Python также будет использовать обратный' y .__ ge __ (x) ', а * it * все равно может возвращать' True' или 'False'. –
Я не уверен, что я полностью следую за вами здесь. Что, если я передаю 'y' как' int'? В этом случае он не имеет 'y .__ ge __ (x)'. Кроме того, не является ли «истинным» или «ложным» неправильным решением? Так как 'other' и' self' не одного типа. – Chintak