Алгоритм дерева суффиксов Укконена на простом английском

Каждая реализация языка языка Python может свободно создавать свои собственные компромиссы при распределении неизменяемых объектов (например, строк) - либо создавать новую, либо находить существующий равный, либо использовать еще один ссылаясь на него, прекрасно подходят с точки зрения языка. На практике, конечно, реализация в реальном мире требует разумного компрометации: еще одна ссылка на подходящий существующий объект при поиске такого объекта дешева и проста, просто создайте новый объект, если задача поиска подходящего существующего (который может или может не существовать) выглядит так, что потенциально может потребоваться длительный поиск.

Так, например, множественные вхождения одного и того же строкового литерала в пределах одной функции (во всех реализациях, которые я знаю) используют " новая ссылка на тот же объект ", потому что при создании константы-пула этой функции довольно быстро и легко избежать дубликатов; но выполнение этого через отдельные функции потенциально может быть очень трудоемкой задачей, поэтому реалии реального мира либо вообще не делают этого, либо только делают это в некоторых эвристически определенных подмножествах случаев, когда один может надеяться на разумный компромисс между временем компиляции (замедленным путем поиска идентичных существующих констант) и потреблением памяти (увеличивается, если сохраняются новые копии констант).

Я не знаю никакой реализации Python (или, на самом деле, другие языки с постоянными строками, такие как Java), которые не могут идентифицировать возможные дубликаты (для повторного использования одного объекта через несколько ссылок) при чтении данных из файла - это просто не похоже многообещающий компромисс (и здесь вы будете платить runtime , а не компилировать время, поэтому компромисс еще менее привлекателен). Конечно, если вы знаете (благодаря соображениям уровня приложения), что такие неизменные объекты большие и вполне подвержены многим дублированиям, вы можете легко реализовать свою стратегию «константы-пул» ( intern может помочь вы делаете это для строк, но нетрудно сворачивать свои собственные, например, кортежи с неизменяемыми элементами, огромные длинные целые числа и т. д.).

1039
задан Nathan Ridley 27 October 2018 в 21:44
поделиться