Generarea expresiilor aritmetice cu patru operanzi
Modelăm expresiile aritmetice prin arbori binari, plecând de la o clasă abstractă pentru noduri şi angajând "smart pointers" din C++11. Generăm prin acest model, toate expresiile aritmetice cu 4 operanzi - filtrând eventual pe cele care interesează în privinţa valorii.
Generarea directă a unui ciclu eulerian, în grafurile complete
Pentru graful complet cu nodurile 0..2n şi cu listele de adiacenţă ordonate crescător, ciclul eulerian produs de algoritmul lui Hierholzer startat din nodul 2n este constituit din n cicli disjuncţi după muchii, având în comun vârful 2n şi respectiv lungimile 3+4*j (j=0..n-1); exceptând ciclul cel mai lung, nodurile fiecărui ciclu - afară de primul nod 2n şi de ultimele patru noduri - provin din nodurile de aceeaşi poziţie ale ciclului de lungime imediat superioară, prin majorarea acestora cu 2.
Model C++ de graf şi submodel de graf eulerian
Completăm modelul "minimal" de graf (introdus anterior), astfel încât să facilităm algoritmii care angajează muchiile grafului: după ce muchia este parcursă, ea trebuie "ştersă" (marcând-o drept "utilizată"), iar gradele curente ale capetelor ei trebuie decrementate. Derivăm de aici, o modelare a grafurilor euleriene (algoritmul lui Hierholzer) şi testăm pentru grafurile complete (K1001 poate fi "rezolvat" sub 100 de secunde).
Producţii De Bruijn dintr-un model minimal de graf
O modelare minimală a grafurilor ar avea de prevăzut alocarea şi delocarea memoriei pentru înregistrarea adiacenţei, o metodă de precizare a adiacenţei a două vârfuri şi o metodă generală de traversare (fie DFS), în vederea prelucrării vârfurilor printr-o metodă lăsată spre specificare claselor derivate.
Constituim în C++ un astfel de model, clasa Graph. Rezolvarea a diverse chestiuni reductibile la parcurgerea şi prelucrarea nodurilor unui anumit graf, revine la a deriva din Graph o clasă al cărei constructor să seteze adiacenţa specifică problemei, încorporând metoda specifică de "prelucrare" şi o metodă care să invoce Graph::DFS(). Exemplificăm aceste demersuri pentru a produce şiruri De Bruijn.
Generarea directă a unor şiruri De Bruijn binare
Studiem o relaţie "uϒv" între numere reprezentabile pe n biţi, astfel încât u şi v să poată fi reperate într-o secvenţă de n+1 biţi consecutivi dintr-un şir S; justificăm un algoritm de generare a unui şir finit de numere naturale - iterând relaţia "uϒv" - astfel încât reprezentările binare ale termenilor şirului să poată furniza un cel mai scurt cuvânt S care să aibă ca subcuvinte toate secvenţele de n biţi.
Şirul generat prin acest algoritm coincide cu cel dat de parcurgerea DFS a grafului asociat relaţiei "uϒv", plecând însă dintr-un anumit nod al acestuia.
vezi Cărţile mele (de programare)