$$ \newcommand{\floor}[1]{\left\lfloor{#1}\right\rfloor} \newcommand{\ceil}[1]{\left\lceil{#1}\right\rceil} \newcommand{\mod}{\,\mathrm{mod}\,} \renewcommand{\div}{\,\mathrm{div}\,} \newcommand{\metar}{\,\mathrm{m}} \newcommand{\cm}{\,\mathrm{cm}} \newcommand{\dm}{\,\mathrm{dm}} \newcommand{\litar}{\,\mathrm{l}} \newcommand{\km}{\,\mathrm{km}} \newcommand{\s}{\,\mathrm{s}} \newcommand{\h}{\,\mathrm{h}} \newcommand{\minut}{\,\mathrm{min}} \newcommand{\kmh}{\,\mathrm{\frac{km}{h}}} \newcommand{\ms}{\,\mathrm{\frac{m}{s}}} \newcommand{\mmin}{\,\mathrm{\frac{m}{min}}} \newcommand{\smin}{\,\mathrm{\frac{s}{min}}} $$

Tagovi: kombinatorika backtrack backtracking permutacije varijacije kombinacije

Uvod u algoritme / Backtracking i kombinatorika

Backtracking i kombinatorika

U informatici se veoma često javljaju kombinatorni potproblemi, gde je potrebno proći kroz sve permutacije, varijacije ili kombinacije, ili napraviti partitivan skup nekog skupa. U ovoj lekciji ćemo videti kako se prebrojavaju permutacije, varijace i kombinacije, te ćemo isto videti i kako upotrebom rekurzije da ispišemo iste.

Za mnoge probleme u praksi se ne zna optimalno rešenje, tj. algoritam koji ih rešava je eksponencijalne složenosti. Iako se složenost algoritma ne menja, optimizacijama možemo drastično da ubrzamo naš program, tj. na relativno malim test primerima, naš program će raditi dovoljno brzo. Sa pojmom backtracking-a ste se sreli u lekciji "Rekurzija", gde ste spomenuli i najpoznatiti problem backtracking-a gde treba 8 dama da se postave na šahovsku tablu tako da se ne napadaju međusobno. Ovde ćemo videti koliko neke optimizacije stvarno ubrzavaju naš program i na šta treba da se pazi pri rešavanju problema backtracking-om.