I spreizen Baum implementiert haben (Einfügen, Suchen, Löschen-Betrieb) in Java. Jetzt möchte ich überprüfen, ob die Komplexität des Algorithmus O (logn) ist oder nicht. Gibt es eine Möglichkeit, dies zu überprüfen, indem Sie die Eingabewerte (Anzahl der Knoten) variieren und die Laufzeit in Sekunden überprüfen? Sagen wir, indem wir Eingabewerte wie 1000, 100000 setzen und die Laufzeit überprüfen oder gibt es andere Wege?Überprüfung der Komplexität der Splay-Baum Betrieb in Java
Antwort
Streng genommen können Sie die zeitliche Komplexität des Algorithmus nicht finden, indem Sie ihn für einige Werte von n
ausführen. Angenommen, Sie haben es für die Werte n_1, n_2, ..., n_k
ausgeführt. Wenn der Algorithmus n^2
Operationen für alle n <= max(n_1, ..., n_k)
und genau 10^100
Operationen für einen größeren Wert von n
macht, hat er eine konstante Zeitkomplexität, obwohl er von den Punkten, die Sie haben, wie eine quadratische aussehen würde.
Sie können jedoch die Anzahl der Operationen beurteilen sie auf einen Eingang einer Größe in Anspruch nimmt n
(ich würde es nicht einmal nennen Zeitkomplexität hier, da diese eine strenge formale Definition hat), indem Sie auf einige Werte laufen von n
und bei Verhältnissen T(n1)/T(n2)
und n1/n2
suchen. Aber selbst im Falle eines "echten" Algorithmus (in dem Sinne, dass es sich nicht um einen pathologischen Fall handelt, der im ersten Absatz beschrieben wird), sollten Sie vorsichtig mit der "Struktur" der Eingabe umgehen (zum Beispiel einen schnellen Sortieralgorithmus, der den Das erste Element als Pivot wird im Durchschnitt in O(n log n)
für eine zufällige Eingabe ausgeführt, so dass es wie ein O(n log n)
aussehen würde, wenn Sie zufällige Arrays unterschiedlicher Größe generieren würden, jedoch unter O(n^2)
für ein umgekehrt sortiertes Array.
Um es zusammenzufassen, wenn Sie herausfinden müssen, ob es aus praktischer Sicht schnell genug ist und Sie eine Idee haben, wie eine typische Eingabe für Ihren Algorithmus aussieht, können Sie versuchen, Eingaben unterschiedlicher Größe zu generieren wie die Ausführungszeit wächst.
Wenn Sie jedoch eine mathematische Grenze für die Laufzeit benötigen, müssen Sie einige Eigenschaften und Grenzen Ihres Algorithmus mathematisch nachweisen.
In Ihrem Fall würde ich sagen, dass das Testen auf zufällige Eingaben eine vernünftige Idee sein kann (weil es einen mathematischen Beweis gibt, dass die Zeitkomplexität eines Vorgangs O(log n)
für einen Splay-Baum ist), also müssen Sie das nur überprüfen Der von Ihnen implementierte Baum ist in der Tat ein korrekter Splay-Tree. Eine Anmerkung: Ich würde empfehlen, verschiedene Muster von Abfragen (wie das Einfügen von Elementen in sortierter/umgekehrter Reihenfolge usw.) zu versuchen, da sogar unausgeglichene Bäume ziemlich schnell arbeiten können, solange die Eingabe "zufällig" ist.
- 1. Reduzierung der zyklomatische Komplexität einer Java-Methode
- 2. Komponententests zur Überprüfung der Zeitkomplexität
- 3. Arrays.fill Komplexität in Java
- 4. Rechnerische Komplexität von TreeSet-Operationen in Java?
- 5. Platz Komplexität der Listenerstellung
- 6. Komplexität der Menge :: Einfügen
- 7. Komplexität der Binärbaumsuche
- 8. Komplexität der Graph-Traversierung
- 9. Komplexität der Vergleichsoperatoren
- 10. Zeit Komplexität der Programme
- 11. Zeit Komplexität der Permutationsfunktion
- 12. Heapsort - Komplexität der Implementierung
- 13. Komplexität der Teilmenge Produkt
- 14. Verständnis der Zeit Komplexität
- 15. Java Collection addAlle Komplexität
- 16. Bibliothek zur Überprüfung der Kennwortstärke
- 17. Verbesserung der Laufzeit Komplexität der Einfügesortierung?
- 18. Bewährte Methode zur Überprüfung der Null- und Leersammlung in Java
- 19. Überprüfung der Gleichheit von zwei Strings in Java
- 20. Überprüfung der Gleichheit von drei oder mehr Strings in Java
- 21. Welche Komplexität hat der BigInteger von Java 7?
- 22. Verständnis der Zeit Komplexität der Matrix-Lösung
- 23. Verständnis der Zeit Komplexität der angegebenen Code
- 24. Überprüfung der Objektgleichheit in Jasmine
- 25. Überprüfung der Prüfsumme in Hadoop
- 26. Überprüfung der Schaltfläche in tkinter?
- 27. Erzwingen der Überprüfung in Aurelia
- 28. Überprüfung der Objektlänge in Javascript
- 29. Java einfache Anwendung Komplexität
- 30. Zeit Komplexität der Hash-Tabelle
überprüfen Sie diese http://stackoverflow.com/questions/19617468/program-to-fnd-time-complexity-of-a-java-program – Kranthi
das ist anders als meine Frage @Kranthi – user7064921