Ich lerne OOP, also muss ich mit Arrays interagieren, nicht verknüpfte Liste. Ich habe Daten sortiert. Das Problem ist, ein Mitglied des Arrays zu löschen (nennen wir es DL
). Die erste Methode, die ich entwickelte, war Daten zu überschreiben i+1
zu i
beginnend mit DL
Index und verringern Sie die Menge der Lesung von 1. Später fand ich heraus, dass ich die DL
mit dem letzten Mitglied tauschen und dann die Zählvariable um 1 verringern kann Aber ich muss die Daten erneut sortieren. Also welches ist besser?Was ist der beste Weg, um ein Array-Mitglied zu löschen?
Antwort
Wenn es sortiert bleiben muss, würde ich sagen, es ist besser, es zu überschreiben, indem Sie jedes Element nach dem Ziel zurück verschieben. Das Swappen mit dem Endelement und anschließendes Umsortieren würde mehr Arbeit erfordern, da ein Swap drei Aktionen benötigt:
1) Kopieren von Element eins in eine temporäre Variable. 2) Kopieren von Element zwei zu Element eins. 3) Kopiert das temporäre Element in Element zwei.
Und das muss mehrmals in einem Sortieralgorithmus wiederholt werden. Und wenn Sie mit einem Array von Objekten einer Struktur oder Klasse mit mehreren privaten Datenelementen arbeiten, erhöht sich die Arbeitslast noch mehr.
Die Überschreibungs nimmt weniger bewegt pro Iteration:
1) i + 1
-i
Kopieren.
Also, definitiv gehen mit dem Überschreiben, indem Sie alle Elemente zurück eins und abnehmende Anzahl um eins.
In jedem Fall ist es wahrscheinlich am besten, beide mit Ihrem spezifischen Datensatz zu synchronisieren und zu sehen, welcher schneller ist. Dies ist sehr einfach, indem Sie die Millisekunden zwischen Start und Ende Ihrer Implementierung zählen.
"Besser" ist ein sehr subjektiver Begriff und welcher ist geeigneter (für welche Definition Sie auch wählen) hängt sehr von der Art von Datensätzen ab, über die Sie sprechen (Größe, usw.).
Aber ich werde das erwähnen, die relativen Zeitkomplexitäten von Array Shuffle und die meisten "regulären" Sortierungen sind O(n)
bzw. O(n log n)
.
Das bedeutet, dass der Shuffle in den allermeisten Fällen wahrscheinlich schneller ist.
Danke, ich habe den Titel editiert. –
- 1. Was ist der beste Weg, um ein Verzeichnis zu leeren?
- 2. Der beste Weg, um ein UITextField zu löschen
- 3. Was ist der beste Weg, Zeit mit Moment.js zu löschen?
- 4. Was ist der beste Weg, Plones CSS-Cache zu löschen?
- 5. Android, Was ist der beste Weg, um AbstractThreadedSyncAdapter zu töten?
- 6. Was ist der beste Weg, um ein Array von Strings zu löschen?
- 7. Was ist der beste Weg, um ein übergeordnetes Dokument in Mungo zu löschen?
- 8. Was ist der beste Weg, um Datei mit der Bedingung
- 9. Was ist der beste Weg, um ein Zählerfeld in MySQL
- 10. Was ist der beste Weg, um ein "Passwort vergessen?" Seite?
- 11. Was ist der beste Weg, um mit OSGI zu beginnen?
- 12. Was ist der beste Weg, um einen "Timer" zu implementieren?
- 13. Was ist der beste Weg, um srand() zu säen?
- 14. Was ist der beste Weg, um mehrere Aktionen zu behandeln?
- 15. Was ist der beste Weg, um eine Tabelle zu deduplizieren?
- 16. Was ist der beste Weg, um eine Animation zu fahren?
- 17. Was ist der beste Weg, um eine Enumeration zu erhöhen?
- 18. Was ist der beste Weg, um dieses Programm zu wiederholen?
- 19. Was ist der beste Weg, um einen ByteArrayOutputStream zu schließen?
- 20. was ist der beste Weg, um Sitemap zu generieren
- 21. Was ist der beste Weg zu
- 22. Was ist der beste Weg, um einen Datenrahmen zu umgehen?
- 23. Was ist der beste Weg, um vorberechnete Daten zu implementieren?
- 24. bash - Was ist der beste Weg, um Ergebnisse zu zählen?
- 25. Was ist der beste Weg, um ähnliche Strings zu bearbeiten?
- 26. Was ist der beste Weg, um eine Eigenschaft zu deklarieren?
- 27. Was ist der beste Weg, um in C++ zu casten?
- 28. Was ist der beste Weg, um jQuery zu lernen?
- 29. Was ist der beste Weg, um innere Produkte zu bilden?
- 30. Was ist der beste Weg, um JavaScript-Funktionen zu trennen?
Wie groß sind die Arrays? Welche Art von Daten sind in ihnen? Kann es gemerkt werden? Haben Sie darüber nachgedacht, beides zu versuchen und zu profilieren? –
Ich bin so sehr müde von diesem zufälligen Downvoting von Posts, die es anscheinend nicht brauchen. Er stellte eine vollkommen gültige Frage, keine Notwendigkeit, darüber gemobbt zu werden. –
Meine Schuld, Trung, erkannte ich (verspätet), dass es wahrscheinlich das "Lernen" war, das dazu führte, dass Sie verknüpfte Listen diskontieren, nicht etwas, das OOP innewohnt - ich habe meinen Kommentar entfernt. – paxdiablo