www.vorhilfe.de
Vorhilfe

Kostenlose Kommunikationsplattform für gegenseitige Hilfestellungen.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Englisch
  Status Grammatik
  Status Lektüre
  Status Korrekturlesen
  Status Übersetzung
  Status Sonstiges (Englisch)

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "Komplexität & Berechenbarkeit" - Komplexität von Schleifen
Komplexität von Schleifen < Komplex. & Berechnb. < Theoretische Inform. < Hochschule < Informatik < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Komplexität & Berechenbarkeit"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Komplexität von Schleifen: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 15:16 Mo 07.08.2006
Autor: peterw

Hallo,

ich habe unten stehendes Java Programm und würde gern die Komplexität abschätzen. Genauer gesagt die Komplexität der  while-Schleife.

Ist die List list mit N Elementen gefüllt, so ist der Aufwand  [mm] \summe_{i=1}^{N} [/mm] 1 . Welchem O() entspricht dies? [mm] O(N^{2})? [/mm] Falls ja, wieso?

Mir wurde gesagt, dass die innere Schleife eine Komplexität von [mm] N^{2}/2 [/mm] haben soll. Kann mir das jemand erklären? Und warum ist das bei mir nicht so?

Bei N=16 ist die Ausgabe 136   =  [mm] N^{2}/2 [/mm] + 8
Bei N=32 ist die Ausgabe 528   =  [mm] N^{2}/2 [/mm] + 16


Danke.

Grüße,
Peter

PS: Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class complexity {
    
    public static void main(String[] args) {    
        Random random = new Random(1);
        List<String> list = new ArrayList<String>();
        
        
        for (int i=0; i<4;i++) {
            list.add(String.valueOf(i));
        }
        
        int count =0;
        
        while (!list.isEmpty()) {
            
            for (int i=0;i<list.size();i++) {
                count++;
                System.out.print(".");
            }
            
            list.remove(random.nextInt(list.size()));
            
            
        }
        
        [mm] System.out.println("\ncount="+count); [/mm]
        
    }

}


        
Bezug
Komplexität von Schleifen: Antwort
Status: (Antwort) fertig Status 
Datum: 06:43 Di 08.08.2006
Autor: mathiash

Hallo und guten Morgen,

die for-Schleife innerhalb der while-Schleife benoetigt  O(Größe der Liste) viele Schritte, und bei jedem Durchlauf der While-Schleife
wird genau ein Listenelement entfernt, so dass die while-Schleife  also insgesamt

[mm] O(\sum_{i=1}^{S}i)=O(S^2) [/mm] Schritte braucht, wobei S die Groesse (=Anzahl Einträge) der Liste vor Beginn der While-Schleife sei.

Gruss,

Mathias

Bezug
                
Bezug
Komplexität von Schleifen: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 08:42 Di 08.08.2006
Autor: peterw

Guten Morgen,

vielen Dank für die Antwort. Ich hätte  noch zwei Nachfragen.

- Wie kommst Du auf die Gleichheit von $ [mm] O(\sum_{i=1}^{S}i)=O(S^2) [/mm] $ ? Gibt es irgendwo eine Übersicht über solche Umformungen oder muss man das einfach sehen?


- Was wäre der Aufwand, wenn man das gleiche While-For-Konstrukt innerhalb des ersten hätte. Also die Elemente der Liste wieder Listen sind, die durchlaufen werden.

While (Liste L nicht leer)
   For (jedes Element E der Liste L)
      While (Liste E nicht leer)
          For (jedes Element der Liste E)

Ist das dann [mm] O(N^2) [/mm] * [mm] O(M^2) [/mm] = [mm] O(N^2 [/mm] * [mm] M^2) [/mm] mit M=max. Größe der Listen in L.

Nocheinmal danke.

Grüße,
Peter

Bezug
                        
Bezug
Komplexität von Schleifen: Antwort
Status: (Antwort) fertig Status 
Datum: 08:50 Di 08.08.2006
Autor: mathiash

Moin Peter,

es ist doch [mm] \sum_{i=1}^{S}i=\frac{S\cdot (S+1)}{2}\leq 2\cdot S^2. [/mm]

Und zur zweiten Frage: Das wäre dann sowas wie

[mm] \sum_{i=1}^{S}i\:\: +\:\: \sum_{i=1}^S \: (Size(Liste\:\: L_i))^2 [/mm]

(denn die Listen werden beim ersten Durchlauf komplett geleert.

Woher kommt man auf solche Fragen, und warum gibt man sich das Kürzel peterw ?


Gruss,

Mathias

Bezug
                                
Bezug
Komplexität von Schleifen: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 09:51 Di 08.08.2006
Autor: peterw

Hi Mathias,


Danke für die schnelle Antwort.

> Woher kommt man auf solche Fragen, und warum gibt man sich das Kürzel peterw ?

Um zuserst auf Deine Fragen einzugehen:
- Wie kommt man auf mathiash?  (Vorname+Nachname?)
- Ich will gerne wissen, welchen Aufwand ein von mir entwickelter Algorithmus hat. Kein toller Algorithmus, aber ich hatte erst gedacht, dass der Aufwand wesendlich schlechter als [mm] O(N^2) [/mm] ist. Nachdem das nicht so ist, möchte ich es einfach genauer verstehen.


> (denn die Listen werden beim ersten Durchlauf komplett geleert)

Da habe ich was falsch gemacht. Die Listen [mm] L_i [/mm] werden nicht geleert. Von ihnen wird vorher eine Kopie erstellt mit der dann gearbeitet wird.

Also:
While (Liste L nicht leer)
   For (jedes Element [mm] L_i [/mm] aus L)
       E = [mm] Kopie(L_i) [/mm]
       While (Liste E nicht leer)
           For (jedes Element der Liste E)
              tueEtwas
           removeRandom(E)
   removeRandom(L)

Ist in diesem Fall meine Vermutung mit [mm] O(n^2*m^2) [/mm] richitig?

Bezug
                                        
Bezug
Komplexität von Schleifen: Antwort
Status: (Antwort) fertig Status 
Datum: 07:20 Mi 09.08.2006
Autor: mathiash

Moin Peter,

ich würd sagen: Ja.

Gruss,

Mathias

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Komplexität & Berechenbarkeit"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.englischraum.de
[ Startseite | Forum | Wissen | Kurse | Mitglieder | Team | Impressum ]