Zum Inhalt

Laufzeiten

Wie schnell ein Rechner ein bestimmtes Problem lösen kann, hängt von viele Faktoren ab. Zunächst wollen wir die Merkmale vom 'Speicher' untersuchen, sowie deren Einfluss auf die Laufzeit.

Grenzen vom Speicher

Wie viele Zahlen können wir wohl in einem Feld speichern?

Question
  • Erstelle eine Variable vom Typ Feld.
  • 'Fülle' das Feld mit sehr vielen Zahlen
  • gibt es ein Maximum an Zahlen die gespeichert werden können? Falls ja, finde sie.

###(De-)Aktiviert den Code nach der Zeile # Tests (Groß-/Kleinschreibung wird nicht beachtet)
(Ctrl+I)
Ein- oder Ausstieg aus dem "Split-Screen"-Modus
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
Ein- oder Ausstieg aus dem "Vollbildmodus"
(Esc)
Kürzen/nicht kürzen der Rückmeldungen im Terminal (Standardausgabe & Stacktrace / Starte das Programm erneut zum Anwenden)
Wenn aktiviert, wird der aus dem Terminal kopierte Text in eine Zeile umgewandelt, bevor er in die Zwischenablage kopiert wird.

.128013öesh;q8ftR2lv17_6g3nAd[bcpmoJü(ari=])/wyZ:*zEL,k.45 Bux050w0c0j0G0I0m0d0!0z0m0G0d0d0J010j0I0A010406050d0$0B0B0G0H0O040U0b120u0s050M12141618100A04051m1f1p0M1m100w0I0n0:0=0@0_0e0I0s0e0m1D0e0j0~050+0y0m0c1y0?0^011C1E1G1E0j1M1O1K0j0H1n0j0e0:0C0.0A0G0u0_0l011Q1A010i0-0c0u0G0B0c1K0d1.0u1@1S1`1O1}1 0~0a0!1a1c0s0d0n0C0H0d0z1F0G1e1g231n0M1)2s1$1(1%1L0w250_1G0u1|0C0d1K1v1x0;1R2C0I2E0u0C2J1K0A0H0c1n221/2s2Y0u2X232B012Q0H150m0~0o1f2#0 112(2L1^2+2-0~0l2;2r102#2)2{0G2.040t2 2Z312^1z1S34360Y392$3b1/332j2|040Z3i2?322_3e3n350~0r3r3k243u0_3f0~0p3A2@3l3D2*3w360h3r1q2V2s2J2v0w1(2A3L0z2R201n3U1o3S3J2$3Q3!0)2%3K3d0_0z0o0~030!0D1P1}2m0!0k0c2m2E0H0!021~0A0f0!0#0H0C0N0d0c450N0E0H0)241 0e450P0G1F1|0!0S130!0v0y0d0j0$0H0S0!0i0E4p1|3I3t3=2*0~0u0q4r4t0u3r0!3+2)0C0~0J4V4X3L0B0I2}4$4M2M014Z040R0R4,3c4.4)2}3q2q3a3B330~0%4@3;4.4:4#4}2$4W4-1^0}040x0K4L4^1^0W0~0i2j533C4N0u0~0I5o4Y0N5s4U58045a5i3e0y0~0H1/0s0c3Q5b1S5d0F5K5C3E4P4R4s285P545c0~0L0Q3A0!5%5B5X3e515W5p550~0X5-50040G0A0A1|0w5=3L5N5}5q5s604.5d0L3A4 3L0u5E042U2O0j635Y045O5z4%4N0d1=04020g0$0C0j0f0v0u0S5U0!0T1O1 0u0j0c0Q466r6t0f6g5M0~0V5u696b5V6k5L0_5 6U5Q4O04526Y5*6W5Z665z100M3.2W3R6:0M3(2t3W1f2w6`0G1N6=3U6-0)0+0-0d04.
Lösung
1
2
3
4
5
6
7
8
# Je nach Rechner & Browser würden mehr Zahlen zum Absturz führen
n_Zahlen = 2 ** 25

x = []
for i in range(n_Zahlen):
    x.append(i)

print("Anzahl Elemente: ", len(x))

Zeitkosten für den Speicher

Wenn der Rechner seinen Speicher verwenden will, benötigt dies zusätzliche Zeit. Um ein ungefähres Bild davon zu erhalten, können wir ein paar Experimente durchführen in dem wir die Laufzeit von einem Programm messen.

Summieren ohne Speicher

Question
  • Berechne die Summe von allen Zahlen zwischen 0 und 'n' ohne ein Feld zu verwenden.
  • miss die dafür benötigte Zeit

###(De-)Aktiviert den Code nach der Zeile # Tests (Groß-/Kleinschreibung wird nicht beachtet)
(Ctrl+I)
Ein- oder Ausstieg aus dem "Split-Screen"-Modus
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
Ein- oder Ausstieg aus dem "Vollbildmodus"
(Esc)
Kürzen/nicht kürzen der Rückmeldungen im Terminal (Standardausgabe & Stacktrace / Starte das Programm erneut zum Anwenden)
Wenn aktiviert, wird der aus dem Terminal kopierte Text in eine Zeile umgewandelt, bevor er in die Zwischenablage kopiert wird.

.128013öeshq;98ft2lv17_60g3-ndbc+pmo(ari=)/wyZ:*zL,k.S45D Bu050x0c0k0F0H0m0d0Z0z0m0F0d0d0I010k0H0B010406050d0#0C0C0F0G0M040R0b100w0t050K101214160~0B04051k1d1n0K1k0~0x0H0n0.0:0=0@0e0H0t0e0m1B0e0k0|050)0y0m0c1w0;0?011A1C1E1C0k1K1M1I0k0G1l0k0e0.0D0,0B0F0w0@0l011O1y010j0+0c0w0F0C0c1I0d1,0w1=1Q1^1M1{1}0|0a0Z181a0t0d0n0D0G0d0z1D0F1c1e211l0K1%2q1!1$1#1J0x230@1E0w1`0D0d1I1t1v0/1P2A0H2C0w0D2H1I0B0G0c1l201-2q2W0w2V212z012O0G130m0|0Z0o1d2Z0}0 2$2J1?2)2+2-0l2:2p0~2Z2%2`0F2,040Z0u2~2X302@1x1Q33350Z0W392!3b1-322h2{360X3j2=312^3e3o342-0r3s3l223v0@3f2-0p3B2?3m3E2(3x3g0i3J3u3d3F3O2-0h3R3c2K3N2*3y040o0s3Y3L3T3#3p0o2/2o3a3K3D3-3G3(2}3=3k3@3n3$350o383}3t3Z2_3V3(3i451o2T2q2H2t0x1$2y3M0z2P1~1l4g1m4e3@2Y2p054m0%2#3,3!0T0w0|0H0C0B2h0k3s0Z3 3M0w4D040_1}3+3^3!0z0o0|030Z0!0c0H200H0c0m0Z110Z1t1N0N4$0k0Z0Q0#0Z1}0=1`4T320|0d0)0G4J454L3S3!0D0|0I4K4M3_0|4R0c3s5d580|0U5i572_0|0B0c0G0j0q4m0#0w0k5s5n471Q0{040E0J3B3C4 040w5B4A1?59045b555j1?0C0H0|3)5N4U5P0|0P0P5!2%5W0|3A455J4N50114S5T5o1Q5Q5S2;565C0@5,043*5/5:3-0T0|0j2h5c5_3F4E6b5 010D0L4E5M5^6g0w0y0|0G1-0t5h4c6c015E0E5*5;5L6A3-5E0J0O3B0Z6J5~5O1Q4W4Y0Z1A5s0Z1f1}0Z0y5s0c2k2N6I6K5U3e5=126u5}6(0@5Q0A5|2p6L5#6)040H5I6.2(0|1`0%6f6M6/5a726^6d4Q4F6,4v6w5Q5m6v6n5q5s5u5w5y5A7g736x0|5G4~4N6p042S2M542;6}6y6D3!0d1:04020f0#0D0k0g0V5?0c0O0Z7I7K7M7D1?5E0S765K6U7b2X7B0|5H5/6}6o5q0G7y7W5D7r7=0@7F0|7T7L0g0Y0F0#5s7R7|7V7o777q047Z6m7p4P707%2!6@2%5Q0v7!6B51147z7c6g6F3J0K4x2U4d8w0K4q2r4i1d2u8D0F1L8y4g0~8z0(0*0,04.
Lösung
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
import time
# Beispiel um die Zeit zu messen
start = time.perf_counter()

n= 10**6
summe = 0

for i in range(n):
    # hier summe berechnen
    summe += i

ende = time.perf_counter()
print("Summe: ", summe)
print("Dauer: ", ende - start)

Summieren mit Speicher

Question
  • Erstelle eine Variable vom Typ Feld.
  • 'Fülle' das Feld mit sehr vielen Zahlen, ohne dass dein Programm abstürzt
  • berechne in einer zweiten Schleife die Summe aller Zahlen
  • miss die dafür benötigte Zeit
  • vergleiche die Zeit mit der Zeit aus der vorherigen Aufgabe

###(De-)Aktiviert den Code nach der Zeile # Tests (Groß-/Kleinschreibung wird nicht beachtet)
(Ctrl+I)
Ein- oder Ausstieg aus dem "Split-Screen"-Modus
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
Ein- oder Ausstieg aus dem "Vollbildmodus"
(Esc)
Kürzen/nicht kürzen der Rückmeldungen im Terminal (Standardausgabe & Stacktrace / Starte das Programm erneut zum Anwenden)
Wenn aktiviert, wird der aus dem Terminal kopierte Text in eine Zeile umgewandelt, bevor er in die Zwischenablage kopiert wird.

.128013öeshq;98ft2lv17_60g3-n[dbcFpm+o(ari=])/wyZ:*zL,k.S45D üu050y0c0k0H0J0m0d0$0A0m0H0d0d0K010k0J0C010406050d0(0D0D0H0I0P040U0b130w0t050N13151719110C04051n1g1q0N1n110y0J0n0;0?0^0`0e0J0t0e0m1E0e0k0 050,0z0m0c1z0@0_011D1F1H1F0k1N1P1L0k0I1o0k0e0;0F0/0C0H0w0`0l011R1B010j0.0c0w0H0D0c1L0d1/0w1^1T1{1P1~200 0a0$1b1d0t0d0n0F0I0d0A1G0H1f1h241o0N1*2t1%1)1(1M0y260`1H0w1}0F0d1L1w1y0=1S2D0J2F0w0F2K1L0C0I0c1o231:2t2Z0w2Y242C012R0I160m0 0$0o1g2$10122)2M1_2,2.2:0l2?2s112$2*2}0H2/040$0u312!332`1A1T36380$0Z3c2%3e1:352k2~390!3m2^342{3h3r372:0r3v3o253y0`3i2:0p3E2_3p3H2+3A3j0i3M3x3g3I3R2:0h3U3f2N3Q2-3B040o0s3#3O3W3(3s0o2=2r3d3N3G3:3J3+303^3n3`3q3)380o3b403w3$2|3Y3+3l483F433=3u4f423P3}0o3D4k3V3%4n3L4q4a3z440 0o3T4v3/4s4c0o3!4C3{4E4y040l3-4I4h3*0l3@2@4g4m4c0l3 2@1r2W2t2K2w0y1)2B3P0A2S211o4(1p4$3`2#2s054.0*2(4D1_0W0w0 0J0D0C2k0k3v0$4l3|52040|203E4V3|0 0w3v5b3%0F0 0K595n1_0D0J4z4O4!4r1_5p040S0S5m5A1T5v0 4p4U5i4s0 0d0,0I58485a5H0`5C5r5U5t3h0 5f0c5G4w5X0 0X5*4 5$040C0c0I0j0q4.0(0w0k5@5/4J1_0~040G0M5h5#0`0A0o0 030$0B0c0m2B0*1{0w0J5@1}3.615;0T0H1G6o5!5W015Y5s6x630x0L6p2*0W0 0j2k6A5+2+536L5:5X0O535l6w6M0w0z0 0I1:0t5)486801630G60355k6-3P630M0R3E0$6_5V6M6a6c0$1D5@6e6g2B0z0c0j0%0m296^6`6)5d6s6u6U5z6M5C5.6(6x5d0H0C5?0w0y6:3:6+7u5O040J7x620 664f067G6)6}046d700I0$0Y14200$0H0(0:0Q6t290$2j256f6h0$752W2n2Q6F4m5P7Q6%2@6{6Q6y5q6P6q0`5J045y326)6H046J0I7`6.7z863P0F6S7z7h2s7?7{2+6Y046!1e7;4`6B0 6,7m6W6/8s7@6=6@4f6`8g871i5g6V7@5C0E5Z7=7d0 7f7a8v8h6C7B5;7A8P2*636E7F8L041}0*893:6z8F8h5d5(8S5,047l7i7@5d5?5^5`0F5|5~858V6;8q7E4U7d8j2V2P5T8?8Q8q8/010d1?04020f0(0F0k0g7P150c0R0$9i9k9m9d630V8(7y8D8n2!6)6=7-3|960I989w9c903:9f0 9t9l0g0#7T5@9r9R9v9N3%9x9z2|0 8$9C2%8B8a0 0v9%5;5Q17998o6M9F4k0N4|2X4#9 0N4=2u4*1g2xa60H1Oa14(11a20+0-0/04.
Lösung
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
import time

n= 10**6

start = time.perf_counter()

# Feld definieren
zahlen = []
for i in range(n):
    # hier Feld befüllen
    zahlen.append(i)



# hier Summe aus Zahlen von Feld berechnen
summe = 0
for i in range(n):
    summe += zahlen[i]

ende = time.perf_counter()
print("Summe: ", summe)
print("Dauer: ", ende - start)

Laufzeit abhängig von der Problemgrösse

Summieren (Addition) ist das einfachste für einen Rechner. Andere Operationen sind viel "teurer", benötigen also mehr Zeit. Wie viel mehr Zeit ist abhängig vom spezifischen Problem.

Liniendiagramme

Beispiel: Daten visualisieren mit Liniendiagramm

Deine Abbildung

Deine Abbildung wird hier erscheinen

Mit der Bibliothek matplotlib können wir relativ einfach Daten visualisieren. Dazu verwenden wir zwei Felder, die jeweils für eine bestimmte 'x-Koordinate', sowie die y-Koordinate einen Wert enthalten.

###(De-)Aktiviert den Code nach der Zeile # Tests (Groß-/Kleinschreibung wird nicht beachtet)
(Ctrl+I)
Ein- oder Ausstieg aus dem "Split-Screen"-Modus
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
Ein- oder Ausstieg aus dem "Vollbildmodus"
(Esc)
Kürzen/nicht kürzen der Rückmeldungen im Terminal (Standardausgabe & Stacktrace / Starte das Programm erneut zum Anwenden)
Wenn aktiviert, wird der aus dem Terminal kopierte Text in eine Zeile umgewandelt, bevor er in die Zwischenablage kopiert wird.

Question

Verändere das folgende Programm um ein Diagramm zu zeichnen mit den Daten:

x y
1 9
4 6
6 12

Beschreibe die X-Achse mit 'Tage' und die Y-Achse mit 'Verkäufe'.

Deine Abbildung

Deine Abbildung wird hier erscheinen

###(De-)Aktiviert den Code nach der Zeile # Tests (Groß-/Kleinschreibung wird nicht beachtet)
(Ctrl+I)
Ein- oder Ausstieg aus dem "Split-Screen"-Modus
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
Ein- oder Ausstieg aus dem "Vollbildmodus"
(Esc)
Kürzen/nicht kürzen der Rückmeldungen im Terminal (Standardausgabe & Stacktrace / Starte das Programm erneut zum Anwenden)
Wenn aktiviert, wird der aus dem Terminal kopierte Text in eine Zeile umgewandelt, bevor er in die Zwischenablage kopiert wird.

.128013öesh_ä;98fTt2lv17!60g3nAd[bVcpmo(ari=])/wyPEL,k.45D ux050z0c0m0I0K0o0d0!0D0o0I0d0d0L010m0K0E010406050d0#0F0F0I0J0Q040T0b110x0v050O111315170 0E04051l1e1o0O1l0 0z0K0p0/0;0?0^0e0K0v0e0o1C0e0m0}050*0B0o0c1x0=0@011B1D1F1D0m1L1N1J0m0J1m0m0e0/0G0-0E0I0x0^0n011P1z010k0,0c0x0I0F0c1J0d1-0x1?1R1_1N1|1~0}0a0!191b0v0d0p0G0J0d0D1E0I1d1f221m0O1(2r1#1%1$1K0z240^1F0x1{0G0d1J1u1w0:1Q2B0K2D0x0G2I1J0E0J0c1m211.2r2X0x2W222A012P0J140o0}0!0q1e2!0~102%2K1@2*2,2.0n2;2q0 2!2(2{0I2-040!0w2 2Y312^1y1R34360!0X3a2#3c1.332i2|370Y3k2?322_3f3p352.0t3t3m233w0^3g2.0r3C2@3n3F2)3y3h0j3K3v3e3G3P2.0i3S3d2L3O2+3z040q0u3Z3M3U3$3q0q2:2p3b3L3E3.3H3)2~3?3l3^3o3%360q393~3u3!2`3W3)3j463D413:3s4d403N3{0q3B461p2U2r2I2u0z1%2z3N0D2Q1 1m4s1n4q3^2Z2q054y0(2$3-3#0V0x0}0K0F0E2i0m3t0!4j3`4P04140m0E0o0G0m1F0B0W0E0Q4(4*4W4Y4N0}0=4?3T3#0x4!4(4V4d4e4x0q0}030!0Z0K0c0d0c0J0!0l0c0,0!0F0#0?0!0d0G0!1M5h0B1{0s3,3_4}0}1_0v3=2=4X4|1@0G0}0L4{483f0}0R0Q2Q0K0(0R4)512=4@1@0|040H3t5X1R0d550402030w0i0h4;0m0f0q0I5,5.0h5$5F1R5Z0N5w335z1C5C4H5}0^5H040W5|5L3G0}0*0J0v0)6c4M5Y0}0H60525%0^0D5*570y0B0!1B5d0!0g0x0(0J0x614k0}0$0z0I0m1{5K6l1R695J465E6d015Z0A6k5x1@0F0K0}652Y6r6X0}0U4W0!6;6,6%0}4c5W676-046/6U6V6Q0^6@044n6`6W5Z0M6H3`0}0Q6L6N6G6U6,6S6P6#5~0}6Z4o6{733Y7p776.6:6=7q6(746!2(5Z6~5D707l727z0q3}76716|7952537b04507B3N696b7t7N4 5U7V3.5Z5#7Z7H2)6J7e6O7+7C7v7h6{4!7d6M7:7M7,5 7a5y7T0o5V666W7X7%810`4+0c886m5!8d5(5*5_5/0S2N580K2n0J1}8j5{7;3N7 4i7^0}7U8u3.878B810$0;5t0o8g0^7)8K015)0}8s0l2n0c8s8N8w2=7R818A7}2(8D8$6I040Q8H0c8J8E8e7*8)3.8P5+5-5/0C5d0V0g0#0k8U8`8t8?3#8X306,7#846+6{8(857!0}0d0e0G0P8W6n6p8Y1e4J2V4p9s0O4C2s4u1e2v9z0I5r4r1v2?9v0)0+0-04.
Lösung
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
import matplotlib.pyplot as plt

# Dieser Teil muss so bleiben!
fig1 = PyodidePlot('plot_1a')
fig1.target()

# Ab hier ändern
xdaten = [1,    4,  6]
ydaten = [9,    6,  12]


plt.plot(xdaten, ydaten)
plt.title('Ein Diagram')
plt.xlabel('Tage')
plt.ylabel('Verkäufe')
plt.show()

Zusammenhang Eingabegrösse und Laufzeit für Addition

Miss die Zeit die benötigt wird um immer mehr (grössere) Zahlen zu addieren. z.B. wie lange dauert es um 10, 1000, 100'000 Zahlen zu addieren?

Question

Untersuche die Laufzeit der Addition-Operation in Abhängigkeit der Eingabegrösse.

Deine Abbildung

Deine Abbildung wird hier erscheinen

###(De-)Aktiviert den Code nach der Zeile # Tests (Groß-/Kleinschreibung wird nicht beachtet)
(Ctrl+I)
Ein- oder Ausstieg aus dem "Split-Screen"-Modus
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
Ein- oder Ausstieg aus dem "Vollbildmodus"
(Esc)
Kürzen/nicht kürzen der Rückmeldungen im Terminal (Standardausgabe & Stacktrace / Starte das Programm erneut zum Anwenden)
Wenn aktiviert, wird der aus dem Terminal kopierte Text in eine Zeile umgewandelt, bevor er in die Zwischenablage kopiert wird.

.128013öeuh9Tt_l!3-Adcmo(a]Z:L5D ü2xäs;f1v760gn[Wb+pri=)/wyPzE,k.S48050o0c0h0t0V0j0F0A0p0j0t0F0F0W010h0V0T010406050F0d0q0q0t0U0!040x0b180O0N050Y181a1c1e160T04051s1l1v0Y1s160o0V0J0_0{0}0 0e0V0N0e0j1J0e0h14050;0R0j0c1E0|0~011I1K1M1K0h1S1U1Q0h0U1t0h0e0_0r0@0T0t0O0 0C011W1G010H0?0c0O0t0q0c1Q0F1@0O1}1Y201U2325140a0A1g1i0N0F0J0r0U0F0p1L0t1k1m291t0Y1/2y1,1.1-1R0o2b0 1M0O220r0F1Q1B1D0`1X2I0V2K0O0r2P1Q0T0U0c1t281^2y2(0O2%292H012W0U1b0j140A0I1l2+15172.2R1~2;2?2^0C2{2x162+2/320t2@040A0l362)382 1F1Y3b3d0A0,3h2,3j1^3a2p333e0y3r2}39303m3w3c2^0L3A3t2a3D0 3n2^0K3J2~3u3M2:3F3o0-3R3C3l3N3W2^0f3Z3k2S3V2=3G040I0M3*3T3#3-3x0I2`2w3i3S3L3^3O3:353}3s3 3v3.3d0I3g453B3+313%3:3q4d3K483`3z4k473U420I3I4p3!3,4s3Q4v4f3E49140I3Y4A3@4x4h0I3)4H404J4D040C3=4N4m3/0C3|2|4l4r4h0C444Z4q414$4c4)4w4g4Q0C4j4.4B3$4;4o4@4I4:3x0C4u4|4O4~4W4z524V3d0C4G574#4;4M5c4+4Q0l4T5g4P3x0l4Y374*5m3/0l4(2x1w2#2y2P2B0o1.2G3U0p2X261t5A1u5y3 2*5w5G0/2-4}1Y0)0O140V0q0T2p0h3A0A5r315W041b0h0T0j0r0h1M0R0*0T0!5/5;5%5)5U140|5}4/3m5+5/5$4U3U5V5X5Z5#624^2:5+11253J4!3^0p0I14030A0z0V0c0F0c0U0A0g0c0?0A0q0d0}0A0F0r0A1T6A0R220k3?533m14200N5p2)5(630 0r140W6e5T3N140#0!2X0V0/0#5:672|5~0 13040s3A6@010F6o0402030l0f0G5{0h0i0C72740G6|6Y016_0X6P3a6S1J6V2,6}6!040*7e6f6h1c0N0:7t6(7g140s7i4k066l3,6n6p0A0n0R0A1I6w0A0E0O0/0U0O7j4r140D0o0t0h226%6Q6Z6#7)2/6_0P0u7X41140!7#7%7W4d6X6f7q6$7|6}7/7;7F6}7J046q0Q0V6x7%0F7`0A0H0B6x0J6w2r7P0/2K0A0v0t1L220A0t7N3;0(0A2U0A0y0M0M7Q0+2s0U0V1(8u0R0V0^8D7b758E5k5q7f0)6S2p7-7Y047{2|7}7A0r0Z5X8%2x8)7*2:0R140U1^7x7z8;6_6{4d6}0q0V4E8U2)82140(8!3^91148D8T8{7.97993,9b049d9f3U7h0w6k0A9s8:7k048e1c6=8/7p7,817f6h5Y0c9n3^7q7s8 9E140T6w0H0i5G0d0O7%0U9I3,8}7E4Z069t9u698Y9X9D7u5X9i1~8+8-9:3m8?048^1j9H9M6f8}9Y31148.957f9p3J9(9(6}5+a42,9)9J140S9@6)8$9r9tab14220/aj017 as9F6j9~8*149L6?9N049P0U9R9T9V6wa11Y9!am9sao047#0daK9-az04808(aQaq9}aZ7f7q0mav149x0U9z3i9%anaD7!7$7(ay8;9KaLak0t0T9P7Ta}7B6`b3acb37h5%af7I706q8h6x0Z0c0j2s6u0A2a0e8w8u0Z8b0A7x250}a_4ZaaaD7^a^ad5Sa{aAb660b0aqb87CbHaR0taT9,aC9 149#8/bb1~876qbr1V0{9|0AaS6w7%0Abl19bm7L0o1B110r2V0A0$0d0A2#2s2V6kaQ66b3a|a`9v77bLb5c68#a@7`c998aV8;5+bBcecb3^b9687?aE0ja/7oa(bGcm4x14115=a$5wa6bMcx1~6 148R0G0xbP0H0$6A7`cKc9bV3~aDc3cG1Yc5bS7A5+0D0{6M0jc98~c#8;cI7173750%2U0Nbp0N0U1h6v0A0s0O0XcScY6^bU7=cycrctbE2/c!cD9.040!c)bic,b3c:cK0vcQ0A0P0F0ud3c.9g04cU46cWcsc4cwdv8#0F0e8+c,dy2}0Y5Q2$5xdO0Y5K2z5C1l2CdV8w1U5z1CdL0/0;0?0F04.
Lösung
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import matplotlib.pyplot as plt
import time

# Dieser Teil muss so bleiben!
fig1 = PyodidePlot('plot_2')
fig1.target()


# Ab hier ändern
xdaten = []
ydaten = []

# Wir testen für verschiedene Zahlen ab 10, in 500er Schritten bis 50'000
for n in range(10, 50000, 500):

    start = time.perf_counter()

    for i in range(n):
        n + n

    ende = time.perf_counter()

    dauer = ende - start

    xdaten.append(n)  # für welches n haben wir gemessen
    ydaten.append(dauer)  # wie lange dauerte es um n Additionen zu rechnen

plt.plot(xdaten, ydaten)
plt.title('Laufzeiten')
plt.xlabel('Eingabegrösse (n)')
plt.ylabel('Zeit [s]')
plt.show()

Zusammenhang Eingabegrösse und Laufzeit für naive Multiplikation

Der Multiplikationsoperator * in Python und im Rechner im Allgemeinen ist sehr stark optimiert, damit die Rechnung schnell ist. Diese Optimierungen wollen wir umgehen und einen Algorithmus für 'naive' Multiplikation erstellen.

Aufgabe: naive Multiplikation

Schreibe eine Funktion welche zwei Zahlen a und b multipliziert, ohne dabei den *-Operator zu verwenden.

Du kannst den 'Überprüfen'-Knopf verwenden um deine Funktion zu testen.

###(De-)Aktiviert den Code nach der Zeile # Tests (Groß-/Kleinschreibung wird nicht beachtet)
(Ctrl+I)
Ein- oder Ausstieg aus dem "Split-Screen"-Modus
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
Ein- oder Ausstieg aus dem "Vollbildmodus"
(Esc)
Kürzen/nicht kürzen der Rückmeldungen im Terminal (Standardausgabe & Stacktrace / Starte das Programm erneut zum Anwenden)
Wenn aktiviert, wird der aus dem Terminal kopierte Text in eine Zeile umgewandelt, bevor er in die Zwischenablage kopiert wird.
Verbleibende Versuche : 5/5

.128013öesh8ft2lv1760g3-ndUWbc+pmo(ari=)/wy:*zL,k.45 u050t0c0h0D0F0j0d0U0x0j0D0d0d0G010h0F0z010406050d0V0A0A0D0E0K040O0b0`0s0p050I0`0|0~100^0z04051e171h0I1e0^0t0F0k0(0*0,0.0e0F0p0e0j1v0e0h0?050Z0w0j0c1q0+0-011u1w1y1w0h1E1G1C0h0E1f0h0e0(0B0$0z0D0s0.0i011I1s010g0#0c0s0D0A0c1C0d1$0s1,1K1/1G1=1@0?0a0U12140p0d0k0B0E0d0x1x0D16181{1f0I1X2k1U1W1V1D0t1}0.1y0s1;0B0d1C1n1p0)1J2u0F2w0s0B2B1C0z0E0c1f1`1%2k2Q0s2P1{2t012I0E0}0j0?0l172T0@0_2W2D1-2Z2#0?0i2)2j0^2T2X2:0D2$040q2@2R2_2-1r1K2|2~0S312U331%2{2b2;040T3a2+2`2.363f2}0?0n3j3c1|3m0.370?0m3s2,3d3v2Y3o2~0f3j1i2N2k2B2n0t1W2s3D0x2J1^1f3M1g3K3B2U3I3S0X2V3C350.0Q0?0X0g3j0U3Z2{0g0?0A0V0j0:0z1y0Q0D0:0B0s3I3l3*010=040C44342E2Y0?0D4b3)4d480P4h3u460s0?0w4m2X480H0L3s0U4y3;454d4p042M2J0V0Q0h3:3=3D0B0?0G4K4B1-0A0F0?0o4x4z4L460x0l0?030U0u0A0U0D0U0M0U0w4,0V0d0N0V2N2e2H0P4,0t1n0c2N1|0J0F0E0U0X1|0v514J2i324z4A4c1-4#4%0U2a1|4;1@0e2!2}0d4}0p1;0D0V4,0r2#0R4X4y4Z4d3,040g2b4Q5h360?0F5L4i1-0B0J5O435d2U5g5R360w0?0E1%5v4s3D484a5X3(4n4C4f5+464u4w5/065f5f5F2/0?4F0t4H5c2*5Z5;5S4O5Q685N4E0E4G4I6b2X4N040y6i3D4D4r5{5|4Y4R1K5H2N0h4_5W665 6d62643A0I3$2O3J6J0I3W2l3O172o6Q0D1F6L3M0^6M0Y0!0$04.

Miss die Zeit die benötigt wird um immer mehr (grössere) Zahlen zu multiplizieren. z.B. wie lange dauert es um 10, 1000, 100'000 Zahlen zu multiplizieren?

Question

Untersuche die Laufzeit der Multiplikation-Operation in Abhängigkeit der Eingabegrösse.

Programmiere dazu die Multiplikation in deinem Programm selber: ohne (*) zu verwenden.

Deine Abbildung

Deine Abbildung wird hier erscheinen

###(De-)Aktiviert den Code nach der Zeile # Tests (Groß-/Kleinschreibung wird nicht beachtet)
(Ctrl+I)
Ein- oder Ausstieg aus dem "Split-Screen"-Modus
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
Ein- oder Ausstieg aus dem "Vollbildmodus"
(Esc)
Kürzen/nicht kürzen der Rückmeldungen im Terminal (Standardausgabe & Stacktrace / Starte das Programm erneut zum Anwenden)
Wenn aktiviert, wird der aus dem Terminal kopierte Text in eine Zeile umgewandelt, bevor er in die Zwischenablage kopiert wird.

.128013öeuhq9Tt_l!3-Adcmo(a]Z:L5D ü2xäs;f1v760gn[Wbpri=)/wyPz,k.S48050p0c0i0u0V0k0G0B0q0k0u0G0G0W010i0V0T010406050G0d0r0r0u0U0!040y0b170P0O050Y17191b1d150T04051r1k1u0Y1r150p0V0K0^0`0|0~0e0V0O0e0k1I0e0i13050:0S0k0c1D0{0}011H1J1L1J0i1R1T1P0i0U1s0i0e0^0s0?0T0u0P0~0D011V1F010I0=0c0P0u0r0c1P0G1?0P1|1X1 1T2224130a0B1f1h0O0G0K0s0U0G0q1K0u1j1l281s0Y1.2x1+1-1,1Q0p2a0~1L0P210s0G1P1A1C0_1W2H0V2J0P0s2O1P0T0U0c1s271@2x2%0P2$282G012V0U1a0k130B0J1k2*14162-2Q1}2:2=2@0D2`2w152*2.310u2?040B0m352(372~1E1X3a3c0B0+3g2+3i1@392o323d0z3q2|382 3l3v3b2@0M3z3s293C0~3m2@0L3I2}3t3L2/3E3n0,3Q3B3k3M3V2@0g3Y3j2R3U2;3F040J0N3)3S3!3,3w0J2_2v3h3R3K3@3N3/343|3r3~3u3-3c0J3f443A3*303$3/3p4c3J473_3y4j463T410J3H4o3Z3+4r3P4u4e3D48130J3X4z3?4w4g0J3(4G3 4I4C040D3;4M4l3.0D3{2{4k4q4g0D434Y4p404#4b4(4v4f4P0D4i4-4A3#4:4n4?4H4/3w0D4t4{4N4}4V4y514U3c0D4F564!4:4L5b4*4P0m4S5f4O3w0m4X364)5l3.0m4%2w1v2!2x2O2A0p1-2F3T0q2W251s5z1t5x3~2)5v5F0.2,4|1X0(0P130V0r0T2o0i3z0B5q305V041a0i0T0k0s0i1L0S0)0T0!5.5:5$5(5T130{5|4.3l5*5.5#4T3T5U5W5Y5!614@2/5*10243I4Z3@0q0J13030B0A0V0c0G0c0U0B0h0c0=0B0r0d0|0B0G0s0B1S6z0S210l3=523l131 0O5o2(5%620~0s130W6d5S3M130#0!2W0V0.0#5/662{5}0~12040t3z6?010G6n0402030m0g0H5`0i0j0m71730H6{6X016^0X6O396R1I6U2+6|6Z040)7d6e6g1b0O0/7s6%7f130t7h4j6k3+6m6o0B0o0S0B1H6v0B0F0P0.0U0P7i4q130E0p0u0i216$6P6Y6!7%2.6^0Q0v7V40130!7Z7#7U4c6W6e7p6#7`6|7-7/7E6|7H046p0R0V6w7#0G7^0B0I0C6w0K6v2q7N0.2J0B0w0u1K210B0u7L3:0%0B2T0B0z0N0N7O0*2r0U0V1%8s0S0V0@8B7a748C5j5p7e0(6R2o7+7W047_2{7{7z0s0Z5W8#2w8%7(2/0S130U1@7w7y8/6^6`4c6|0r0V4D8_7,130%8Y3@8 4D8R923T6^957 7e983/8S2(80130X0x6j0B9q8.7j048c1b6;8-7o7*9f7t136h0c9b3@7p7r8}7e646v0I0j5F0d0P7#0U9G3+8{7D4Y069r9s688W9U9B7z5*0V963+8)8+9.308;048?1i9F9K6e8{9V30138,9k7e7g9o4j9#9#6|5*6C0k105.0V0(7!0V0sa27na47B9 6Q8!ap6@94as2/a1av7g9p9raa13210.9=1X7}aG6(049Eav9Iav9M0U9O9Q9S6vay7B9Y369!aB9L137Z0daV9*8/aIa+9taE9{8$9z040naJaw9u0:0U9x3ha!9qaC047Y7!7$9|8(139J6=a$040u0T0TaEaW6_aPaxb78`9m5$9$6l6 6p8f6w0Z0c0k2r6t0B290e8u8s0Z890B7w240|b64Ya9bc7?b5al5Ra,b9bkbdbfbhbm93bjb!8Za(a*bb9}bo7`bq7Gbs0BbG1U0`9`0Bb)a}1UbA18bB7J0p1A10ak8s0$0d0B2!2r2U6jb265aNbVb%7;0476bi8|b+9+7X7@bM5van049ea=bPcrbS9lcva_5*0`6L0kcg047~co8/0G1`700f0d5:0H6L8k8H0I0i9R0O02cQcSbiaY3}bccfci9/chcL9t105;a;ctb,b$c:3T6~138P0H6r2t8?0r6x8Ibxc c(7:4w13c,c{9Hc/c^cpb3cFbxcmavc}7072740o0P0$8q0k8odv21d8c-1}az67cjdddhbU7qbW0!dkcHdB1X9~dO0~doc 0w6z0i0B0Q0G0vdAde9Wb-5ka0ckadcIbadH9t1T7w7RdmdRa`5/0qcIcKd:c|cOc#cR0i0H0dbY6w1TcXe2c%d_dDd*aqdGa37|dgeidi0G0e8)cmc)450Y5P2#5wev0Y5J2y5B1k2BeC8u1T5y1B2|ey0/0;0?04.

Zusammenhang Eingabegrösse und Laufzeit in einem Diagramm

Question

Versuche nun beide Messwerte in einem Diagramm darzustellen.

Deine Abbildung

Deine Abbildung wird hier erscheinen

###(De-)Aktiviert den Code nach der Zeile # Tests (Groß-/Kleinschreibung wird nicht beachtet)
(Ctrl+I)
Ein- oder Ausstieg aus dem "Split-Screen"-Modus
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
Ein- oder Ausstieg aus dem "Vollbildmodus"
(Esc)
Kürzen/nicht kürzen der Rückmeldungen im Terminal (Standardausgabe & Stacktrace / Starte das Programm erneut zum Anwenden)
Wenn aktiviert, wird der aus dem Terminal kopierte Text in eine Zeile umgewandelt, bevor er in die Zwischenablage kopiert wird.