Схема за изчислително обратно проследяване

Нека опишем някакъв набор Â комбинаторни проблеми, за които алгоритъмът за обратно проследяване е очевидно приложим.

Нека бъде М0, Медин, . Мн-1 - n крайни линейно подредени множества и G - набор от ограничения (условия), които присвояват вектори на формата v = (v0, vедин, . vk) Т (vj Î Mj; j = 0, 1, . к; к £ н-1), булево G(v) Î вярно, Невярно>. Вектори v = (v0, vедин, . vk) T за което G(v) = вярно, да се обадим частични решения. Освен това нека има конкретно правило , според която могат да бъдат декларирани някои от частичните решения цялостни решения. Тогава могат да се формулират следните задачи за търсене:

Намерете всички цялостни решения или установете липсата им.

Намерете поне едно цялостно решение или установете липсата му.

Най-често подобни задачи се формулират и решават, когато се зададе следващото правило върху частични решения [13, с. 321-322; 46, c.66-75]:

Общият метод за решаване на горните проблеми е последователно компонентно увеличение на вектора v отляво надясно, започвайки от v0, и последващи тестове с неговите ограничения G и правилото .

По-долу, на някои подобни на Паскал псевдокодове, са дадени три схеми за решаване на проблеми чрез метода на грубата сила с обратно проследяване: нерекурсивна версия за намиране на всички решения (схема 1), рекурсивна версия за намиране на всички решения (схема 2) рекурсивна версия за намиране на едно решение (схема 3).

Съгласно схема 1 се намират всички решения на проблема, ако има такива, и работата приключва, когато j = 0. Неговата рекурсивна версия, показана на схема 2, е много по-проста и по-очевидна.

Схема 1. Нерекурсивна версия на схемата за обратно проследяване за намиране на всички решения

обратно

Генерирането на всички решения съгласно схема 2, ако има такива, се организира чрез обаждане връщане назад(0) . Намирането на едно решение съгласно схема 3, ако има такова, се извършва чрез извикване: връщане назад (0, „няма намерено решение“) . Имайте предвид, че в диаграми 2 и 3 връщането не се появява изрично, като естествена част от изпълнението на рекурсивния механизъм.