Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Bei der letzten Variante habe ich auch einen Scheck dafür ausgestellt. Wer es braucht, kann es nutzen.
Richtig. Aber woher wissen wir, dass die bereitgestellten Algorithmen keine Leerstellen hinterlassen? Die Prüfsumme beweist es nicht. Auch die Anzahl der Elemente spielt keine Rolle. Schließlich zählt die Funktion die Elemente, die vor der Größenänderung des Arrays vorhanden waren.
In fast allen vorgestellten Fällen wird dies ohne Probleme durch das Senden einer Abfrage mit NULL umgesetzt.
Es gibt noch eine weitere Anforderung an den Algorithmus - die korrekte Platzierung von Elementen innerhalb des Arrays nach dem Entfernen unnötiger Elemente. Diese Prüfung muss zuvor durchgeführt worden sein. Dann wird die Geschwindigkeit überprüft.
Der Code erklärt, welche davon was zurückgeben. Es gibt gemischte Arrays. Sie befinden sich in einem anderen Bereich.
P.S. Und nur fürs Protokoll. Meine Funktion hat einige Prüfungen, aber sie werden nicht verwendet. Aber das alles und noch viel mehr hat sie bereits.
Ich stelle die Professionalität der Teilnehmer und ihrer Plätze nicht in Frage. Ich habe lediglich auf einen Fehler in der Prüfsummenüberprüfung hingewiesen und auf die Notwendigkeit einer zusätzlichen Überprüfung der Richtigkeit der Anordnung der Elemente in der neuen Anordnung.
Wenn das alles stimmt, habe ich verdientermaßen den vorletzten Platz belegt.
In meiner Praxis mache ich mir selten Gedanken über die Geschwindigkeit bestimmter Vorgänge. Mir geht es mehr um die Prägnanz und Klarheit der Lösung. Es hat mich überrascht, dass dieser Eintrag
if(Arr[q]==val){deleted++; q--;}
könnte langsam sein.
Aber wenn wir ein weiteres Kriterium für die Bewertung von Algorithmen hinzufügen - die Kompaktheit der Lösung - bin ich wahrscheinlich an erster Stelle.
Wenn man die beiden Kriterien - Geschwindigkeit und Komprimierung - kombiniert und den Durchschnittswert des Algorithmus berechnet, dann nehme ich einen höheren Platz in der Tabelle ein.
Fedoseyevs Version ist allerdings noch komprimierter als meine.Wenn man jedoch ein weiteres Kriterium zur Bewertung von Algorithmen hinzufügt, nämlich die Lösungskomprimierung, liege ich wahrscheinlich an erster Stelle.
Ihre Version der Hauptschleife:
und das ist das von Fedoseyev:
Beide Varianten bewirken das Gleiche. Wer hat die meiste Prägnanz?
Ihre Version des Hauptzyklus:
und das ist das von Fedoseyev:
Beide tun das Gleiche. Wer hat die prägnanteste?
Er. Er hat es anstelle von...
for(;i<sz;i++)
Das ist prägnanter.)
Das hat er. Er hat es anstelle von...
Das ist prägnanter.))
Das Gleiche gilt für den Compiler.
Sie haben einfach eine Menge unnötiger Dinge, so dass sie langsamer arbeiten als alle anderen (ich ziehe nicht einmal die erste Option des Themas in Betracht).
Fedoseyevs Code hat eine Prüfung, eine Zuweisung und ein Inkrement in einem Schleifendurchlauf (ich zähle Prüfungen und Inkremente für die Schleifenorganisation nicht mit).
Im Gegensatz dazu haben Sie zwei Prüfungen, eine Summe von zwei Variablen, drei Inkremente und eine Zuweisung.
Es bleibt nur zu hoffen, dass der Compiler optimiert, sonst wird ArraySize bei jeder Iteration ausgeführt.
Es bleibt nur zu hoffen, dass der Compiler optimiert, sonst wird ArraySize bei jeder Iteration ausgeführt.
Ja, der Compiler scheint zu prüfen, ob sich die Größe des Arrays in der Schleife nicht ändert, und ersetzt diese Funktion selbständig durch einen Wert und berechnet diese Funktion nur einmal.
Auf jeden Fall, wenn Sie das tun:
wird sich die Ausführungszeit der Funktion nicht ändern.
Aus Gründen der Kompaktheit ist es also sinnvoll, es genau so zu schreiben, wie Peter es getan hat :)
Aber ich stimme zu, mir persönlich brennt es auch in den Augen. Es fühlt sich an, als würde die Funktion jedes Mal aufgerufen werden.
Aber ich stimme zu, mich persönlich schreckt das auch ab. Es fühlt sich an, als würde die Funktion jedes Mal aufgerufen werden.
imho ist es besser, dem Compiler keine Wahl zu lassen)
Lassen Sie mich Ihnen eine Frage stellen,
if(Anzahl>6) { ArrayCopy
mehr als sechs - ist der Wert nach wissenschaftlichem Bauchgefühl ermittelt worden oder gibt es eine Begründung dafür?)Imho ist es besser, dem Compiler keine Wahl zu lassen)
Lassen Sie mich Ihnen eine Frage stellen,
if(Anzahl>6) { ArrayCopy
mehr als sechs - der Wert wird durch ein wissenschaftliches Bauchgefühl ermittelt, oder was ist die Begründung dafür?)Ja, das ist genau das Richtige. Die Methode des wissenschaftlichen Bauchgefühls. Nach meinen Beobachtungen sind es zwischen 5 und 8. Sie können diesen Vorgang automatisieren, indem Sie diese Zahl jedes Mal automatisch einstellen. Schließlich kann diese Zahl für verschiedene Prozessoren und Systeme unterschiedlich sein.
Wenn Sie zum Beispiel alle ArrayCopy und ArrayFill in der CCanvas-Klasse nach diesem Prinzip ändern, können Sie einen schönen Gewinn an Geschwindigkeit der Leinwand erhalten.