Was ist ein Algorithmus?

12

Was genau ist ein Algorithmus, wie in was bedeutet Algorithmus? Das Wenige, was ich verstehe, ist, dass es nicht spezifisch für eine bestimmte Sprache oder ein bestimmtes Designmuster ist, sondern eines der grundlegendsten Prinzipien (ich denke, diese Frage lässt mich dumm aussehen).

Eine der "Möglichkeiten", die ich zu verstehen habe, ist, dass es die Methode bedeutet, etwas zu erledigen, das als Liste im Pseudocode geschrieben werden könnte.

Wenn ich komplizierten Code schreibe, denke ich, was mit was zu tun ist und wie ich dahin komme (nicht in einer Programmiersprache), dann schreibe ich das in Code. Ist das ein guter Weg, und hat das etwas mit Algorithmen zu tun?

(Ich wollte hier eher nach Stackoverflow fragen, weil es sich nicht um ein bestimmtes Problem / eine bestimmte Sprache handelt. Außerdem habe ich das Gefühl, dass die Mehrheit der Leute hier das Warum oder zumindest die Antworten hier detaillierter sind, als nach Stackoverflow wo es anders ist, tut mir leid wenn ich dort hätte fragen sollen)

Jonathan.
quelle
5
Google? Wiki? google.com/search?q=algorithm
Maglob
1
@Apalala: Ich glaube nicht, dass diese Einschränkungen zutreffen.
Josh K
2
@Apalala: Finite , nicht bekannt .
Josh K
2
@ Jonathan: "Worte, die ich nachschlagen muss"? Welche Wörter? Sei genau . Diese Seite ist keine Zauberei. Wir kennen dich nicht. Wir wissen nicht, was Sie lesen. Wir wissen nicht, was Sie verwirrt hat. Bitte seien Sie genau .
S.Lott
1
@Apalala: "Endlich" bedeutet "begrenzt", nichts weiter. Ein Algorithmus wird garantiert irgendwann anhalten. Es ist viel einfacher, die Endlichkeit zu beweisen, wenn Sie eine Art Vorhersagemethode für das Ende haben. Daher sind Algorithmen in der Regel vorhersagbar, aber die Vorhersagbarkeit ist nicht in der üblichen Definition von Algorithmen enthalten.
David Thornley

Antworten:

19

Ein Algorithmus ist eine endliche Folge wohldefinierter Anweisungen zum Berechnen einer Funktion (oder zum Ausführen einer Prozedur), die in einem wohldefinierten Endzustand endet.

John Bode
quelle
1
+1. "Endlich, genau definiert und effektiv" sind die drei Kriterien im Wikipedia-Eintrag. Sie haben auch alle drei hier.
S.Lott
Ich bin bereit, die von @ Jörg zitierten Videos anzuschauen, aber aus meiner aktuellen Sicht müssen nicht nur die Schritte endlich sein. Wenn die Ressourcen (einschließlich der Zeit) nicht begrenzt sind, kann die Prozedur als alles, aber nicht als Algorithmus aufgerufen oder bezeichnet werden .
Apalala
@Apalala - Ich habe meine Lehrbücher durchgesehen und sehe diese Einschränkung nirgendwo. Es ist möglich, dass ein Algorithmus für einen bestimmten Datensatz oder eine bestimmte Eingabe nicht beendet wird (Algorithmen wie die Newton-Raphson-Methode zum Auffinden einer Wurzel bleiben möglicherweise in einer Endlosschleife stecken), aber dies macht den Algorithmus nicht zu einem Algorithmus.
John Bode
@ John Oscillations können und routinemäßig in Newton-Raphson nachgewiesen werden.
Apalala
1
@Apalala: Das klingt eher nach der Definition eines Programms als nach einem Algorithmus. Diese Idee von diskreten Schritten ist in Turing-Maschinen, Registermaschinen, Maschinen mit wahlfreiem Zugriff und natürlich in unseren tatsächlichen physischen Computern vorhanden, auch in so ziemlich jeder Programmiersprache und sogar, wenn auch impliziter, in der Lambda-Rechnung. Dies ist jedoch eine willkürliche Einschränkung, die Algorithmen nicht inhärent ist. Analoge Algorithmen haben beispielsweise keine diskreten Schritte (das ist die Definition eines analogen Algorithmus) und können tatsächlich mit einem analogen Computer implementiert werden.
Jörg W. Mittag
15

Dies ist eigentlich eine ziemlich interessante Frage, und in der Tat immer noch eine offene Forschungsfrage.

Yuri Gurevich, einer der Giganten der Algorithmentheorie, hält derzeit eine Videovortragsreihe auf der Microsoft-Community-Website Channel9:

Wie Sie sehen, ist Ihre eigentliche Frage der Titel der zweiten Vorlesung. Ich würde Ihnen jedoch dringend empfehlen, sich alle drei anzuschauen.

Insbesondere die erste enthält einige Beispiele für Algorithmen, die so gut wie alle Definitionen ungültig machen, die in den meisten anderen Antworten angegeben sind.

Jörg W. Mittag
quelle
2
Danke für die Links. Im Begleittext des ersten Videos werden Sie als Teil der Definition eines Algorithmus Folgendes bemerken: "Endgültige Beendigung". Die Beendigung ist ein wesentlicher Bestandteil der Definition eines Algorithmus. Deshalb sind Betriebssysteme und nicht terminierende Server keine Algorithmen.
LIProf
4

Ein Algorithmus ist wie ein gutes Kochrezept . Sie haben einige Eingaben, einige gut definierte Zwischenschritte und erhalten ein Endergebnis.

Angewandt auf die Programmierung ist dies eine eindeutige Beschreibung der Schritte, die Sie zur Lösung eines bestimmten Problems ausführen müssen. Alles, was Sie in der Programmiersprache Ihrer Wahl aufschreiben können, kann als Algorithmus angesehen werden. In der Regel wird der Begriff jedoch nur für allgemeine logische oder mathematische Aufgaben wie Sortieren oder Suchen verwendet.

Alexander Gessler
quelle
Es gibt viele Algorithmen, die nicht unbedingt ein endgültiges Ergebnis liefern. Ein Betriebssystem oder ein Webserver ist beispielsweise ein Algorithmus, bei dem das Erzielen eines endgültigen Ergebnisses normalerweise als Fehler angesehen wird.
Jörg W Mittag
@ JörgWMittag aber ist ein OS oder ein Webserver "ein Algorithmus"? Ich denke, sie sind es nicht - sie können Teilprobleme ihrer Domäne mithilfe von Algorithmen lösen - und in jedem Fall brauchen sie definitiv ein Endergebnis - aber sie haben auch Teile, die keine Algorithmen sind, und insgesamt sind sie es nicht. t Algorithmen. (Wie Sie bereits in einem anderen Kommentar gesagt haben - Betriebssysteme und Webserver sind Programme, aber nicht unbedingt Algorithmen ).
Andres F.
2

Ein Algorithmus ist ein Satz von Regeln oder Prozessen (in einer Berechnung), die zur Problemlösung verwendet werden. Grundsätzlich gibt es ein Problem, Sie möchten eine Lösung, und der Prozess für diese Lösung ist ein Algorithmus. Ein Algorithmus hat eine endliche Anzahl von Regeln / Prozessen, um zu einer Lösung zu gelangen.

Wenn Sie wie Edsger W. Dijkstra sind , schreiben Sie Ihren Algorithmus auf ein Blatt Papier und erarbeiten / verfeinern den Algorithmus auf Papier, bis Sie mit Ihren Algorithmen zufrieden sind. Andernfalls (insbesondere beim Schreiben von Dokumentationen) wird ein Ablaufdiagramm verwendet, um den Ablauf eines Algorithmus / Prozesses grafisch darzustellen. Dies ermöglicht es anderen, das Ablaufdiagramm zu kritisieren und gegebenenfalls zu verbessern (ohne sich Gedanken darüber zu machen, welche Programmiersprache benötigt wird).

Ich weiß nicht, ob das deine Frage beantwortet.

Buhake Sindi
quelle
Ich mag das Wortset nicht, weil es "nicht bestellt" bedeutet. Ich bevorzuge "Sequenz" oder Event-Tupel, um im Mathe-Bereich zu bleiben
BenjaminB
@ Ubiquité, Set bedeutet nicht unbedingt "nicht bestellt". Sie können einen Satz in die von Ihnen gewünschte Reihenfolge einteilen (z. B. eine zufällige Reihenfolge). Dies erfordert jedoch keine Ablehnung, da die Leute das Wort "Menge" interpretieren. Außerdem können Sie eine zusammengesetzte Menge haben, die eine Gruppierung von Mengen ist, die auch Teil der Algorithmen ist. Daher kann "gesetzt" alles sein, solange es angemessen als algorithmische Lösung für ein Problem verwendet wird.
Buhake Sindi
Ich habe nicht abgelehnt!
BenjaminB
Tut mir leid, ich wollte dich nicht für die Ablehnung verantwortlich machen. Der Downvoter sollte die Downvote explizit begründen.
Buhake Sindi
1

Algorithmus: Eine gut geordnete Menge von Operationen, die 1) eindeutig und 2) effektiv berechenbar sind, so dass die Ausführung der Operationen ab der ersten ein Ergebnis nach einer endlichen Anzahl von Operationen ergibt.

ThomasMcLeod
quelle
Gegenbeispiel: ein Betriebssystem. Es ist zu keinem Ergebnis überhaupt , in der Tat, dass in der Regel einen Fehler betrachtet.
Jörg W Mittag
@ Jörg, nun, das Betriebssystem liefert viele Ergebnisse, die zusammengenommen das Gesamtergebnis der Bereitstellung von Systemdiensten für Anwendungen ergeben.
ThomasMcLeod
@ JörgWMittag Wie ich in anderen Kommentaren zu Ihnen gesagt habe, wäre eine Schlussfolgerung zu Ihrer Beobachtung, dass ein Betriebssystem in der Tat kein Algorithmus ist;)
Andres F.
1

Algorithmus Hierbei handelt es sich um die Kombination von aufeinanderfolgenden Schritten (diese Schritte können Berechnungen, Datenverarbeitung und Argumentationsaufgaben sein), mit denen ein Problem auf sehr einfache und effiziente Weise gelöst werden kann.

Es ist so effizient gestaltet, dass es in einer begrenzten Menge an Raum und Zeit ausgedrückt werden kann. Wir können es in jeder Programmiersprache implementieren.

Eigenschaften eines Algorithmus: Im Folgenden sind die Haupteigenschaften eines Algorithmus aufgeführt:

Ein Algorithmus muss einen eindeutigen Namen haben. Es sollte explizit definierte Sätze von Ein- und Ausgängen haben. Ein Algorithmus muss in sequentieller Reihenfolge mit eindeutigen Operationen vorliegen. Es muss einen Endpunkt haben, dh es hält in einer endlichen Zeitspanne an. Klicken Sie hier, um mehr über Entwurf und Analyse von Algorithmen zu erfahren

Mohd Junaid
quelle
0

Ich benutze den Begriff, um eine Formel zur Lösung eines bestimmten Problems zu beschreiben. Die Formel muss nicht unbedingt in Mathematik geschrieben sein oder eine 1: 1-Beziehung zu einer Methode haben. In der Schule sind Algorithmen und Datenstrukturen eng miteinander verwandt und können als mathematische Formeln geschrieben oder mit Beweisen bewiesen werden.

P. Brian Mackey
quelle
0

Ein Algorithmus ist eine Abstraktion eines Computerprogramms und besteht aus einer Reihe von Anweisungen, mit denen eine genau definierte Aufgabe in einer begrenzten Anzahl von Schritten ausgeführt werden kann. endliche) Aufgaben für sich. Obwohl es (korrekte) Programme gibt, die allgemein als nicht algorithmisch bekannt sind, funktionieren sie alle, indem sie algorithmische Teile in einem bestimmten Muster wiederholen. (Interessanter sind die Programme, deren Beendigungsstatus nicht bekannt ist, aber die meisten Programmierer setzen sich nicht absichtlich mit solchen Dingen auseinander; ich weiß, dass ich das nicht tue!)

Donal Fellows
quelle
0

IMO weiß das niemand so recht :) Ich habe gesehen, dass der Begriff nur auf mathematische Berechnungsfunktionen angewendet wird, auf jede Funktion, die Eingaben entgegennimmt und Ausgaben erzeugt, und auf alles , was Eingaben entgegennimmt und irgendeine Operation darauf ausführt.

Würden Sie Folgendes als Algorithmus betrachten?

  1. Eine Funktion, die den Zinssatz eines Kredits über einen Zeitraum von 20 Jahren berechnet
  2. Geschäftslogik, die prüft, ob alle Informationen in einem Kreditantrag eingegeben wurden
  3. Eine finderFunktion, die eine Datenbank nach einem Kundenobjekt abfragt
  4. Eine "Helfer" -Funktion, die die Dateneingabe aufräumt und formatiert
  5. Eine Funktion, die eine XML-Datei analysiert und Daten Geschäftsobjekten zuordnet
  6. Eine Klasse, die Eingaben entgegennimmt und diese in eine Textdatei schreibt
Wayne Molina
quelle
0

Ein Algorithmus ist eine Idee, eine Methode, eine Technik, "smarts" zur Berechnung oder Ausführung einer Aufgabe, die abstrakter Natur ist. Da sie jedoch auf Computern in der realen Welt ausgeführt wird, streben wir danach, so wenig Ressourcen wie möglich zu verwenden Das sind in der Computerwelt Zeit und Erinnerung.

JasonGenX
quelle
0

Ein Algorithmus ist eine Folge von genau definierten Schritten, die in endlicher Zeit ein Ergebnis liefern.

Gut definierter Schritt: Das können Sie genau definieren oder berechnen. Wenn Sie den Schritt lesen, wissen Sie, was Sie tun müssen und wie Sie es tun müssen. Insbesondere können Sie es in einer Programmiersprache schreiben, die Sie kennen, und sicherstellen, dass das Programmfragment genau mit dem Schritt übereinstimmt.

Reihenfolge: Die Schritte werden in einer angegebenen Reihenfolge ausgeführt. Schritte können abhängig von den Daten mehrmals ausgeführt werden (Schleifen) oder überhaupt nicht ausgeführt werden, abhängig von den Daten (if-Anweisungen). Parallele Algorithmen erlegen den Schritten nur eine Teilreihenfolge auf, daher bin ich hier zu stark vereinfacht. Es wäre korrekter, es als eine teilweise geordnete Menge als eine Sequenz zu beschreiben, aber ich wollte die Wörter ein wenig einfacher halten. Außerdem ist es leicht möglich, ein teilweise geordnetes Set in eine vollständige Reihenfolge einzubetten.

Ergebnis: Ein Endzustand oder Wert. Es muss nicht vorhersehbar sein, aber es muss ein definitives Ende sein, das eine Bedingung erfüllt. Dies bedeutet, dass ein Betriebssystem kein Algorithmus ist, obwohl es viele davon verwendet.

Endlich: Ein Algorithmus wird garantiert irgendwann anhalten, zumindest auf einer Maschine, die lange genug laufen kann. Es ist nicht unbedingt garantiert, dass das System in einer vorhersehbaren Zeit anhält, und es ist nicht garantiert, dass es anhält, bevor die Sonne sich ausdehnt und auf einer vorhandenen Maschine rot wird. Dies bedeutet auch, dass ein Betriebssystem kein Algorithmus ist, da es im Idealfall für immer ausgeführt wird. Ich habe das Wort "Prozedur" gesehen, das verwendet wird, um etwas zu beschreiben, das ein Algorithmus wäre, wenn wir sicher wären, dass es irgendwann aufhören würde. (Es ist möglich, einen Algorithmus zu haben, der in einer unbekannten Zeitspanne stoppt. Nehmen wir an, Goldbachs Vermutung wurde in einem nichtkonstruktiven Beweis mathematisch als falsch bewiesen, sodass es eine gerade Zahl> 2 gab, die nicht die Summe zweier Primzahlen war Ein Algorithmus, der einfach gerade Zahlen testet, würde dann irgendwann enden.

Der Algorithmus ist eine absichtlich abstrakte Art von Dingen, daher betrachten wir keine Fragen wie "Ist es physikalisch möglich, dies vor dem Tod des Universums auszuführen?". Sie wären zu schwer zu beantworten. Wenn es sich um Computeroperationen handelt, ist es einfach, sie in einer Programmiersprache zu implementieren.

David Thornley
quelle
-1

Wenn ich eine allgemeine Definition geben müsste, würde ich sagen, ein Algorithmus ist eine Formel zum Lösen eines Computerproblems, das komplexer als die offensichtliche Brute-Force-Lösung ist und am Ende effizienter als diese ist.

Es ist auch wichtig zu beachten, dass ein Algorithmus kein spezifischer Quellcode ist. Es ist die Berechnung selbst. Dies bedeutet unter anderem, dass jede Turing-vollständige Sprache jeden Algorithmus implementieren kann, den jede andere Turing-vollständige Sprache implementieren kann.

Mason Wheeler
quelle
Diese Antwort hat mir sehr gut gefallen, und ich denke, wir könnten noch ein bisschen weiter gehen und sagen (obwohl dies nicht mit der ursprünglichen Frage zusammenhängt): Jeder Algorithmus ist eine Optimierung einer Brute-Force- / Baum-Suchlösung. Fragte mich, ob es formal bewiesen werden kann.
Mojuba
-1 "Algorithmus" ist ein gut definierter mathematischer Ausdruck.
Apalala
1
@Apalala Also, was hindert Sie daran, es aus Gründen der Klarheit oder zum Beispiel eines besseren Verständnisses seines Wesens neu zu definieren? Algorithmus als "Befehlssatz" sagt mir fast nichts.
Mojuba
1
@mojuba Es ist mir wirklich egal, ob der Begriff neu definiert wird, aber ich denke, dass die traditionelle Definition nützlich war, da sie zumindest zwischen Möglichkeiten zur Lösung von Problemen unterschieden hat: Ein Algorithmus ist ein Rezept zur Lösung eines Problems unter Verwendung endlicher Ressourcen . Ändern Sie diese Definition, und die absehbare Folge ist, dass wir uns ein anderes Wort einfallen lassen müssen, das dasselbe bedeutet. Verflixt! Das gesamte Wissen, das im letzten Jahrhundert über Berechenbarkeit und Komplexität gewonnen wurde, geht verloren, ohne dass eine solide Definition des Algorithmus erforderlich wäre !
Apalala
1
Eine Brute-Force-Suche ist ein Algorithmus. Es ist im Allgemeinen kein hübscher Algorithmus und es lohnt sich im Allgemeinen nicht, darüber zu schreiben. Ich sehe keinen wirklichen Nutzen darin, rohe Gewalt auszuschließen, und in vielen Fällen ist nicht klar, was "besser als rohe Gewalt" eigentlich bedeutet.
David Thornley