Suche…


Bemerkungen

Einführung in Algorithmen

Algorithmen sind in der Informatik und in der Softwaretechnik allgegenwärtig. Die Auswahl geeigneter Algorithmen und Datenstrukturen verbessert unsere Programmeffizienz in Bezug auf Kosten und Zeit.

Was ist ein Algorithmus? Informell ist ein Algorithmus eine Prozedur, um eine bestimmte Aufgabe auszuführen. [Skiena: 2008: ADM: 1410219] Ein Algorithmus ist ein genau definiertes Berechnungsverfahren, das einen bestimmten Wert (oder eine Menge von Werten) als Eingabe annimmt und als Ausgabe einen Wert oder eine Menge von Werten erzeugt. Ein Algorithmus ist somit eine Folge von Rechenschritten, die die Eingabe in die Ausgabe transformieren. Cormen et al. al. stellt nicht ausdrücklich fest, dass ein Algorithmus nicht unbedingt eine Eingabe erfordert. [Cormen: 2001: IA: 580470]

Formal muss ein Algorithmus fünf Merkmale erfüllen: [Knuth: 1997: ACP: 260999]

  1. Endlichkeit Ein Algorithmus muss immer nach einer endlichen Anzahl von Schritten beendet werden.
  2. Bestimmtheit Jeder Schritt eines Algorithmus muss genau definiert sein. Die auszuführenden Maßnahmen müssen genau festgelegt werden. Auf diese Eigenschaft bezieht sich [Cormen: 2001: IA: 580470] mit dem Begriff "wohldefiniert".
  3. Eingabe Ein Algorithmus hat null oder mehr Eingaben . Hierbei handelt es sich um Größen, die dem Algorithmus zunächst vor dem Start oder dynamisch bei der Ausführung gegeben werden.
  4. Ausgabe . Ein Algorithmus hat einen oder mehrere Ausgänge . Dies sind Größen, die eine bestimmte Beziehung zu den Eingaben haben. Wir erwarten, dass ein Algorithmus die gleiche Ausgabe erzeugt, wenn immer wieder dieselbe Eingabe erfolgt.
  5. Wirksamkeit Es wird allgemein erwartet, dass ein Algorithmus effektiv ist . Seine Operationen müssen so grundlegend sein, dass sie von jemandem, der Bleistift und Papier verwendet, im Prinzip und in einer begrenzten Zeitspanne genau ausgeführt werden können.

Eine Prozedur, die keine Endlichkeit aufweist, aber alle anderen Eigenschaften eines Algorithmus erfüllt, kann als Berechnungsmethode bezeichnet werden . [Knuth: 1997: ACP: 260999]

Ein Beispiel für ein algorithmisches Problem

Ein algorithmisches Problem wird spezifiziert, indem der vollständige Satz von Instanzen beschrieben wird, an denen er arbeiten muss, und seine Ausgabe, nachdem er auf einem dieser Instanzen ausgeführt wurde. Diese Unterscheidung zwischen einem Problem und einem Problemfall ist grundlegend. Das als Sortieren bekannte algorithmische Problem ist wie folgt definiert: [Skiena: 2008: ADM: 1410219]

  • Problem: Sortieren
  • Eingabe: Eine Folge von n Schlüsseln a_1, a_2, ..., a_n .
  • Ausgabe: Die Neuordnung der Eingabesequenz, sodass a'_1 <= a'_2 <= ... <= a'_{n-1} <= a'_n

Eine Instanz von Sortier könnte ein Array von Zeichenketten, wie beispielsweise sein { Haskell, Emacs } oder eine Folge von Zahlen , wie beispielsweise { 154, 245, 1337 } .

Erste Schritte mit dem Simple Fizz Buzz-Algorithmus in Swift

Für diejenigen unter Ihnen, die mit der Programmierung in Swift noch nicht vertraut sind, und für diejenigen, die aus verschiedenen Programmiergrundlagen wie Python oder Java stammen, sollte dieser Artikel hilfreich sein. In diesem Beitrag werden wir eine einfache Lösung für die Implementierung schneller Algorithmen diskutieren.

Fizz Buzz

Sie haben möglicherweise Fizz Buzz als Fizz Buzz, FizzBuzz oder Fizz-Buzz geschrieben. Sie beziehen sich alle auf dasselbe. Dieses "Ding" ist heute das Hauptthema der Diskussion. Erstens, was ist FizzBuzz?

Dies ist eine häufige Frage, die in Vorstellungsgesprächen auftaucht.

Stellen Sie sich eine Reihe von Zahlen von 1 bis 10 vor.

1 2 3 4 5 6 7 8 9 10

Fizz und Buzz beziehen sich auf eine beliebige Zahl, die ein Vielfaches von 3 bzw. 5 ist. Wenn eine Zahl durch 3 teilbar ist, wird sie durch fizz ersetzt. Wenn eine Zahl durch 5 teilbar ist, wird sie durch Buzz ersetzt. Wenn eine Zahl gleichzeitig ein Vielfaches von 3 UND 5 ist, wird die Zahl durch "fizz buzz" ersetzt. Im Wesentlichen emuliert es das berühmte Kinderspiel "Fizz Buzz".

Um an diesem Problem zu arbeiten, öffnen Sie Xcode, um einen neuen Spielplatz zu erstellen, und initialisieren Sie ein Array wie folgt:

// for example 
let number  = [1,2,3,4,5]
// here 3 is fizz and 5 is buzz

Um alle Fizz und Buzz zu finden, müssen wir das Array durchlaufen und prüfen, welche Zahlen Fizz und welche Buzz sind. Erstellen Sie dazu eine for-Schleife, um das von uns initialisierte Array zu durchlaufen:

for num in number {
  // Body and calculation goes here
}

Danach können wir einfach die "if else" -Bedingung und den Moduloperator in swift dh -% verwenden, um Fizz und Buzz zu lokalisieren

for num in number {
  if num % 3 == 0 {
    print("\(num) fizz")
  } else {
    print(num)
  }
}

Großartig! Sie können zur Debug-Konsole im Xcode-Spielplatz gehen, um die Ausgabe anzuzeigen. Sie werden feststellen, dass die "Fizzes" in Ihrem Array aussortiert wurden.

Für den Buzz-Teil verwenden wir dieselbe Technik. Probieren Sie es aus, bevor Sie den Artikel durchblättern. Sie können Ihre Ergebnisse mit diesem Artikel vergleichen, wenn Sie damit fertig sind.

for num in number {
  if num % 3 == 0 {
    print("\(num) fizz")
  } else if num % 5 == 0 {
    print("\(num) buzz")
  } else {
    print(num)
  }
}

Überprüfen Sie die Ausgabe!

Es ist ziemlich einfach - Sie haben die Zahl durch 3 geteilt, fizz und die Zahl durch 5 geteilt, Summen. Erhöhen Sie jetzt die Zahlen im Array

let number = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]

Wir haben den Zahlenbereich von 1-10 auf 1-15 erhöht, um das Konzept eines "Fizz-Buzz" zu demonstrieren. Da 15 ein Vielfaches von 3 und 5 ist, sollte die Zahl durch "fizz buzz" ersetzt werden. Versuchen Sie es selbst und prüfen Sie die Antwort!

Hier ist die Lösung:

for num in number {
  if num % 3 == 0 && num % 5 == 0 {
    print("\(num) fizz buzz")
  } else if num % 3 == 0 {
    print("\(num) fizz")
  } else if num % 5 == 0 {
    print("\(num) buzz")
  } else {
    print(num)
  }
}

Warten Sie ... es ist noch nicht vorbei! Der ganze Zweck des Algorithmus besteht darin, die Laufzeit richtig anzupassen. Stellen Sie sich vor, wenn der Bereich von 1-15 auf 1-100 ansteigt. Der Compiler prüft jede Zahl, um festzustellen, ob sie durch 3 oder 5 teilbar ist. Dann würde sie die Zahlen erneut durchlaufen, um zu prüfen, ob die Zahlen durch 3 und 5 teilbar sind zweimal - es müsste die Zahlen zuerst um 3 und dann um 5 laufen. Um den Vorgang zu beschleunigen, können wir unserem Code einfach sagen, dass er die Zahlen direkt durch 15 teilen soll.

Hier ist der endgültige Code:

for num in number {
  if num % 15 == 0 {
    print("\(num) fizz buzz")
  } else if num % 3 == 0 {
    print("\(num) fizz")
  } else if num % 5 == 0 {
    print("\(num) buzz")
  } else {
    print(num)
  }
}

So einfach können Sie jede Sprache Ihrer Wahl verwenden und loslegen

Viel Spaß beim Codieren



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow