Skip to content

Latest commit

 

History

History
97 lines (77 loc) · 2.36 KB

File metadata and controls

97 lines (77 loc) · 2.36 KB

Король

Варианты выполнения: 1. Диагонально сверху вниз по одному элементу 2. По строке (На примере реализован второй вариант)

Что интересно - эту программу можно вычислять параллельно: вычислив один элемент можно уже вычислять элемент на следующей строке. Главное что вычисления на слеюдующей строке не обогнали строку выше нее. Пример можно объяснить строителями которые строят стену, а стену строят параллельно кладя кирпичи. Это уже вопросы параллельного программирования.

def printList(lst):
    for i in lst:
        print(i)

m = int(input(":"))
n = int(input(":"))

K = [[0]*m for i in range(n)]

for i in range(n):
    K[i][0] = 1

for j in range(m):
    K[0][j] = 1

for i in range(1, n):
    for j in range(1, m):
        K[i][j] = K[i-1][j-1] + K[i-1][j] + K[i][j-1]

printList(K)

Result:

[1, 1, 1, 1, 1]
[1, 3, 5, 7, 9]
[1, 5, 13, 25, 41]
[1, 7, 25, 63, 129]
[1, 9, 41, 129, 321]

Наибольшая общая подпоследовательность

def printList(lst):
    for i in lst:
        print(i)

A = [1, 2, 3, 5, 7, 8, 9]
B = [1, 1, 3, 7, 2, 8, 4]

n = len(A)
m = len(B)

F = [[0]*(m+1) for i in range(n+1)]

for i in range(1, n+1):
    for j in range(1, m+1):
        if (A[i-1] == B[j-1]):
            F[i][j] = F[i-1][j-1] + 1
        else:
            F[i][j] = max(F[i-1][j], F[i][j-1])

printList(F)

Result:

[0, 0, 0, 0, 0, 0, 0, 0]
[0, 1, 1, 1, 1, 1, 1, 1]
[0, 1, 1, 1, 1, 2, 2, 2]
[0, 1, 1, 2, 2, 2, 2, 2]
[0, 1, 1, 2, 2, 2, 2, 2]
[0, 1, 1, 2, 3, 3, 3, 3]
[0, 1, 1, 2, 3, 3, 4, 4]
[0, 1, 1, 2, 3, 3, 4, 4]

Наибольшая возрастающая последовательность

Не совсем уверен в правильности

def printList(lst):
    for i in lst:
        print(i)

A = [[5, 6], [1, 3], [8, 9], [10, 11]]

F = [0]*len(A)

for i in range(len(A)):
    for j in range(i):
        if A[j]<A[i] and F[j]>F[i]:
            F[i] = F[j]
    F[i] += 1

print(F)
print(max(F))

Result:

[1, 1, 2, 3]
3