Komplexität Flashcards

1
Q

explique moi la Komplexität en Informatique comme a un enfant de 12 ans stp

A

Bien sûr ! La complexité en informatique, c’est comme essayer de mesurer à quel point un problème ou un programme est difficile pour un ordinateur. Imagine que tu aies un jeu vidéo à terminer, et que tu veuilles savoir à quel point il est difficile. En informatique, on utilise des outils pour mesurer cette difficulté.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

qu’elles sont les type de complexite courament utiliser?

A

Il y a deux types de complexité couramment utilisés : la complexité en temps et la complexité en espace.

Complexité en temps : C’est comme mesurer combien de temps tu mets pour finir le jeu vidéo. Si le jeu est court et que tu le termines en 30 minutes, c’est plutôt simple. Si cela te prend 10 heures, c’est beaucoup plus difficile. De la même manière, en informatique, on essaie de savoir combien de temps un programme va prendre pour résoudre un problème, en fonction de la taille du problème. Plus le temps est court, mieux c’est.

Complexité en espace : C’est comme mesurer combien de mémoire ou d’espace de stockage ton jeu vidéo utilise. Si le jeu ne prend que quelques mégaoctets sur ton ordinateur, c’est simple. Si ça prend des dizaines de gigaoctets, c’est complexe. En informatique, on essaie de savoir combien de mémoire un programme va utiliser pour résoudre un problème, en fonction de la taille du problème. Moins on utilise de mémoire, mieux c’est.

Donc, la complexité en informatique, c’est essentiellement une manière de dire à quel point un problème est difficile pour un ordinateur en termes de temps (combien de temps ça prend) et d’espace (combien de mémoire ça utilise). On cherche toujours des façons de rendre les programmes plus efficaces en minimisant à la fois le temps et l’espace nécessaires pour résoudre un problème, comme essayer de finir un jeu vidéo en moins de temps et en utilisant moins d’espace de stockage.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

nenne die Eigenschaften eines Algorithmus:

A
  • Ein Programm soll nicht unendlich lange laufen
  • Ein Programm darf nicht unendlich groß werden
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

definir Algorithme

A

Bien sûr ! Imagine que tu aies une énorme pile de jouets à ranger dans ta chambre. L’algorithme serait comme les instructions que tu suivrais pour ranger tous ces jouets. Comment cela se passerait-il avec une grande quantité de jouets ?

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Wie verhält sich der Algorithmus bei sehr großen Datenmengen? explique le moi en francais comme a un enfant de 12 ans

A

Bien sûr ! Imagine que tu aies une énorme pile de jouets à ranger dans ta chambre. L’algorithme serait comme les instructions que tu suivrais pour ranger tous ces jouets. Comment cela se passerait-il avec une grande quantité de jouets ?

Efficacité : Un bon algorithme serait comme une manière très rapide et intelligente de ranger les jouets, même s’il y en a beaucoup. Il ne prendrait pas trop de temps.

Gestion de l’espace : L’algorithme serait également bon pour économiser de l’espace. Il ferait en sorte que tous les jouets trouvent leur place, même si tu n’as pas beaucoup de place dans ta chambre.

Travail en équipe : Parfois, pour ranger tous ces jouets, tu pourrais demander à des amis de t’aider. C’est un peu comme la parallélisation, où plusieurs personnes travaillent en même temps pour aller plus vite.

Organisation : L’algorithme pourrait aussi t’aider à organiser tes jouets en groupes, comme les poupées d’un côté, les voitures de l’autre, etc. Cela rendrait les choses plus faciles à trouver.

Nettoyage continu : Si tu reçois de nouveaux jouets tout le temps, tu ne veux pas attendre d’en avoir beaucoup pour les ranger. L’algorithme s’occuperait de les ranger au fur et à mesure, comme les jouets qui arrivent.

En résumé, un algorithme est comme un ensemble de règles pour résoudre un problème, comme ranger des jouets, même si tu en as beaucoup. Un bon algorithme le ferait rapidement, économiserait de l’espace, pourrait travailler avec d’autres personnes, organiserait les jouets et s’occuperait même des nouveaux jouets qui arrivent tout le temps.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

explique le moi en francais Bachmann-Landau-Notation comme a un enfant de 12 ans

A

La notation de Bachmann-Landau, parfois appelée notation “big O”, est un moyen de dire à quel point un algorithme est rapide ou lent en fonction de la taille de son entrée, comme une liste de nombres. Imagine que tu aies une boîte de jouets, et tu veux savoir combien de temps il te faudrait pour trier ces jouets par taille.

Si tu as 10 jouets, tu pourrais les trier très rapidement, peut-être en 1 minute.
Si tu as 100 jouets, ça te prendrait peut-être un peu plus de temps, disons 10 minutes.
Si tu as 1000 jouets, cela prendrait encore plus de temps, peut-être 2 heures.
La notation de Bachmann-Landau, en termes simples, te dit combien de temps cela prendrait pour trier tes jouets si tu en avais beaucoup, beaucoup plus, comme des millions ou des milliards de jouets. Cela t’aide à comprendre comment l’algorithme ralentit à mesure que la taille de l’entrée (les jouets) augmente.

La notation de Bachmann-Landau utilise des symboles comme “O(n)” pour dire que l’algorithme prendrait un temps proportionnel à la taille de l’entrée, ou “O(n^2)” pour dire que cela prendrait beaucoup plus de temps à mesure que l’entrée augmente. Donc, c’est comme une manière de mesurer à quel point un algorithme est rapide ou lent en fonction de la taille du problème qu’il doit résoudre, tout comme trier des jouets dans une boîte.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

beispiel von Komplexitätsklassen

A

O(1), O(log(n)), O(n), O(n²), usw.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

was ist eine Klasse?

A

eine Klasse ist ein Menge von Funktionen

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

wie verhält es sich die Klasse O(1)?

A
  • Ausführungszeit ( temps d’exécution) ist konstant
  • Unabhängig von der Anzahl der Eingabedaten
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

was ist die Zeitkomplexität?

A

Die Zeitkomplexität eines Algorithmus beschreibt, wie sich die Ausführungsdauer mit steigender Eingabemenge verändert. Man analysiert dies, indem man die Anzahl grundlegender Operationen (wie Zuweisungen, Vergleiche, Arrayzugriffe) zählt und als Funktion darstellt. Das Messen der Laufzeit ist ungenau, da es von Hardware, Systemauslastung und Programmiersprache abhängt.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

was ist Die Platzkomplexität ?

A

Die Platzkomplexität eines Algorithmus beschreibt den Speicherplatzbedarf in Abhängigkeit von der Eingabemenge, ohne den Speicherbedarf der Eingabedaten selbst einzubeziehen. Es wird analysiert, wie der Speicherbedarf wächst, wenn mehr Daten verarbeitet werden. Die Analyse beinhaltet die Berechnung der Stackgröße und die Codeanalyse, wobei Faktoren wie Hilfsvariablen, Schleifen und Rekursion berücksichtigt werden. Platzkomplexität ist schwieriger zu bestimmen als Zeitkomplexität und oft weniger relevant, da Speicher leichter erweiterbar ist. In .NET-Umgebungen sind typische Speichergrößen für den Stack 1-4 MB und für den Heap 1.5 GB oder mehr.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

O(n) – linearer Aufwand bedeutet

A
  • Ausführungszeit wächst linear mit der Anzahl der Eingabedaten
  • Verdoppelt sich die Anzahl der Eingabedaten, dann verdoppelt sich der Aufwand
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

beispiele von O(n) – linearer Aufwand

A
  • Beispiele:
  • Im Array?
  • Finden eines bestimmten Elements in einem Array
  • Summieren aller Elemente eines Arrays.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

O(n²) – quadratischer Aufwand bedeutet :

A

. Ausführungszeit wächst quadratisch mit der Anzahl der Eingabedaten
* Verdoppelt sich die Anzahl der Eingabedaten, dann vervierfacht sich der Aufwand

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q
  • Beispiele von O(n²) – quadratischer Aufwand
A
  • Einfache Sortieralgorithmen, z.B. Bubble Sort
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

O(log n) – logarithmischer Aufwand bedeutet

A
  • Ausführungszeit wächst ungefähr um einen konstanten Betrag, wenn sich die Anzahl der
    Eingabedaten verdoppelt

Le temps d’exécution augmente approximativement d’un montant constant lorsque le nombre de
données d’entrée doublent

17
Q

Beispiele O(log n) – logarithmischer Aufwand

A
  • Binäre Suche in einem sortierten Array
18
Q

Beispiel 1
function InitArray(int[] a, int i)
return a[i]
noitcnuf

was hilft uns zu ermitteln , dass es sich um O(1) handeln hier : bitte sei präzise und kurz

A

In der gegebenen Funktion InitArray wird auf ein bestimmtes Element a[i] eines Arrays zugegriffen und zurückgegeben. Der Zugriff auf ein bestimmtes Element in einem Array dauert konstante Zeit, unabhängig von der Größe des Arrays. Daher handelt es sich hier um O(1), also konstanten Aufwand.

19
Q

Beispiel 2
Wie verhält sich der Algorithmus mit wachsender Anzahl an Eingabedaten?
function InitArray(int[] a)
for (int i = 0; i < 5; i++)
a[i] = 0
rof
noitcnuf

was hilft uns zu ermitteln , dass es sich um O(1) handeln hier : bitte sei präzise und kurz

A

In der gegebenen Funktion InitArray wird jedes Element eines Arrays a auf den Wert 0 gesetzt, und die Schleife läuft für eine feste Anzahl von Iterationen (hier 5). Da die Anzahl der Iterationen unabhängig von der Größe des Eingabe-Arrays ist, bleibt die Laufzeit konstant, und somit handelt es sich um O(1).

20
Q

beispiel 3:

Wie verhält sich der Algorithmus mit wachsender Anzahl an Eingabedaten?
function InitArray(int[] a)
n = length(a)
for (int i = 0; i < n; i++)
a[i] = 0
rof
noitcnuf

was hilft uns zu ermitteln , dass es sich um O(n) handeln hier : bitte sei präzise und kurz

A

Die gegebene Funktion InitArray setzt jedes Element eines Arrays a auf den Wert 0. Die Schleife läuft in diesem Fall jedoch für eine Anzahl von Iterationen, die von der Länge des Eingabe-Arrays a abhängt (n). Daher wächst die Laufzeit linear mit der Anzahl der Elemente im Array. Dies entspricht einer Zeitkomplexität von O(n)

21
Q

Beispiel 4:

  • Wie verhält sich der Algorithmus mit wachsender Anzahl an Eingabedaten?
    function InitArray(int[] a)
    n = length(a)
    for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++)
    a[j] = i + j;
    rof
    rof
    noitcnuf

was hilft uns zu ermitteln , dass es sich um O(n²) handeln hier : bitte sei präzise und kur

A

Der gegebene Algorithmus hat zwei verschachtelte Schleifen, jede mit einer Länge von n, wobei n die Länge des Eingabe-Arrays a ist. Da beide Schleifen in Abhängigkeit von n laufen, ergibt sich insgesamt eine Laufzeitkomplexität von O(n²), was einer quadratischen Zeitkomplexität entspricht.

22
Q

Dreieckstausch

A

Mit Hilfe einer temporären Hilfsvariable t
* int a = 24
int b = 17
int t = a # a sichern
a = b # neuen Wert in a schreiben
b = t # gesicherten Wert von a nach b schreiben

23
Q

XOR Swap

A

Ohne Hilfsvariable mit XOR
* a = a XOR b
b = a XOR b
a = a XOR b

  • Wie sieht die Wahrheitstabelle von XOR für 2 Variablen aus?
  • Wie sieht die Wahrheitstabelle von XOR für 3 Variablen aus?
  • Also gilt:
    a’ = a XOR b
    b’ = a’ XOR b = (a XOR b) XOR b = a XOR (b XOR b) = a XOR 0 = a
    a’’ = a’ XOR b’ = (a XOR b) XOR a = b XOR (a XOR a) = b XOR 0 = b
24
Q

Tupel Swap

A
  • In Python (u.a.) könnte man es auch so machen:
  • a = 3
    b = 7
    a, b = b, a
  • Weitere Beispiele: https://de.wikipedia.org/wiki/Dreieckstausch