Aufgabenstellung: https://www.programmieraufgaben.ch/aufgabe/schraubensack/uk540btd
Eine Funktion $g(n)$ ist in $O(f(n))$ wenn es ein $n_0$ und $c_0$ gibt, so dass $$ g(n) < c_0 f(n) \qquad \forall n>n_0$$ Umgangssprachlich heisst das, die Funktion $g(n)$ wächst nicht schneller als $f(n)$.
Beispiel:
Rechenaufwand:
Insgesamt also $O(n \log(n))$.
Speicherplatz: $O(n)$ (die ganze Liste)
Rechenaufwand:
Speicherplat: $O(n)$ (die ganze Liste)
Rechenaufwand:
Also total $O(a\cdot n \cdot n)$ = $O(n^2 a) \subset O(n^3)$ für die erste Variante.
Oder $O(a\cdot n + n) = O(a \cdot n) \subset O(n^2)$ für die zweite Variante.
Speicherplatz: $O(n)$ für beide Varianten (weil $O(n)=O(2n)$).
Rechenaufwand:
Also total $O(n \log(a)) \subset O(n \log(n))$.
Speicherplatz: $O(a)$ (Platz der Datei auf der Platte nicht mitgezählt).
#!/usr/bin/ruby data = Hash.new File.open("schrauben.txt","r"){|f| while(line=f.gets) # Zeile einlesen was = line[0] == "m" ? 0 : 1 d = line[2..-1].to_i unless data.has_key?(d) data[d] = [0,0] end data[d][was]+=1 end } # Der folgende Sort ist O(a log(a)), was weniger # als O(a log(a)) der obigen Schlaufe ist. data.keys.sort.each{|d| puts "#{d}mm: #{data[d].min} passende Paare" }