Ich werde die gleiche Antwort geben wie beim letzten Mal, als diese Frage auftauchte.
Verstehen Sie zunächst, dass es zum Zeitpunkt des Schreibens keine gute formale Definition von "Algorithmus" gibt. Das Schlüsselwort hier ist "formal".
Es gibt jedoch kluge Leute, die daran arbeiten.
Was wir wissen ist, dass was auch immer ein "Algorithmus" ist, er irgendwo zwischen "mathematischer Funktion" und "Computerprogramm" liegt.
Eine mathematische Funktion ist der formale Begriff einer Zuordnung von Eingaben zu Ausgaben. So ist beispielsweise "sortieren" eine Zuordnung zwischen einer Folge von bestellbaren Elementen und einer Folge von bestellbaren Elementen desselben Typs, die jede Folge ihrer geordneten Reihenfolge zuordnet. Diese Funktion kann mit verschiedenen Algorithmen implementiert werden (z. B. Zusammenführungssortierung, Heap-Sortierung). Jeder Algorithmus könnte wiederum mit unterschiedlichen Programmen implementiert werden (sogar mit derselben Programmiersprache).
Der beste Griff, den wir in Bezug auf einen "Algorithmus" haben, ist, dass es sich um eine Art Äquivalenzklasse für Programme handelt, bei der zwei Programme äquivalent sind, wenn sie "im Wesentlichen dasselbe" tun. Zwei beliebige Programme, die denselben Algorithmus implementieren, müssen dieselbe Funktion berechnen, aber das Gegenteil ist nicht der Fall.
In ähnlicher Weise gibt es eine Äquivalenzklasse zwischen Algorithmen, wobei zwei Algorithmen äquivalent sind, wenn sie dieselbe mathematische Funktion berechnen.
Das Schwierige dabei ist, zu erfassen, was wir unter "im Wesentlichen dasselbe" verstehen.
Es gibt einige offensichtliche Dinge, die wir einbeziehen sollten. Beispielsweise sind zwei Programme im Wesentlichen gleich, wenn sie sich nur durch variable Umbenennungen unterscheiden. Die meisten Modelle von Programmiersprachen haben native Begriffe von "Äquivalenz" (z. B. Beta-Reduktion und Eta-Konvertierung in Lambda-Kalkül), daher sollten wir diese auch einwerfen.
Unabhängig von der gewählten Äquivalenzbeziehung erhalten wir eine gewisse Struktur. Algorithmen bilden eine Kategorie aufgrund der Tatsache, dass sie die Quotientenkategorie von Programmen sind. Es ist bekannt, dass einige interessante Äquivalenzbeziehungen zu interessanten kategorialen Strukturen führen. Beispielsweise ist die Kategorie der primitiven rekursiven Algorithmen ein universelles Objekt in der Kategorie der Kategorien. Wann immer Sie eine solche interessante Struktur sehen, wissen Sie, dass diese Untersuchungslinie wahrscheinlich nützlich sein wird.
Letztendlich liegt der Unterschied in der Perspektive. Ein Programm ist ein Programm: eine Folge von Anweisungen in einer Sprache, möglicherweise eine Programmiersprache oder Anweisungen auf Maschinenebene. Algorithmen werden normalerweise auf einer höheren Ebene beschrieben als Maschinenanweisungen oder Anweisungen in der Programmiersprache, aber wie hoch eine Ebene ist, ist ziemlich flexibel. Beispiel: Unter bestimmten Umständen "Sortieren Sie das Array und sehen Sie sich das ank th element "ist eine vollkommen gute Beschreibung eines Algorithmus zum Finden des k das größte Objekt in einem Array; Unter anderen Umständen möchten Sie möglicherweise detaillierter angeben, wie die Sortierung erfolgt.
Wie Sie sagen, ist ein Algorithmus so etwas wie "ein Prozess oder ein Regelwerk, das bei Berechnungen oder anderen Problemlösungsvorgängen, insbesondere von einem Computer, befolgt werden muss". Also, im wörtlichen Sinne, jedes Programm ist ein Algorithmus. Normalerweise sprechen wir jedoch von Programmen, die Algorithmen implementieren . Normalerweise vermeiden wir bei der Beschreibung eines Algorithmus die Details auf niedriger Ebene, wie genau die Dinge implementiert werden, vorausgesetzt, ein kompetenter Programmierer könnte sie in der Sprache seiner Wahl implementieren.
quelle
Algorithmen in der Turing-vollständigen Denkweise werden normalerweise durch Eingabe und Ausgabe spezifiziert. Echte Programme machen mehr; Sie
und mehr. Diese Dinge werden normalerweise nicht in Algorithmen oder in der Berechnungstheorie berücksichtigt, sind jedoch für die meisten Programme wesentlich.
quelle
Ein Algorithmus ist ein systematischer Ansatz zur Lösung eines bestimmten Problems.
Ein Programm ist eine Reihe von Anweisungen, denen ein Computer folgen muss.
Ein Programm muss daher nicht einmal ein Problem lösen. Ich bin sicher, wir können uns alle mehrere Programme vorstellen, die mehr Probleme verursacht als gelöst haben. Ein Programm kann eine Implementierung vieler Algorithmen sein, oder ein Algorithmus kann implementiert werden, indem viele Programme zusammengefügt werden. Ein Programm kann sogar keine Algorithmen enthalten. Zum Beispiel könnte das leere Programm, das einfach beendet wird, oder vielleicht sogar eine Hello World, als Programm ohne Algorithmus betrachtet werden.
Da ein Algorithmus ein bestimmtes Problem löst, konzentriert er sich auf ein bestimmtes Gesamtkonzept. Ein Algorithmus stellt daher abstrakte Schritte zum Verarbeiten eines Satzes verwandter Informationen in einen anderen Satz abgeleiteter Informationen bereit. Ein Programm erfordert nicht, dass seine Bestandteile konzeptionell miteinander verbunden sind. Zum Beispiel kann ein Programm ein Osterei haben, aber ein Ding, das eigentlich als Algorithmus bezeichnet wird, sollte es nicht. In einem Programm kann ein Virus oder Trojaner lauern, jedoch nicht in einem Algorithmus. Der Algorithmus, der dem am nächsten kommt, ist so etwas wie eine Hintertür in einem Verschlüsselungsalgorithmus, bei dem der geplante Fehler Teil der vom Algorithmus festgelegten Informationsbeziehung ist.
Und schließlich benötigt ein Programm, wie es für ein Computerprogramm steht, tautologisch einen Computer. Ein Algorithmus nicht. Wenn ich die Hemden, Hosen und Socken systematisch von meiner Wäsche trenne, bevor ich sie weglege, ist dies ein Algorithmus. Es befasst sich mit verwandten Ein- und Ausgängen, kann in einem Flussdiagramm beschrieben werden und hat kalkulierbare Konsequenzen für die Effizienz (z. B. die Anzahl der Kleidungsstücke, die verglichen werden müssen, um passende Socken zu finden).
quelle
Ein Algorithmus ist ein Konzept oder eine Idee. Es ist ein formaler Ansatz zur Lösung eines Problems. Algorithmen können in einer Vielzahl von Programmiersprachen ausgedrückt oder implementiert werden (normalerweise kann fast jede Sprache jeden Algorithmus implementieren). Für einige Beispiele sollten Sie die Sortieralgorithmen in Wikipedia durchlesen .
Ein Computerprogramm ist eine bestimmte Folge von Anweisungen in einer bestimmten Programmiersprache. Ein Programm kann die Implementierung vieler Algorithmen enthalten. Excel ist ein Programm, aber seine Sortierfunktionen sind die Manifestation eines Algorithmus.
quelle
Algorithmen sind allgemein und müssen in eine bestimmte Programmiersprache übersetzt (implementiert) werden.
quelle
sort
Dienstprogramm ist kein Sortieralgorithmus, es verwendet einen Sortieralgorithmus.Ein Algorithmus drückt unsere Idee oder Lösung für ein bestimmtes Problem Schritt für Schritt aus. Es handelt sich nur um eine Problemlösung und einen vom Menschen verständlichen Ansatz, nicht für ein Computersystem
Das Programm besteht aus schrittweisen Anweisungen, die zur Lösung des Problems durch das Computersystem implementiert werden. Es muss nicht nur für den Programmierer, sondern auch für den Computer verständlich sein.
quelle
Die anderen Antworten hier, denke ich, verfehlen einen wichtigen Punkt. Die Definition von 'Algorithmus', die mir beigebracht wurde, beinhaltete die Anforderung, dass die Prozedur bei allen Eingaben angehalten wird . Das macht 'Programm' natürlich zu einer breiteren Klasse von Prozeduren als 'Algorithmus', da einige Programme bei allen Eingaben anhalten und andere nicht.
quelle
Hier sind einige Möglichkeiten, um die Grenze zwischen einem Algorithmus und einem Programm zu ziehen:
Sinnvoller Zweck
Programme werden mit einem Zweck geschrieben und stellen einen Versuch dar, ein Ziel zu erreichen. Algorithmen können als Werkzeuge zur Erreichung dieses Ziels angesehen werden.
Beispielsweise ist ein Schraubendreher ein Algorithmus zum Ändern des Zustands einer Schraube, aber der Schraubendreher selbst hat keinen Zweck, dies zu tun. Der Zweck liegt im Kopf des Schraubendreher-Bedieners, der das Programm wie das Aufstellen von Regalen hält.
Geschäftslogik
Dieser Punkt bezieht sich stark auf den Zweck eines Programms. Da Programme Zwecke haben, enthalten sie unweigerlich Teile der realen Welt wie bestimmte Daten, Maße, Technologien, Namen usw.
Algorithmen hingegen enthalten weder Geschäftslogik noch Teile der realen Welt und arbeiten nicht mit bestimmten Werten, sondern mit Variablen.
In diesem Sinne können Sie beispielsweise eine
f(x) = x^2
abstrakte mathematische Funktion, die mit Variablen arbeitet, mit einem Kochrezept vergleichen, das genaue Werte enthält (mindestens einen als Referenz).Ergebnis
Dieser Punkt hängt stark mit der Geschäftslogik eines Programms zusammen. Ein Agent (wie ein Webbrowser-Benutzer) verwendet das Ergebnis eines Programms und nicht das Ergebnis eines Algorithmus.
ZB verbraucht der Verbraucher eines Kochrezepts den Kuchen nicht das Ergebnis von Schlagsahne oder Heizofen.
quelle
Ich bin mir ziemlich sicher, dass andere Antworten gut genug sind, um die Führung zu übernehmen, aber so sehe ich den Unterschied zwischen einem Algorithmus und einem Programm
Ein Algorithmus besteht einfach aus den Schritten (maschinenunabhängig), die in einer bestimmten Reihenfolge ausgeführt werden müssen, um ein Problem zu lösen.
Ein Programm ist ein Befehlssatz für einen bestimmten Maschinentyp, um einen Algorithmus in die Praxis umzusetzen .
Zum Beispiel.
Angenommen, Sie haben einen Algorithmus, der einen Schritt zum Erreichen eines bestimmten Ortes enthält, bevor Sie einen anderen Schritt ausführen. Nun ist nicht genau definiert, wie dieser Schritt des Erreichens ausgeführt wird. Sie können wählen, ob Sie gehen oder rennen oder einen Bus nehmen möchten es hängt aber davon ab, wie Sie es implementieren (welches Ihr Programm ist).
Man kann sagen, dass ein Algorithmus eine Abstraktion eines Programms ist, dh die genauen Details fehlen, aber einen Plan für etwas vorlegt.
quelle