Объясните алгоритм для решения «самой длинной растущей подпоследовательности»

Я пытался понять этот алгоритм в течение последних двух часов, но не могу его получить. Может кто-нибудь, пожалуйста, объясните это легко понять,

function lis_length(a)
    n := a.length
    q := new Array(n)
    for k from 0 to n:
        max := 0;
        for j from 0 to k, if a[k] > a[j]:
            if q[j] > max, then set max = q[j].
        q[k] := max + 1;
    max := 0
    for i from 0 to n:
        if q[i] > max, then set max = q[i].
    return max;
5
задан missingfaktor 2 September 2011 в 14:05
поделиться