Note de curs, clasele 9-10, 19 aprilie 2013

From Algopedia
Jump to navigationJump to search

Căutări pe stringuri

Recapitulare

  • automate finite
  • nu toate limbajele pot fi decise de automate finite: L = { 0n1n | n >= 0 }
    • demonstrație intuitivă: pot construi un automat pentru 0 <= n <= 4, dar mi-ar trebui un automat cu număr infinit de stări pentru n infinit.
  • exemplu pentru P = abacaba
  • după construirea automatului, algoritmul rulează orbește în O(n)
  • construirea automatului se face în O(m3 * |Σ|)
  • există un algoritm în O(m * |Σ|), dar avem deja algoritmul KMP în O(m).

Algoritmul KMP

  • nu mai depinde de mărimea alfabetului
  • în loc de o matrice δ[m][|Σ|], folosește doar un vector π[m]
  • intuitiv, când următorul caracter nu se mai potrivește, algoritmului KMP nu-i mai pasă ce caracter anume urmează la intrare
  • starea următoare în care trece patternul depinde doar de pattern
  • de aceea, KMP face ceva mai multe comparații decât un automat finit „perfect”, dar asimptotic este tot O(n)
  • mai exact, π[q] = max { k | Pk este sufix al lui Pq }
  • cod pentru construirea lui π și pentru căutarea propriu-zisă

Probleme

  • Se dau două șiruri A și B, ambele cu câte n caractere. Să se spună dacă A este permutare circulară a lui B.
  • Se dă un șir A cu n caractere. Să se afle care dintre cele n permutări circulare ale lui A este minimă lexicografic.

Algoritmul Minimax

  • Arbori de joc, exemplificați pe X și 0
  • Scorurile pozitive sunt bune pentru X, iar cele negative sunt bune pentru 0
  • Deci nivelurile alternează între „mini” (0 caută cel mai mic scor) și „max” (X caută cel mai mare scor)
  • Arborele minimax are 9! noduri (vreo 30.000 după eliminarea simetriilor)
  • La alte jocuri, arborele este (mult) prea mare pentru a putea fi analizat complex
  • Mergem în adâncime cât de mult putem, iar la ultimul nivel analizăm poziția cu o euristică statică
  • Euristica ia în calcul materialul, dar și poziționalul (pioni avansați, controlul centrului, regele expus, dacă tocmai am dat șah)
  • Exemplu pe arbore
    • Demonstrație că nu ajung întotdeauna în cel mai bun nod pentru mine, ci în cel mai bun nod presupunând că ambii jucători joacă perfect.
  • Pseudocod pentru minimax. Depinde de trei funcții:
    • euristica statică
    • generarea tuturor mutărilor legale într-o poziție dată
    • efectuarea unei mutări legale pe tablă
  • Algoritmul negamax: valoarea unei poziții este maximul valorilor fiilor, luate cu semn schimbat
    • Nu mai trebuie să trateze separat cazurile în care albul, respectiv negrul, este la mutare