JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.phpMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

List und Vector
Gehe zu Seite Zurück  1, 2
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
HotAcid
Super JLI'ler


Alter: 43
Anmeldedatum: 04.08.2002
Beiträge: 372
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 10.01.2004, 20:27    Titel: Antworten mit Zitat

@Lord: weil bei Vector die Iteratoren nur intern benutzt werden. Als Benutzer bekommst du davon nicht viel mit Wink

@LeeDiGer: Das mit der Komplexität stimmt so nicht ganz...

alle Angaben in der Form vector / list

Einfügen und Entfernen:

vorne: O(n) / O(1)
Hinten: O(1) / O(1)
Mitte: O(n) / O(1)

Zugriff:

erstes: O(1) / O(1)
letztes: O(1) / O(1)
mittleres: O(1) / O(n)


Also kann man sagen, dass du list benutzen soltest, wenn du häufig Daten änderst. Wenn du nur auf die Elemente zugreifen willst, wäre ein vector angebracht.

Bei kleinen Datemengen ist das noch ziemlich egal, aber für größere Werte können sich da die Laufzeiten doch schon stark unterscheiden. Ich habe das mal getestet(bzw. als Hausaufgabe machen dürfen Wink , da sollten wir eine Liste mit 13.000 Elementen einmal mit BubleSort (Aufwand: O(n^2) ) und dann mit QuickSort (Aufwand: O(n*log(n) ) ) sortieren. BubbleSort hat etwa eine Minute gebraucht, QuickSort nicht mal eine Sekunde! Übrigens, das war in Java, nicht in C++.

viele Grüße
Felix
_________________
StGB §§ 328 Abs. 2 Pkt 3:
Mit Freiheitsstrafe bis zu fünf Jahren oder mit Geldstrafe wird bestraft, wer eine nukleare Explosion verursacht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Kampfhund
Super JLI'ler


Alter: 42
Anmeldedatum: 20.07.2002
Beiträge: 408

Medaillen: Keine

BeitragVerfasst am: 11.01.2004, 14:28    Titel: Antworten mit Zitat

@Acid:

Was heißt das O(..) genau?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 11.01.2004, 14:44    Titel: Antworten mit Zitat

HotAcid hat Folgendes geschrieben:
@Lord: weil bei Vector die Iteratoren nur intern benutzt werden. Als Benutzer bekommst du davon nicht viel mit Wink

Eben, deshalb meinte ich auch, dass der Zugriff bzw. das Löschen deshalb einfacher ist, weil man sich nicht um die Iteratoren kümmern muss Wink
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
xardias
JLI Master


Alter: 38
Anmeldedatum: 28.12.2003
Beiträge: 804
Wohnort: Palo Alto, CA
Medaillen: Keine

BeitragVerfasst am: 11.01.2004, 15:03    Titel: Antworten mit Zitat

löschen sollte aber wesentlich langsamer sein als in einer liste.
Ich würde immer listen nehmen, sobald die größe der liste/arrays nicht feststeht, und variable sein muss.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Kampfhund
Super JLI'ler


Alter: 42
Anmeldedatum: 20.07.2002
Beiträge: 408

Medaillen: Keine

BeitragVerfasst am: 11.01.2004, 15:27    Titel: Antworten mit Zitat

Ich meine, dass das einfügen am ende langsamer sein müsste als bei der liste. Das array müsste nämlich immer neu angelegt werden und das alte array in das neue kopiert werden.
(vileicht erklärt das O(..) aber genau das?)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Hazel
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 11.01.2004, 16:03    Titel: Antworten mit Zitat

The Lord of Programming hat Folgendes geschrieben:
HotAcid hat Folgendes geschrieben:
@Lord: weil bei Vector die Iteratoren nur intern benutzt werden. Als Benutzer bekommst du davon nicht viel mit ;)

Eben, deshalb meinte ich auch, dass der Zugriff bzw. das Löschen deshalb einfacher ist, weil man sich nicht um die Iteratoren kümmern muss ;)


Dein erase() Code lässt sich nicht kompilieren... versuchs doch mal.
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
HotAcid
Super JLI'ler


Alter: 43
Anmeldedatum: 04.08.2002
Beiträge: 372
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 11.01.2004, 16:11    Titel: Antworten mit Zitat

Wenn eine Operation den Aufwand O(1) hat, bedeutet das, dass diese Operation "in einem Schritt" (bzw in mehreren) gemacht werden können.

O(n) bedeutet, dass diese Operation n Schritte benötigt, wobei n für die Anzahl der Daten(bzw für die Länge) steht.

Das ganze ist stark vereinfacht, es geht dabei nur um die Potenz. Faktoren oder sontige Summanden werden dabei ignoriert. Wenn man den Aufwand einer Methode analysiert und dabei auf die Formel 4*n + 2938 kommt, ist die Aufwandsklasse immer noch O(n).

Häufige Aufwandsklasen sind:
O(1) O(n) O(log(n) ) O(n*log(n)) O(n^2) o(2^n)

viele Grüße
Felix
_________________
StGB §§ 328 Abs. 2 Pkt 3:
Mit Freiheitsstrafe bis zu fünf Jahren oder mit Geldstrafe wird bestraft, wer eine nukleare Explosion verursacht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Kampfhund
Super JLI'ler


Alter: 42
Anmeldedatum: 20.07.2002
Beiträge: 408

Medaillen: Keine

BeitragVerfasst am: 11.01.2004, 16:28    Titel: Antworten mit Zitat

Ja, sowas in der Art hate ich mir schon gedacht.

Dann kann man doch aber schlecht vergleichen:

wenn ein vector 10000 elemente hat und man eins hinzufügt ist der (zeit-)aufwand sehr groß. Bei der liste hingegen nicht.

das würde bedeuten Ov(1) = Ol(1) aber Zv >> Zl
(Z = Zeitaufwand, >> = wesentlich größer, v = vector , l = list)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
HotAcid
Super JLI'ler


Alter: 43
Anmeldedatum: 04.08.2002
Beiträge: 372
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 11.01.2004, 16:31    Titel: Antworten mit Zitat

bei vector ist der Aufwand auch nur O(1) wenn man hinten anfügt.

Angenommen, Vector und list haben jeweils 10.000 Elemente. Wenn du vorne einfügen willst, bist du bei Ov(10.000) und Ol(1)
das ist schon ein kleiner Unterschied

viele Grüße
Felix
_________________
StGB §§ 328 Abs. 2 Pkt 3:
Mit Freiheitsstrafe bis zu fünf Jahren oder mit Geldstrafe wird bestraft, wer eine nukleare Explosion verursacht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Kampfhund
Super JLI'ler


Alter: 42
Anmeldedatum: 20.07.2002
Beiträge: 408

Medaillen: Keine

BeitragVerfasst am: 11.01.2004, 16:37    Titel: Antworten mit Zitat

Aber der _Zeit_ - aufwand ist beim einfügen hinten in den vector doch auch größer als bei der liste. schlißlich muss das gesamte array neu angelegt und alle elemente in das neue array kopiert werden. bei der liste muss nur ein kleiner speicherblock reserviert werden.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
HotAcid
Super JLI'ler


Alter: 43
Anmeldedatum: 04.08.2002
Beiträge: 372
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 11.01.2004, 16:45    Titel: Antworten mit Zitat

achso, so meinst du das...

hm... mag sein, dass du sogar Recht hast, da bin ich mit meinem Latein jetzt ein wenig am Ende. Habe die Tabelle aus nem Buch abgeschrieben("Die C++ Standardbibbliothek" von Kuhlins, Schader), die interne Struktur von vector habe ich aber noch nicht gelesen, wenn ich soweit bin kann ich das hier nochmal schreiben.

viele Grüße
Felix
_________________
StGB §§ 328 Abs. 2 Pkt 3:
Mit Freiheitsstrafe bis zu fünf Jahren oder mit Geldstrafe wird bestraft, wer eine nukleare Explosion verursacht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Hazel
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 11.01.2004, 17:16    Titel: Antworten mit Zitat

HotAcid: Du musst dazu sagen, dass das nicht immer so ist, sondern nur im worst-case.
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 12.01.2004, 22:12    Titel: Antworten mit Zitat

Hazel hat Folgendes geschrieben:
The Lord of Programming hat Folgendes geschrieben:
HotAcid hat Folgendes geschrieben:
@Lord: weil bei Vector die Iteratoren nur intern benutzt werden. Als Benutzer bekommst du davon nicht viel mit Wink

Eben, deshalb meinte ich auch, dass der Zugriff bzw. das Löschen deshalb einfacher ist, weil man sich nicht um die Iteratoren kümmern muss Wink


Dein erase() Code lässt sich nicht kompilieren... versuchs doch mal.

Sorry, mein Fehler - man muss das Vectorelement als Referenz übergeben, dann funzt es *gleich mal oben abänder*
Code:
vector<int> vec(10);
vec.erease(&vec[0]);

_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Gehe zu Seite Zurück  1, 2
Seite 2 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum