Es heißt, dass ein Programm Algorithmen enthält. Wenn wir uns jedoch auf ihre Definition beziehen, ist ein Algorithmus eine Folge von Anweisungen, in die geschrieben wird Führen Sie eine bestimmte Aufgabe aus, und ein Computerprogramm ist auch eine Folge von Anweisungen zum Ausführen einer (einiger) Aufgaben mit dem Computer.
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 Satz von Regeln sein, die eine Folge von Operationen genau definieren“. würde alle Computerprogramme , einschließlich Programme, die keine numerischen Berechnungen durchführen. Im Allgemeinen ist ein Programm nur dann ein Algorithmus , wenn es schließlich stoppt.
Antwort
Ich werde die gleiche Antwort geben, die ich beim letzten Mal gegeben habe.
.
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 solche 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 formaler Begriff einer Zuordnung von Eingaben zu Ausgaben. So ist „sortieren“ beispielsweise 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 könnte unter Verwendung verschiedener Algorithmen implementiert werden (z. B. Zusammenführungssortierung, Heap-Sortierung). Jeder Algorithmus könnte wiederum sein implementiert mit verschiedenen Programmen (sogar mit derselben Programmiersprache).
Das Beste, was wir über einen „Algorithmus“ wissen, ist, dass es sich um eine Art Äquivalenzklasse für Programme handelt, bei denen zwei Programme sind gleichwertig, 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 im Lambda-Kalkül), daher sollten wir diese auch einwerfen . 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. Wenn Sie eine solche interessante Struktur sehen, wissen Sie, dass diese Fragestellung wahrscheinlich nützlich sein wird.
Kommentare
- Vielen Dank für Ihre genaue Antwort. nur eine andere Frage. Wenn wir ein Programm betrachten, unabhängig davon, was es tut, erhalten sie dennoch einige Eingaben und befolgen einige Anweisungen und geben einige Ergebnisse, wenn sie ausgeführt werden. Sie können sogar ‚ kein Problem lösen (wie wir es nennen), aber es ist immer noch eine Zuordnung. Könnten sie bekannte Algorithmen sein, ich meine irgendein Programm?
- Wenn ich ‚ Sie richtig lese, ‚ Fragen Sie, ob eine formale Definition eines “ -Algorithmus “ die Maßgabe enthalten sollte oder nicht, dass es nützlich „. Ich würde sagen “ nein „, schon allein deshalb, weil es ‚ unmöglich ist, dies zu formalisieren Vorstellung.
- Entschuldigung! 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 Sie sagen, es ist ‚ notwendig, dass wir neben dem Algorithmus die Nützlichkeit betrachten?
- Ich glaube nicht, dass ‚ eine formale Definition eines “ -Algorithmus “ sollte erfordern, dass es nützlich ist, da “ nützlich “ ‚ kann Sie müssen formal definiert werden.
- Ihre Antwort ist in diesem Thread am nützlichsten +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.
Antwort
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. Unter bestimmten Umständen ist beispielsweise „Sortieren des Arrays und anschließendes Betrachten des $ k $ -ten Elements“ eine perfekte Beschreibung eines Algorithmus zum Auffinden des $ k $ -ten größten Objekts in einem Array. Unter anderen Umständen möchten Sie möglicherweise viel 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 Problemen zu befolgen ist -Lösungsvorgänge, insbesondere durch einen Computer. “ Im wahrsten Sinne des Wortes ist jedes Programm 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.
Kommentare
- Ich denke, die Genauigkeit des Algorithmus hängt mit dem Mathematikkonzept, der Lambda-Rechnung oder der Turing-Maschine zusammen. ‚ weiß immer noch nicht, was das ist Abstraktionssprache? Mathematik oder eine natürliche Sprache mit vielen unscharfen Aussagen
- Der @ 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 “ konkretisiert werden können “ zu formalen Beweisen in jedem gewählten (stark genug) formalen Beweissystem, genau wie jedes andere Der Algorithmus kann vollständig in jeder (Turing-vollständigen) Programmiersprache implementiert werden.
Antwort
Algorithmen im Turing – Eine vollständige Denkweise wird normalerweise durch Eingabe und Ausgabe festgelegt. Echte Programme machen mehr; Sie
- kommunizieren mit dem Benutzer,
- kommunizieren mit anderen Computern,
- reagieren auf die Umgebung,
- beenden nicht 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.
Kommentare
- Dies ist ein sehr guter Punkt. Aber meinen Sie so etwas wie „, das normalerweise als Mittel zum Zuordnen von Eingaben zu Ausgaben “ angegeben wird? Die bloße Angabe der Eingabe und Ausgabe reicht nicht aus ‚: z. B. erzeugen Mergesort und Quicksort die gleiche Ausgabe von jeder Eingabe, werden jedoch nicht ‚ berücksichtigt um der gleiche Algorithmus zu sein.
- @DavidRicherby Ich dachte an Spezifikation im PL-Sinne; ‚ geben nichts anderes an, sodass Algorithmen möglicherweise nichts anderes tun. Natürlich müssen wir mehr als die Spezifikation angeben, um einen konkreten Algorithmus zu beschreiben.
- Gute Punkte, aber wenn wir zugeben, dass am Ende ein Programm ein Algorithmus ist, dann ‚ weiß nicht, wie die von Ihnen angesprochenen Fragen an einem Algorithmus gemessen werden. Vielleicht ein KI-Thema?!
- Wer würde das zugeben und warum? Und was meinst du hier mit Maß? (Und ich sehe den div-Winkel hier sicherlich nicht ‚.)
- @Raphael Ich kann es zugeben (wenn man sich die Syntax ansieht, sehen alle Programme ähnlich aus, Es handelt sich um Befehlssequenzen oder um die Zuordnung von Eingabe zu Ausgabe. Ich weiß nur nicht, wie andere Funktionen eines Programms (die von Ihnen angesprochenen) aus dieser Definition extrahiert werden können. ‚ Zum Beispiel der Unterschied zwischen Quick-Sort und MATLAB oder Windows Media Player !!
Antwort
-
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 haben, als sie 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, in einem Algorithmus jedoch nicht. 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 ein Programm, wie es ist Kurz für ein Computerprogramm, erfordert 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).
Antwort
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.
Antwort
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 für die Ausführung einer bestimmten Aufgabe mit einem Computer geschrieben wurden.
Algorithmen sind allgemein und müssen in a übersetzt werden spezifische Programmiersprache (implementiert).
Kommentare
- Der springende Punkt der Frage ist jedoch, dass ein Programm (entweder sein Quellcode oder die kompilierte Binärdatei) ) ist “ ein in sich geschlossener schrittweiser Satz von Operationen, die ausgeführt werden müssen, um ein bestimmtes Problem oder eine bestimmte Klasse von Problemen zu lösen. “
- Aber es ist nicht ‚ t. Ein Programm ist nicht th ose Operationen, aber eine Implementierung von ihnen: etwas, das sie in einem bestimmten Kontext ausführt. Z.B. Das Unix-Dienstprogramm
sort
ist kein Sortieralgorithmus, sondern verwendet einen Sortieralgorithmus.
Antwort
Ein Algorithmus drückt unsere Idee oder Lösung für ein bestimmtes Problem schrittweise aus. Es handelt sich nur um eine Problemlösung und einen vom Menschen verständlichen Ansatz, nicht für ein Computersystem
Programm ist eine Schritt-für-Schritt-Anleitung, die zur Lösung des Problems durch das Computersystem implementiert wird. Es muss nicht nur für den Programmierer, sondern auch für den Computer verständlich sein.
Kommentare
- Willkommen bei Computer Science Stack Exchange. Bitte lesen Sie cs.stackexchange.com/tour.if , was Sie noch nicht getan haben.
Antwort
Die anderen Antworten hier verfehlen meines Erachtens 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.
Kommentare
- Das ist nicht universell. Die Definition, die mir beigebracht wurde, enthielt diese Anforderung nicht ‚.
Antwort
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, a zu erreichen Tor. Algorithmen können als Werkzeuge zur Erreichung dieses Ziels angesehen werden.
ZB. Ein Schraubendreher ist ein Algorithmus zum Ändern des Zustands einer Schraube, aber der Schraubendreher selbst hat keinen Zweck, dies zu tun.Der Zweck liegt im Kopf des Schraubenzieher-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, Messungen, Technologien, Namen usw.
Algorithmen enthalten andererseits weder Geschäftslogik noch Teile der realen Welt und arbeiten nicht daran Bestimmte Werte wirken sich auf Variablen aus.
z. In diesem Sinne können Sie eine mathematische Funktion wie f(x) = x^2
, die abstrakt ist und Variablen verarbeitet, 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. Der Verbraucher eines Kochrezepts konsumiert den Kuchen nicht als Ergebnis von Schlagsahne oder Erhitzen des Ofens.
Kommentare
- Vielleicht wäre es besser, das zu sagen Der Schraubendreher ‚ hat nicht die Absicht, Schrauben zu drehen? Im alltäglichen Englisch würden wir sicherlich sagen, dass ein Schraubendreher den Zweck hat, Schrauben zu drehen: Das Drehen von Schrauben ist genau das, wofür er entwickelt wurde.
- Auch I ‚ Ich bin nicht sicher, was Sie unter “ Geschäftslogik “ verstehen (viele Programme haben nichts zu tun mit Geschäft) oder indem man sagt, dass ein Algorithmus “ weder Geschäftslogik noch Bits 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 Eckpunkte und Kanten perfekt formulieren. Enthält ‚ der Algorithmus dann “ … Bits der realen Welt “ ?
- @DavidRicherby, Sie haben 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 besteht darin, Zutaten zu mischen und zu backen, und beinhaltet nicht das Lernen des Mischens oder Backens ( Dies ist in diesem Fall die wiederverwendete Dienstprogrammlogik.
- @DavidRicherby, wie für Bits der realen Welt , meine ich Aktualisierung, dh ein Programm, mit dem ein Algorithmus anders als ein Algorithmus in irgendeiner Weise kommunizieren muss die physische Welt. Ein Algorithmus kann andererseits ein rein mathematisches Konzept sein.
Antwort
I. Ich bin mir ziemlich sicher, dass andere Antworten gut genug sind, um die Führung zu übernehmen, aber hier ist, wie ich den Unterschied zwischen einem Algorithmus und einem Programm sehe.
-
Ein Algorithmus besteht einfach aus den Schritten (maschinenunabhängig), die zur Lösung eines Problems ausgeführt werden müssen.
-
Ein Programm ist ein Befehlssatz für einen bestimmten Maschinentyp, um einen Algorithmus in die Praxis umzusetzen .
Zum Beispiel.
Nehmen wir an, Sie haben einen Algorithmus, für den es einen Schritt gibt Erreichen eines bestimmten Ortes, bevor Sie einen anderen Schritt ausführen. Wie dieser Schritt des Erreichens ausgeführt wird, ist nicht genau definiert. Sie können wählen, ob Sie zu Fuß oder mit einem Bus gehen oder einen Bus nehmen möchten, dies hängt jedoch davon ab, wie Sie ihn implementieren (Welches ist dein Prog ram).
Sie können sagen, dass ein Algorithmus eine Abstraktion eines Programms ist, dh die genauen Details fehlen, aber einen Plan für etwas vorlegen .