Frage

  

Timsort ist ein adaptives, stabil,   natürlicher mergesort. Es hat übernatürliche   Leistung auf viele Arten von teilweise   geordnete Anordnungen (weniger als lg (N!)   Vergleiche benötigt, und so wenig wie   N-1), doch so schnell wie Pythons vorherige   stark getunten Samplesort Hybrid auf   Random-Arrays.

Haben Sie gesehen Timsort außerhalb von CPython verwendet? Ist es sinnvoll?

War es hilfreich?

Lösung

Ja, es macht ziemlich viel Sinn in bestimmten Timsort außerhalb von CPython, zu verwenden, oder Python, im Allgemeinen.

Es gibt derzeit eine Anstrengungen im Gange Javas „modifizierte merge zu ersetzen Art“mit Timsort, und die ersten Ergebnisse sind sehr positiv.

Andere Tipps

Der Algorithmus ist ziemlich allgemein, aber die Vorteile sind eher Python-spezifisch. Im Gegensatz zu den meisten Sortierroutinen, was Python List.Sort (das ist, was Timsort verwendet) kümmert sich um sich unnötige Vergleiche zu vermeiden, da in der Regel Vergleiche sind ein Los teurer als Gegenstände tauschen (das ist immer nur eine Reihe von Zeiger Kopien) oder sogar einige zusätzliche Zuweisung von Speicher (weil es immer ist nur ein Array von Zeigern, und der Aufwand ist klein im Vergleich zu dem durchschnittlichen Aufwand in jedem Python-Betrieb.)

Wenn Sie unter ähnlichen Einschränkungen sind, dann kann es geeignet sein. Ich habe noch anderen Fall zu sehen, wo Vergleiche sind wirklich so teuer, aber: -)

Es sieht nicht besonders vertraut, aber „smart“ mergesorts sind ziemlich häufig draußen in der weiten Welt der Software.

Als ob es Sinn macht, das hängt davon ab, was Sie Sortieren und die relativ Kosten von Vergleich vs. Speicherzuweisung. Eine Art, die 2 * N Bytes zusätzlicher Speicher erfordert up ist keine gute Wahl in einem Speicher-eingeschränkte Umgebung sein wird.

Beantwortet jetzt auf Wikipedia : Timsort wird in Java 7 verwendet werden, die es von Android kopiert.

Die Beschreibung, die Sie verknüpft sieht ganz allgemein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top