Ich habe heute gelernt, dass sich die Algorithmusanalyse basierend auf dem Rechenmodell unterscheidet. Daran habe ich noch nie gedacht oder gehört.
Ein Beispiel, das mir von User @chi weiter veranschaulicht wurde, war:
Betrachten Sie zB die Aufgabe: gegeben return . Im RAM kann dies in gelöst werden, da der Array-Zugriff zeitlich konstant ist. Mit TMs müssen wir die gesamte Eingabe scannen, also ist esx i O ( 1 ) O ( n )
Das lässt mich über funktionale Sprachen nachdenken; Nach meinem Verständnis sind "funktionale Sprachen eng mit dem Lambda-Kalkül verbunden" (aus einem Kommentar von Yuval Filmus hier ). Wenn funktionale Sprachen auf Lambda-Berechnungen basieren, aber auf RAM-basierten Maschinen ausgeführt werden, wie kann dann die Komplexitätsanalyse für Algorithmen durchgeführt werden, die mit rein funktionalen Datenstrukturen und Sprachen implementiert wurden?
Ich hatte keine Gelegenheit, rein funktionale Datenstrukturen zu lesen, aber ich habe mir die Wikipedia-Seite für das Thema angesehen, und es scheint, dass einige der Datenstrukturen herkömmliche Arrays ersetzen durch:
"Arrays können durch Karten- oder Direktzugriffslisten ersetzt werden, die eine rein funktionale Implementierung zulassen, aber die Zugriffs- und Aktualisierungszeit ist logarithmisch."
In diesem Fall wäre das Rechenmodell anders, richtig?
Antworten:
Dies hängt von der Semantik Ihrer funktionalen Sprache ab. Sie können keine Algorithmusanalyse für Programmiersprachen isoliert durchführen, da Sie nicht wissen, was die Anweisungen tatsächlich bedeuten. Die Spezifikation für Ihre Sprache muss eine ausreichend detaillierte Semantik enthalten. Wenn Ihre Sprache alles in Bezug auf die Lambda-Rechnung spezifiziert, benötigen Sie ein Kostenmaß für Reduzierungen (sind sie O (1) oder hängen sie von der Größe des Begriffs ab, den Sie reduzieren?).
Ich denke, dass die meisten funktionalen Sprachen dies nicht so tun und stattdessen nützlichere Aussagen wie "Funktionsaufrufe sind O (1), an den Kopf einer Liste anhängen ist O (1)" liefern, solche Dinge.
quelle