Korrektheitsbeweis Algorithmus?

1 Antwort

if val < A[j - 1] and val > A[j + 1] do

Das '>' müsste ein '<' sein.

Kann mir vielleicht jemand einen Ansatz geben wie ich die Korrektheit beweise?

Es verändert sich die Schleifenvariable und der Counter.

Es wird immer ein Fenster aus drei Array-Werten betrachtet, welches sich mit jedem Schleifendurchlauf um eine Stelle weiterschiebt.

Als Invariante könnte ich mir folgendes vorstellen:
Wenn in dem Fenster eine Senke ist, dann wird diese gefunden.
Wenn eine Senke gefunden wurde, dann erhöht sich der Counter.

Zudem noch Invarianten, um zu zeigen, dass die Schleife terminiert und keine Senke doppelt zählt, das sollte allerdings trivial sein.