Entfernungsrekursiver Algorithmus bearbeiten - Skiena

Ich lese das Algorithm Design Manual von Steven Skiena und befasse mich mit dem dynamischen Programmieren. Er hat einen Beispielcode zum Bearbeiten von Entfernungen und verwendet einige Funktionen, die weder im Buch noch im Internet erklärt werden. Also wundere ich mich

a) Wie funktioniert dieser Algorithmus?

b) Was machen die Funktionen indel und match?

#define MATCH     0       /* enumerated type symbol for match */
#define INSERT    1       /* enumerated type symbol for insert */
#define DELETE    2       /* enumerated type symbol for delete */

int string_compare(char *s, char *t, int i, int j)
{
        int k;                  /* counter */
        int opt[3];             /* cost of the three options */
        int lowest_cost;        /* lowest cost */

        if (i == 0) return(j * indel(' '));
        if (j == 0) return(i * indel(' '));

        opt[MATCH] = string_compare(s,t,i-1,j-1) + match(s[i],t[j]);
        opt[INSERT] = string_compare(s,t,i,j-1) + indel(t[j]);
        opt[DELETE] = string_compare(s,t,i-1,j) + indel(s[i]);

        lowest_cost = opt[MATCH];
        for (k=INSERT; k<=DELETE; k++)
                if (opt[k] < lowest_cost) lowest_cost = opt[k];

        return( lowest_cost );
}

Antworten auf die Frage(5)

Ihre Antwort auf die Frage