Escolar Documentos
Profissional Documentos
Cultura Documentos
20241-Lista1
20241-Lista1
Instruções:
(a) (12%)
def impressao(n):
num = 1
for i in range(1, n + 1):
for j in range(1, i + 1):
print(f"{num:2d} ", end=" ")
num += 1
print()
n = 10
impressao(n)
(b) (12%)
def impressao(n):
num = 1
for i in range(1, n*n + 1):
for j in range(0, n*n- i + 1):
print(f"{num:2d} ", end=" ")
num += 1
print()
n = 3
impressao(n)
Exercício 4 - Determine um limite assintótico adequado para os seguintes métodos.
(a) (12%)
if index != -1:
print(f"Chave {target} encontrada na posicao {index}.")
else:
print(f"Chave {target} não encontrada.")
(b) (12%)
n = max(len(str(x)), len(str(y)))
half = n // 2
a, b = divmod(x, 10**half)
c, d = divmod(y, 10**half)
ac = karatsuba_multiply(a, c)
bd = karatsuba_multiply(b, d)
ad_bc = karatsuba_multiply(a + b, c + d) - ac - bd
x = 1001003
y = 9876542
result = karatsuba_multiply(x, y)
print(f"{x} x {y} = \n{result}")
Exercício 5 - Seja um vetor A de n elementos inteiros. É possível determinar a quantidade de elementos
ímpares do vetor em Θ(n), percorrendo-se o vetor de forma iterativa. Alternativamente, pode-se utilizar
um método de divisão-e-conquista. (a) Implemente uma função iterativa para determinar a quantidade de
elementos ímpares do vetor A. (4%) (b) Implemente uma função recursiva, baseada em divisão-e-
conquista, para determinar a quantidade de elementos ímpares do vetor A. O algoritmo recursivo deve
dividir o vetor em duas partes de tamanhos aproximadamente iguais até se chegar a um caso trivial.
(12%)
Exercício 6 - Dissertar sobre os algoritmos de ordenação (selection sort; bubble sort; insertion sort; e
merge sort), explicando as estratégias de resolução e discutindo as complexidades de melhor e pior casos.
(12%)