6 běžných otázek k pohovoru o dynamickém programování (s video řešením)

Dynamické programování může být pro většinu softwarových inženýrů postrachem jejich existence. Myslím, že neexistuje téma, na které bych dostal více otázek.

A já to naprosto chápu.

Tazatelé se rádi ptají na tyto otázky, protože jsou těžké.

Tazatelé s nimi opravdu bojují, protože nemají rámec pro řešení problémů DP.

To znamená, že pokaždé, když se snažíte vyřešit problém dynamického programování, začínáte od začátku. Nemůžete použít vzory, které jste viděli u jiných problémů DP, protože vypadají úplně jinak. Takže vždy začínáte znovu a snažíte se tyto obtížné problémy vyřešit od nuly.

V tomto příspěvku vám chci ukázat lepší způsob.

Následující videa vás provedou 6 nejčastějšími problémy DP, které můžete očekávat při pohovorech. Pokud se tyto problémy naučíte a naučíte se používat metodu FAST, budete na tom s dynamickým programováním při pohovorech velmi dobře.

Tip: Pokud s dynamickým programováním teprve začínáte, přečtěte si nejprve naši bezplatnou 42stránkovou e-knihu Dynamické programování pro přijímací pohovory

Podívejte se na úlohy:

Nejmenší změna

Při zadané vstupní částce změny x napište funkci, která určí minimální počet mincí potřebných k provedení této částky změny.

např. (při použití amerických mincí)

1
2
3
4

. change(1) = 1
change(3) = 3
change(7) = 3
change(32) = 4

Nejdelší společný podřetězec

Při dvou řetězcích, napište funkci, která vrátí nejdelší společný podřetězec.

např.

longestSubstring("ABAB", "BABA") = "ABA"

Fibonacciho číslo

Dáno celé číslo n, napište funkci, která vypočítá n-té Fibonacciho číslo.

např.

fibonacci(1) = 1
fibonacci(5) = 5
fibonacci(10) = 55

Čtvercová podmřížka

Dáno 2D pole 1 a 0, najděte největší čtvercovou podmřížku všech 1.

např.

1
2
3

subarray(
) = 2

Matrix Product

Dáno maticí, najděte cestu z levého horního rohu do pravého dolního rohu s největším součinem pohybem pouze dolů a doprava.

např.

1
2
3
4
5
6
7
8
9
10
11
12
13

1 -> 4 -> 7 -> 8 -> 9
2016
-1 -> 4 -> 5 -> -6 -> 9
1080

0-1 Batoh

Dán seznam položek s hodnotami a váhami, a také maximální váhu, najděte maximální hodnotu, kterou můžete vytvořit z položek, u nichž je součet vah menší než max.

např.

1
2
3

items = {(w:1, v:6), (w:2, v:10), (w:3, v:12)}
maxWeight = 5
knapsack(items, maxWeight) = 22

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.