Skip to main content Link Search Menu Expand Document (external link)

Rješenja zadataka s vježbi

Vremenska složenost

Najveći zbroj podniza

Zadatak 1: $O(n^3)$ složenost

Zadatak 2: $O(n^2)$ složenost

Zadatak 3 $O(n)$ složenost

Zadatak 4: Lista nasumičnih brojeva

Zadatak 5: Mjerenje brzine izvođenja

Potpuna pretraga

Zadatak 1: Generiranje podskupova

def search(k, n, subset):
    if k == n:
        print(subset)

    else:
        search(k+1, n, subset)
        subset.append(k)
        search(k+1, n, subset)
        subset.pop()

## primjer za n=3
n = 3 
subset = []
search(0, n, subset)

Zadatak 2: Binarna reprezentacija

bins = [format(i, "b").zfill(n) for i in range(2**n)]

Zadatak 3: K-sum binarno

bins = [format(i, "b").zfill(n) for i in range(2**n)]

for sel in bins:
    total = 0
    
    for i, b in enumerate(sel):
        if b=="1":
            total+=l[i]

    if total == k:
        for i, b in enumerate(sel):
            if b=="1":
                print(l[i])

Zadatak 4: K-sum Meet in the middle

Zadatak 5: Različite znamenke

Pohlepni algoritmi

Zadatak 1: Problem s kovanicama

n = int(input())

def find_largest_close(n):
    coins = [1, 2, 5, 10, 20, 50, 100, 200]
    largest = False
    for c in coins:
        if c <= n:
            largest = c

    return largest


while True:
    v = find_largest_close(n)
    if not v:
        break
    else:
        print(v, end=" ")
        n-=v 

Zadatak 2: Kompresija podataka


Zadatak 3:Zakazivanje aktivnosti

def myFoo(e):
    return e[1]

cls_l = [[8, 9],
        [11, 13],
        [9, 10],
        [8, 14],
        [15, 17],
        [10, 12],
        [8, 10]
        ]

# lista.sort(key=myFoo)
# lista.sort(key = lambda x: x[1])

predmeti.sort(key = lambda x: (x[1], x[0]))

c = 0 # najveci broj mogucih predmeta
enroll = [] #predmeti
end = -1 #zadnje vrijeme

for cls in cls_l:
    if end <= cls[0]:
        end = cls[1]
        count+=1
        enroll.append(cls)

Dinamičko programiranje

Zadatak 1: Fibonacci

def fib_rec(n):
    in n <= 1:
        return n
    else:
        return fib_rec(n-1) + fib_rec(n-2)
def fib_dyn(n):
    mem = [0, 1]
    for i in range(2, n+1):
        mem.append(mem[i-1]+mem[i-2])
    return(mem[n])
def fib_dyn_opti(n):
    a = 0
    b = 1

    if n == 0:
        return a
    elif n == 1:
        return b
    else:
        for i in range(2, n+1):
            c = a+b
            a = b
            b = c
        return b

Zadatak 2: Problem s kovanicama


Zadatak 3: Stube


Zadatak 4: Stube s troškovima


Bit manipulation

Zadatak 1: Element bez ponavljanja

l = [int(x) for x in input().split(" ")]
res = 0
for b in l:
    res ^= b
print(res)

Zadatak 2: Hammingova težina

s = input()
n = int(s,2)
print(n)

res = 0
while n:
    res += n%2
    n = n >> 1

print(res)

Zadatak 3: Nedostaje broj

l1 = [0, 1, 3]
l2 = list(range(0, len(l1)+1))
## solution 1
res = 0
for num in l1:
    res ^= num
for num in l2:
    res ^= num
print(res)

## solution 2
l1 = [0, 1, 3]
l2 = list(range(0, len(l1)+1))
print(sum(l2)-sum(l1))

Grafovi

Putovanje kroz graf

Zadatak 1: Broj otoka

Zadatak 2: Najveći otok