timsort является общего назначения или определенным для Python?

Это зависит от ваших требований. Если IPet достаточно прост, я бы предпочел реализовать это. В противном случае, если PetBase реализует тонну функциональности, которую вы не хотите дублировать, тогда у нее есть.

Недостатком реализации базового класса является требование к override (или new) существующему методы. Это делает их виртуальными методами, что означает, что вы должны быть осторожны с тем, как вы используете экземпляр объекта.

Наконец, единственное наследование .NET убивает меня. Наивный пример: предположим, что вы создаете пользовательский элемент управления, поэтому вы наследуете UserControl. Но теперь вы заблокированы и наследуете PetBase. Это заставляет вас реорганизовать, например, чтобы создать член класса PetBase.

32
задан SilentGhost 2 July 2009 в 16:48
поделиться

4 ответа

Да, имеет смысл использовать timsort вне CPython, в частности, или Python в целом.

В настоящее время ведется работа заменить "модифицированную сортировку слиянием" в Java на timsort, и первоначальные результаты весьма положительны.

30
ответ дан 27 November 2019 в 20:26
поделиться

Это не выглядит особенно знакомым, но "умные" сортировки с объединением довольно распространены в широком мире программного обеспечения.

Что касается того, имеет ли это смысл, который зависит от того, что Вы сортируете, и относительная стоимость сравнений по сравнению с выделением памяти. Вид, который требует до 2*N байты дополнительной памяти, не будет хорошим выбором в ограниченной памятью среде.

6
ответ дан 27 November 2019 в 20:26
поделиться

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

, Если Вы являетесь объектом подобных ограничений, затем это может подойти. Я должен все же видеть любой другой случай, где сравнения являются действительно настолько дорогими, хотя :-)

24
ответ дан 27 November 2019 в 20:26
поделиться

Описание Вы связали абсолютно общие взгляды.

0
ответ дан 27 November 2019 в 20:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: