11. fejezet - Visszalépéses keresés

Legyen , és . Legyenek tetszőleges véges, nem üres halmazok ( ). .

Legyen , amely felbontható tulajdonságok sorozatára az alábbi módon:

  1. ;

  2. ;

  3. ;

  4. .

A feladat annak eldöntése, hogy létezik-e olyan elem -ban, amelyre teljesül a feltétel, és ha igen, adjunk meg egy ilyen elemet.

Számozzuk meg elemeit az alábbi módon: Minden halmaz elemeit számozzuk meg nullától -ig. Ezután minden eleméhez van egy rendezett -es, amelyre , ahol . Ezen megszámozás egy lexikografikus rendezést definiál -n.

Legyen . Ekkor a fenti megszámozás egy bijekciót létesít és között. Jelölje ezt az leképezést .

Vegyük észre, hogy az halmaz elemei felfoghatók vegyesalapú számrendszerben felírt számként is. Ez alapján egy -es számértéke:

A bevezetett jelölésekkel a feladatot újra specifikáljuk, és most már megkövetelhetjük azt is, hogy ha létezik keresett tulajdonságú elem, akkor az első ilyet adjuk meg:

Ha nem használjuk ki a speciális tulajdonságait, akkor a fenti feldat megoldható lineáris kereséssel, a intervallumon. Vizsgáljuk meg, hogy hogyan használhatnánk ki specialitását!

Ha igaz és pedig hamis, akkor minden olyan -re, amelynek első komponense megegyezik első komponensével, is hamis lesz. Ezért ha az -edik pozíció után a csak nullákat tartalmaz, akkor a keresésben nagyobbat léphetünk, és növelhetjük -t az -edik pozíción.

Az algoritmus még egyszerűbbé tehető, ha a -t kiegészítjük egy túlcsordulás bittel, amelynek 1 értéke azt jelzi, hogy értéke már nem növelhető.

Terjesszük ki az függvényt az alábbi módon:

,

A fenti meggondolások másik következménye, hogy célszerű egy olyan művelet bevezetése is amely amellett, hogy -t eldönti, azt a legkisebb indexet is megadja, amelyre hamis.

Ez a feladat visszavezethető lineáris keresés 2.8-ra.

A program levezetéséhez a már bemutatott specifikációt használjuk. Legyen az invariáns tulajdonság:

Megjegyezzük, hogy a visszalépéses kereséshez hasonlóan több visszalépéses technikát alkalmazó algoritmus is levezethető, például a visszalépéses számlálás: