You are on page 1of 4

USAP

ANLISIS DE ALGORITMOS
ACTIVIDAD N3

ALUMNO:
ALEX F. HILSACA

CUENTA:
3130105

FECHA DE ENTREGA:
SBADO, 4 FEBRERO 2017
USAP | ANLISIS DE ALGORITMOS

ACTIVIDAD 3 | EJERCICIOS PRCTICOS

4.1-1) Cual es el resultado que regresa FIND-MAXIMUM-SUBARRAY cuando todos sus elementos
son negativos?

R/ Regresar un solo elemento en el arreglo, con el entero ms grande.

4.1-2) Escriba un seudocdigo para el mtodo fuerza bruta para resolver el problema del mximo
sub-arreglo en O(n2)

R/

Max (A, menor, mayor)

izq = menor

der = mayor

sum = -

for (i = menor hasta mayor)

temp_sum = 0

for (j = i hasata mayor)

temp_sum += A[j]

if temp_sum > sum

sum = temp_sum

izq = i

der = j

return (izq, der , sum)


USAP | ANLISIS DE ALGORITMOS

4.1-3) Implemente un algoritmo que sea de fuerza bruta y recursivo para resolver el mximo sub-
arreglo en su PC. Qu problema de tamao n0 en el punto de cruce causa que el algoritmo
recursivo supere el de fuerza bruta?

R/

def find_max_crossing_subarray(arr, low, mid, high):

left_sum = -1e100

sum = 0

for i in range(mid - 1, low - 1, -1):

sum = sum + arr[i]

if sum > left_sum:

left_sum = sum

max_left = i

right_sum = -1e100

sum = 0

for j in range(mid, high):

sum = sum + arr[j]

if sum > right_sum:

right_sum = sum

max_right = j

return max_left, max_right, left_sum + right_sum

def find_maximum_subarray(arr, low, high):

if low >= high:

return -1, -1, -1e100

if low + 1 == high:

return low, low, arr[low]

mid = (low + high) // 2

left_low, left_high, left_sum = find_maximum_subarray(arr, low, mid)


USAP | ANLISIS DE ALGORITMOS

right_low, right_high, right_sum = find_maximum_subarray(arr, mid, high)

cross_low, cross_high, cross_sum = find_max_crossing_subarray(arr, low, mid, high)

if left_sum >= right_sum and left_sum >= cross_sum:

return left_low, left_high, left_sum

if right_sum >= left_sum and right_sum >= cross_sum:

return right_low, right_high, right_sum

return cross_low, cross_high, cross_sum

4.1-4) Asumiendo que la definicin del mximo sub-arreglo ahora permite elementos vacos, en
donde la suma de un dato con un elemento vaco es 0. Cmo cambiaria los algoritmos que no
permiten arreglos vacos como parte del resultado?

R/ Lo cambiaria retornando vaco si el resultado es negativo.

You might also like