Computerprogramm vs. Algorithmus

8

Es wird gesagt, dass ein Programm Algorithmen enthält. Wenn wir uns jedoch auf deren Definition beziehen, ist ein Algorithmus eine Folge von Anweisungen, die geschrieben wurden, um eine bestimmte Aufgabe auszuführen, und ein Computerprogramm ist auch eine Folge von Anweisungen, um eine (einige) Aufgaben mit einem Computer auszuführen.

Was unterscheidet ein Programm von einem Algorithmus? Ist es auch eine Art Algorithmus?

Tatsächlich suche ich nach formalen Definitionen für einen Algorithmus und ein Computerprogramm, damit ich sie voneinander unterscheiden oder Algorithmen innerhalb eines Programms identifizieren kann.

Update : Ich habe in Wikipedia durch eine informelle Definition (zumindest syntaktisch) festgestellt, dass jedes Programm ein Algorithmus ist.

Eine informelle Definition könnte "ein Regelwerk sein, das eine Abfolge von Operationen genau definiert". Dies würde alle Computerprogramme einschließen, einschließlich Programme, die keine numerischen Berechnungen durchführen. Im Allgemeinen ist ein Programm nur dann ein Algorithmus, wenn es irgendwann stoppt .

Ahmad
quelle

Antworten:

11

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.

Pseudonym
quelle
Vielen Dank für Ihre genaue Antwort, nur eine weitere Frage. Wenn wir ein Programm betrachten, unabhängig davon, was es tut, erhalten sie immer noch einige Eingaben und folgen einigen Anweisungen und geben einige Ergebnisse, wenn sie ausgeführt werden. Sie lösen vielleicht sogar kein Problem (wie wir es nennen), aber es ist immer noch eine Zuordnung. Könnten sie bekannte Algorithmen sein, ich meine irgendein Programm?
Ahmad
1
Wenn ich Sie richtig lese, fragen Sie, ob eine formale Definition eines "Algorithmus" die Maßgabe enthalten sollte oder nicht, dass er "nützlich" sein muss. Ich würde "nein" sagen, schon allein deshalb, weil es unmöglich ist, diesen Begriff zu formalisieren.
Pseudonym
Es tut uns leid! Mein Englisch ist nicht gut, dann sagst du "nein" zu was? Sie geben zu, dass es unmöglich ist, die Nützlichkeit eines Programms zu formalisieren, und nur per Definition ist jedes Programm ein Algorithmus? oder sagen Sie, es ist notwendig, dass wir neben dem Algorithmus auch die Nützlichkeit berücksichtigen?
Ahmad
1
Ich denke nicht, dass eine formale Definition eines "Algorithmus" erfordern sollte, dass er nützlich ist, da "nützlich" nicht formal definiert werden kann.
Pseudonym
Ihre Antwort ist die nützlichste in diesem Thread +1. Ich glaube, mit "im Wesentlichen dasselbe" meinen Sie "semantisch äquivalent". Ich denke auch, dass alle Programme im Wesentlichen Algorithmen sind (wie OP sagt), da alle Programme Implementierungen sind, die eine Eingabe auf eine Ausgabe abbilden, selbst wenn diese Zuordnung implizit ist. Wie Sie sagten, hängt alles von der Perspektive ab.
DoubleOrt
7

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 ankth element "ist eine vollkommen gute Beschreibung eines Algorithmus zum Finden des kdas 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.

David Richerby
quelle
Ich denke, die Genauigkeit des Algorithmus hängt mit dem Mathematikkonzept, der Lambda-Rechnung oder der Turing-Maschine zusammen. Sie wissen immer noch nicht, was diese Abstraktionssprache ist? Mathematik oder eine natürliche Sprache mit vielen unscharfen Aussagen
Ahmad
8
@ Ahmad Algorithmus ist ein informelles Konzept. Es gibt keine formale Definition. In gewissem Sinne ist es wie ein mathematischer Beweis, der sich von einem formalen Beweis in einem formalen Beweissystem unterscheidet. Wir glauben, dass informelle Beweise in jedem gewählten (stark genug) formalen Beweissystem zu formalen Beweisen "konkretisiert" werden können, genauso wie jeder Algorithmus in jeder (Turing-vollständigen) Programmiersprache vollständig implementiert werden kann.
Yuval Filmus
5

Algorithmen in der Turing-vollständigen Denkweise werden normalerweise durch Eingabe und Ausgabe spezifiziert. Echte Programme machen mehr; Sie

  • mit dem Benutzer kommunizieren,
  • mit anderen Maschinen kommunizieren,
  • auf die Umwelt reagieren,
  • nicht beenden und sind immer noch nützlich,

und mehr. Diese Dinge werden normalerweise nicht in Algorithmen oder in der Berechnungstheorie berücksichtigt, sind jedoch für die meisten Programme wesentlich.

Raphael
quelle
Dies ist ein sehr guter Punkt. Aber meinst du etwas wie "normalerweise angegeben als Mittel, um Eingabe auf Ausgabe abzubilden"? Es reicht nicht aus, nur die Eingabe und Ausgabe anzugeben: Mergesort und Quicksort erzeugen beispielsweise die gleiche Ausgabe von jeder Eingabe, werden jedoch nicht als der gleiche Algorithmus angesehen.
David Richerby
@ DavidRicherby Ich dachte an Spezifikation im PL-Sinne; Wir geben nichts anderes an, daher können Algorithmen nichts anderes tun. Natürlich müssen wir mehr als die Spezifikation angeben, um einen konkreten Algorithmus zu beschreiben.
Raphael
Gute Punkte, aber wenn wir zugeben, dass am Ende ein Programm ein Algorithmus ist, weiß ich nicht, wie die von Ihnen angesprochenen Fragen an einem Algorithmus gemessen werden. Vielleicht ein KI-Thema?!
Ahmad
Wer würde das zugeben und warum? Und was meinst du hier mit Maß? (Und ich sehe den KI-Winkel hier sicherlich nicht.)
Raphael
@Raphael Ich kann es zugeben (wenn ich mir die Syntax ansehe, sehen alle Programme ähnlich aus, es handelt sich um Befehlssequenzen oder die Zuordnung von Eingabe zu Ausgabe), ich weiß nur nicht, wie andere Funktionen eines Programms (die, die Sie angesprochen haben) können aus dieser Definition extrahiert werden. Zum Beispiel der Unterschied zwischen Quick-Sort und MATLAB oder Windows Media Player !!
Ahmad
2
  • 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).

Ryan Colyer
quelle
2

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.

Alex Fitzpatrick
quelle
1

Ein Algorithmus ist ein in sich geschlossener Schritt-für-Schritt-Satz von Operationen, die ausgeführt werden müssen, um ein bestimmtes Problem oder eine Klasse von Problemen zu lösen.

Ein Computerprogramm ist eine Folge von Anweisungen, die den Regeln einer bestimmten Programmiersprache entsprechen und zur Ausführung einer bestimmten Aufgabe mit einem Computer geschrieben wurden.

Algorithmen sind allgemein und müssen in eine bestimmte Programmiersprache übersetzt (implementiert) werden.

Benjoyo
quelle
1
Aber der ganze Sinn der Frage ist , dass ein Programm (entweder den Quellcode oder die kompilierte binär) ist „eine in sich geschlossene Schritt- für -Schritt - Reihe von Operationen durchgeführt werden , um ein bestimmtes Problem oder eine Klasse von Problemen zu lösen.“
David Richerby
Aber es ist nicht so. Ein Programm ist nicht diese Operationen, sondern eine Implementierung von ihnen: etwas, das sie in einem bestimmten Kontext ausführt . Die Unix zB sortDienstprogramm ist kein Sortieralgorithmus, es verwendet einen Sortieralgorithmus.
Reinierpost
1

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.

Pooja Thanekar
quelle
Willkommen bei Computer Science Stack Exchange. Bitte lesen Sie cs.stackexchange.com/tour.if , falls Sie dies noch nicht getan haben.
Babou
1

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.

PMar
quelle
Das ist nicht universell. Die Definition, die mir beigebracht wurde, enthielt diese Anforderung nicht.
Reinierpost
1

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^2abstrakte 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.

Robert Mugattarov
quelle
Vielleicht ist es besser zu sagen, dass der Schraubendreher nicht die Absicht hat, Schrauben zu drehen? Im alltäglichen Englisch, würden sagen , wir sicher , dass ein Schraubenzieher nicht den Zweck hat , Schrauben drehen: Drehen Schrauben ist die genaue Sache , die es entworfen wurde , zu tun.
David Richerby
Ich bin mir auch nicht sicher, was Sie unter "Geschäftslogik" verstehen (viele Programme haben nichts mit Geschäft zu tun) oder sagen, dass ein Algorithmus "weder Geschäftslogik noch Teile der realen Welt enthält". Zum Beispiel könnte ich einen Algorithmus für kürzeste Wege in Bezug auf Städte und Straßen und nicht in Bezug auf Scheitelpunkte und Kanten perfekt formulieren. Enthält der Algorithmus dann nicht "... Teile der realen Welt"?
David Richerby
@ DavidRicherby, du hast recht, meine Formulierung ist mehrdeutig. Was ich meinte, ist ein sinnvoller Zweck. Das Drehen von Schrauben zum Drehen von Schrauben ist ebenso sinnlos wie das Sortieren eines Arrays, das niemals verwendet wird. Mit Geschäftslogik meine ich die gesamte Programmlogik mit Ausnahme der Utility-Logik und des Technologie-Stack-Boilerplates, dh die gesamte Logik, die den Zweck des Programms tatsächlich umsetzt, dh die Geschäftslogik des Backens eines Kuchens ist das Mischen von Zutaten und Backen und beinhaltet nicht das Lernen des Mischens oder Backens ( die in diesem Fall wiederverwendet wird).
Robert Mugattarov
@DavidRicherby, was Teile der realen Welt betrifft, meine ich Aktualisierung, dh ein Programm, das sich von einem Algorithmus unterscheidet, muss auf irgendeine Weise mit der physischen Welt kommunizieren. Ein Algorithmus kann dagegen ein rein mathematisches Konzept sein.
Robert Mugattarov
1

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.

Romantisches Elektron
quelle