Matematikai Algoritmusok és Felfedezések I.

12. Előadás: Algoritmikus gondolkodás

2021 május 3.

Beadandó tapasztalatok

lassú megoldás a 3. feladatra

drb_szotar={}
for i in hun_alph:
    darab = 0
    for j in range(len(szoveg)):
        if szoveg[j] == i:                    
            darab = darab + 1
    drb_szotar[i] = darab

gyors megoldás

char_freq = {}
for char in szoveg:
    if char in char_freq:
        char_freq[char] += 1
    else:
        char_freq[char] = 1

drawing

Programkészítés menete

Tervezés

Implementálás és tesztelés

"For some people, programming and debugging are the same thing. That is, programming is the process of gradually debugging a program until it does what you want. The idea is that you should start with a program that does something and make small modifications, debugging them as you go, so that you always have a working program." (https://runestone.academy/)

Példa 1. Sodoku megoldó

Az ötlet, hogy próbáljunk végig mindent. A brute force megoldások sokszor lassúak, viszont néha nincs jobb lehetőség. Mire kell figyelni?

Második megoldás, rekurzióval.

drawing

Példa 2. Edmonds Karp

Adott egy folyamfeladat. Keressünk maximális folyamot benne.

drawing

Ford Fulkerson algoritmusnak az Edmonds Karp verzióját valósítjuk meg.

Példa 3. Egy feladvány

Van egy sakktáblánk, melynek a mezői véletlenszerűen feketére vagy fehérre vannak színezve. Szeretnénk elérni, hogy az összes mező fekete legyen. Egyetlen eszközünk van erre, ha megnyomunk egy mezőt, akkor a sorában és az oszlopában minden mező megváltoztatja a színét. Készítsük egy algoritmust, mely megadja, hogy melyik mezőket kell megnyomni, hogy végül teljesen legyen a tábla.

drawing