Die Mathe-Redaktion - 16.10.2019 14:13 - Registrieren/Login
Auswahl
ListenpunktHome
ListenpunktAktuell und Interessant ai
ListenpunktArtikelübersicht/-suche
ListenpunktAlle Links / Mathe-Links
ListenpunktFach- & Sachbücher
ListenpunktMitglieder / Karte / Top 15
ListenpunktRegistrieren/Login
ListenpunktArbeitsgruppen
Listenpunkt? im neuen Schwätz
ListenpunktWerde Mathe-Millionär!
ListenpunktFormeleditor fedgeo
Schwarzes Brett
Aktion im Forum
Suche
Stichwortsuche in Artikeln und Links von Matheplanet
Suchen im Forum
Suchtipps

Bücher
Englische Bücher
Software
Suchbegriffe:
Mathematik bei amazon
Naturwissenschaft & Technik
In Partnerschaft mit Amazon.de
Kontakt
Mail an Matroid
[Keine Übungsaufgaben!]
Impressum

Bitte beachten Sie unsere Nutzungsbedingungen, die Distanzierung, unsere Datenschutzerklärung und
die Forumregeln.

Sie können Mitglied werden. Mitglieder können den Matheplanet-Newsletter bestellen, der etwa alle 2 Monate erscheint.

Der Newsletter Okt. 2017

Für Mitglieder
Mathematisch für Anfänger
Wer ist Online
Aktuell sind 614 Gäste und 14 Mitglieder online.

Sie können Mitglied werden:
Klick hier.

Über Matheplanet
 
Zum letzten Themenfilter: Themenfilter:
Matroids Matheplanet Forum Index
Moderiert von matph
Informatik » Programmieren » Haskell: Terminierungsnachweis mit Abstiegsfunktion
Druckversion
Druckversion
Antworten
Antworten
Autor
Universität/Hochschule Haskell: Terminierungsnachweis mit Abstiegsfunktion
Algorithmus
Neu Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 27.05.2019
Mitteilungen: 2
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Themenstart: 2019-05-27


Hallo,

Ich habe Probleme mit der folgenden Aufgabe:

Beweisen Sie mit einer geeigneten Abstiegsfunktion ausführlich, dass folgende Funktion für alle Argumente definiert ist.
Haskell
merge :: [Integer][Integer][Integer]
merge xs []= xs
merge [] ys = ys
merge (x:xs) (y:ys) = if x<y then x:(merge xs (y:ys))
                             else y:(merge (x:xs) ys)

Ich weiß einfach nicht, wie ich die Abstiegsfunktion finden soll (anscheinend muss man etwas herumraten); wäre toll, wenn mir jemand erklären könnte, wie ich das anstelle.

Liebe Grüße,
Lizzy



  Profil  Quote  Link auf diesen Beitrag Link
ligning
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 07.12.2014
Mitteilungen: 2758
Aus: Berlin
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.1, eingetragen 2019-05-27


Das intuitive Argument wäre doch, dass merge terminiert, weil es in jedem rekursiven Aufruf entweder die erste oder die zweite Liste um 1 verkürzt. Die Abstiegsfunktion sollte also etwas mit den beiden Längen zu tun haben. Wie wärs mit deren Summe?


-----------------
⊗ ⊗ ⊗



  Profil  Quote  Link auf diesen Beitrag Link
Algorithmus
Neu Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 27.05.2019
Mitteilungen: 2
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.2, vom Themenstarter, eingetragen 2019-05-27


Hallo!
Danke für deine Antwort :)

Du meinst also in etwa so?
m(x,y) = length(x) + length(y)

=>

m(x:xs, y:ys) = length(x:xs) + length(y:ys) = 2 + length(xs) + length(ys) = ??? > m(xs, y:ys)

und für else

m(x:xs, y:ys) = length(x:xs) + length(y:ys) = 2 + length(xs) + length(ys) = ??? > m(x:xs, ys)

Sehe ich das richtig, dass ich die ABstiegsfunktion 2mal untersuchen muss?

Aber wie löse ich dann den ???-Teil?



  Profil  Quote  Link auf diesen Beitrag Link
ligning
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 07.12.2014
Mitteilungen: 2758
Aus: Berlin
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.3, eingetragen 2019-05-27


2019-05-27 16:12 - Algorithmus in Beitrag No. 2 schreibt:
m(x:xs, y:ys) = length(x:xs) + length(y:ys) = 2 + length(xs) + length(ys) = ??? > m(xs, y:ys)
m(x:xs, y:ys) = length(x:xs) + length(y:ys) = 1 + length(xs) + length(y:ys) > length(xs) + length(y:ys) = m(xs, y:ys)

Das scheint mir ein gutes Argument zu sein. Vielleicht würde ichs andersrum, von m(xs, y:ys) beginnend, aufschreiben. Für den anderen Aufruf entsprechend.


Sehe ich das richtig, dass ich die ABstiegsfunktion 2mal untersuchen muss?
Du musst für jeden Selbstaufruf nachweisen, dass die Abstiegsfunktion kleiner wird.



  Profil  Quote  Link auf diesen Beitrag Link
Algorithmus hat die Antworten auf ihre/seine Frage gesehen.
Algorithmus wird per Mail über neue Antworten informiert.
Neues Thema [Neues Thema] Antworten [Antworten]    Druckversion [Druckversion]

 


Wechsel in ein anderes Forum:
 Suchen    
 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2019 by Matroids Matheplanet
This web site was made with PHP-Nuke, a web portal system written in PHP. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]