comp-think / 2021-2022

The GitHub repository containing all the material related to the Computational Thinking and Programming course of the Digital Humanities and Digital Knowledge degree at the University of Bologna (a.a. 2021/2022).
17 stars 9 forks source link

Lecture "Dynamic programming algorithms", exercise 2 #32

Open essepuntato opened 2 years ago

essepuntato commented 2 years ago

Choose any recursive algorithm introduced in the previous chapters and provide a new implementation of it in Python following the dynamic programming approach.

Bianca-LM commented 2 years ago
def` test_exponentiation(base_number, exponent, d, expected): 
    result = exponentiation(base_number, exponent, d)
    if expected == result: 
        return True
    else: 
        return False

def exponentiation(base_number, exponent, d):
    if base_number**exponent not in d: 
        if exponent == 0: 
            d[base_number**exponent] = 1
        elif exponent == 1:
            d[base_number**exponent] = base_number
        else: 
           d[base_number**exponent] = base_number * exponentiation(base_number, exponent-1, d)
    return d.get(base_number**exponent)

print(test_exponentiation(3,4, dict({1**2: 1}), 81))
print(test_exponentiation(17,1, dict(), 17))
print(test_exponentiation(2,0, dict({2**0:1, 3**1: 3.}), 1))
AmeliaLamargese commented 2 years ago
def test_exponentiation(int, exp, dictionary, expected):
    result = exponentiation(int, exp, dictionary)
    if result == expected:
        return True
    else:
        return False

def exponentiation(int, exp, dictionary):
    if int not in dictionary:    
        if exp == 0:
            dictionary[int] = 1
        elif exp == 1:
            dictionary[int] = int
        else:
            dictionary[int] = int * exponentiation(int, exp-1, dict)  

    return dictionary.get(int)  

print(test_exponentiation(2, 0, dict(), 1))
print(test_exponentiation(2, 1, dict(), 2))
print(test_exponentiation(2, 4, dict(), 16))
ManueleVeggi commented 2 years ago
def test_exponentiation(int_1, int_2, solution_dict, expected):
    result = exponentiation(int_1, int_2, solution_dict)
    if result == expected:
        return True
    else:
        return False

def exponentiation(int_1, int_2, solution_dict):
    if int_2 not in solution_dict:
        if int_2 == 0:
            solution_dict[int_2] = 1
        elif int_2 == 1:
            solution_dict[int_2] = int_1
        else: 
            solution_dict[int_2] = int_1 * exponentiation(int_1, int_2 - 1, solution_dict)

    return solution_dict.get(int_2)

print(test_exponentiation(3,0,dict(),1))
print(test_exponentiation(3,1,dict(),3))
print(test_exponentiation(3,2,dict(),9))
print(test_exponentiation(3,0,{0:1, 1:3, 2:9, 3:27},1))
print(test_exponentiation(3,1,{0:1, 1:3, 2:9, 3:27},3))
print(test_exponentiation(3,2,{0:1, 1:3, 2:9, 3:27},9))

The output is True for all the test cases

olgagolgan commented 2 years ago

Screenshot (134)

martasoricetti commented 2 years ago
image
tommasobattisti commented 2 years ago
def test_factorial_recursive(n, d, expected):
    result = factorial_recursive(n, d)
    if expected == result:
        return True
    else:
        return False

factorial_dict = {}

def factorial_recursive(n, d):
    if n not in d:
        if n == 1:
            d[n] = 1
        else:
            d[n]= n * factorial_recursive(n-1, d)
    return d.get(n)

print(test_factorial_recursive(12, factorial_dict, 479001600))
print(test_factorial_recursive(7, factorial_dict, 5040))
print(test_factorial_recursive(3, factorial_dict, 6))
CarmenSantaniello commented 2 years ago
def test_exponentiation(base_number, exponent, solution_dict, expected):
    result = exponentiation(base_number, exponent, solution_dict)
    if result == expected:
        return True
    else:
        return False

def exponentiation(base_number, exponent, solution_dict):
    if base_number**exponent not in solution_dict:
        if exponent == 0:
            solution_dict[base_number**exponent] = 1
        elif exponent == 1:
            solution_dict[base_number**exponent] = base_number 
        else:
            solution_dict[base_number**exponent] = base_number * exponentiation(base_number, exponent - 1, solution_dict)

    return solution_dict.get(base_number**exponent)

print(test_exponentiation(3, 4, dict(), 81))
print(test_exponentiation(17, 1, dict(), 17))
print(test_exponentiation(2, 0 ,dict(), 1))
print(exponentiation(3, 4, dict()))
print(exponentiation(17, 1, dict()))
print(exponentiation(2, 0, dict()))
AnastasiyaSopyryaeva commented 2 years ago
#Defining test function

def test_exponentiation_extended(base_number, exponent, solution_dict, expected):
    result = exponentiation_extended(base_number, exponent, solution_dict)
    if expected == result:
        return True
    else:
        return False

#Function code
def exponentiation_extended(base_number, exponent, solution_dict):
    numbers = base_number, exponent
    if numbers not in solution_dict:
        if exponent == 0:
            solution_dict[base_number, 0] = 1
        else:
            return base_number * exponentiation_extended(base_number, exponent - 1, solution_dict)
    return solution_dict.get(numbers)

#print
print(test_exponentiation_extended(3, 4, dict(), 81)) #true
print(test_exponentiation_extended(17, 1, dict(), 17)) #true
print(test_exponentiation_extended(2, 0, dict(), 1)) #true
angstigone commented 2 years ago
Schermata 2021-12-05 alle 15 39 24 Schermata 2021-12-05 alle 15 39 55
essepuntato commented 2 years ago

Hi,

just a few comments for you to check in your solutions:

ahsanv101 commented 2 years ago

image

print(test_exp_rec(2, 0, dict(), 1)) print(test_exp_rec(3,1,dict(),3)) print(test_exp_rec(3,2,dict(),9)) print(test_exp_rec(3,0,{0:1, 1:3, 2:9, 3:27},1)) print(test_exp_rec(2, 1, dict(), 2)) print(test_exp_rec(2, 4, dict(), 16)) print(test_exp_rec(3,0,dict(),1)) print(test_exp_rec(3,1,{0:1, 1:3, 2:9, 3:27},3)) print(test_exp_rec(3,2,{0:1, 1:3, 2:9, 3:27},9))

RebeccaJillianBeattie commented 2 years ago

exponentiation dynamic programming

sanyuezoe commented 2 years ago
def exponentiation_dynamic_test(base_number, exponent, save_dict, expected):
    result = exponentiation_dynamic(base_number, exponent, save_dict)
    if result == expected:
        return True
    else:
        return False

def exponentiation_dynamic(base_number, exponent, save_dict):
    exponent_pair = (base_number, exponent)
    if exponent_pair not in save_dict:
            if exponent == 0:
                save_dict[exponent_pair] = 1
            else:
            save_dict[exponent_pair] = base_number * (exponentiation(base_number, exponent - 1, save_dict))

    return save_dict[exponent_pair]

my_dict =dict()

print(exponentiation_dynamic_test(3, 4, my_dict, 81))
print(exponentiation_dynamic_test(17, 1, my_dict, 17))
print(exponentiation_dynamic_test(2, 0, my_dict, 1))