Wirkungsgrad von 100 m RG213U

Am 04.11.2023 um 11:01 schrieb Rolf Bombach:

Besten Dank für die Info. Muss mich bei Gelegenheit drum kümmern.

Reply to
Christoph Müller
Loading thread data ...

snipped-for-privacy@zedat.fu-berlin.de (Stefan Ram) schrieb oder zitierte:

Hier gerade erlebt:

Ich habe verschachtelte Schleifen in Python um zu sehen, ob ein Name aus einer Reihung einem Namen aus einer anderen Reihung gleicht:

for to_name in to_names: for from_name in from_names: if from_name == to_name: error()

Dann folgt noch eine anderen Schleife, um zu sehen, ob ein Name in einer Reihung mehrfach vorkommt

for i, to_name in enumerate( to_names ): for i_, to_name_ in enumerate( to_names ): if i != i_: if to_name == to_name_: error()

. Bei Tests zeigte sich, daß diese Schleifen bei großen Reihungen sehr viel Zeit brauchen. Python ist langsam, und die verschachtelten Schleifen haben quadratische Laufzeit.

Nun kann man in Python aber beide Schleifen so umschreiben, daß sie lesbarer und schneller sind, weil man dann nur noch Bibliotheksfunktionen aufruft, die in C geschrieben wurden, und vielleicht auch effizientere Algorithmen verwenden:

if set( to_names ).intersection( set( from_names )): error() if len( to_names )> len( set( to_names )): error()

. Das heißt: Es gibt einen from-Namen, der einem to-Namen gleicht, sobald die Schnittmenge der Menge der from-Namen und der Menge der to-Namen nicht leer ist. Und es gibt mindestens einen Namen, der doppelt in der Reihung der to-Namen vorkommt, wenn die Reihung mehr Einträge enthält als die daraus gewonnene Menge.

Während man bei der Ausführung der Schleifen das Gefühl hatte, das Programm sei abgestürzt, weil es nicht mehr weiterläuft, sind die neuen mengenbasiertes Tests so schnell, daß sie keine wahrnehmbare Laufzeit mehr benötigen.

Das heißt: Wenn man sich mit einigen Techniken vertraut macht, dann kann man bestimmte Dinge so schreiben, daß die Langsamkeit von Python umgangen wird.

Reply to
Stefan Ram

[...]

C ist heutzutage praktisch unschlagbar schnell, besonders gegenüber Interpretern. Ich hatte deshalb meine universelle Shell 'bish' so entwickelt, daß sie im Überblick ungefähr 25-fach schneller ist, als die meisten anderen Shells. Ich muß folglich keinerlei Maßnahmen treffen, um die 'bish' schneller zu machen. Ich verwende deshalb als Interpreter seit langem nur noch meine 'bish'.

Reply to
Helmut Schellong

Hallo Stefan,

Du schriebst am 1 Mar 2024 13:25:04 GMT:

[verschachtelte Schleifen in Python vs. "mengenbasierte Tests"]

Dabei hast Du "einfach" einen, gewissermaßen naïven, Algorithmus durch einen vollkommen anders gearteten ersetzt, der dem Problem besser angepasst ist, was sich dann halt auch in der Ausführungszeit ausdrückt.

Wenn man den richtigen bzw. einen dem Problem angepassten Algorithmus benutzt, kann man Programme schreiben, die andere, schlecht angepasste Algorithmen verwenden, in fast allen Fällen überlegen sind. Durchaus. Auch wenn in den meisten Fällen der naïve Algorithmus "gut genug" sein kann.

Reply to
Sieghard Schicktanz

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.