momente şi schiţe de informatică şi matematică
To attain knowledge, write. To attain wisdom, rewrite.

Generarea expresiilor aritmetice cu patru operanzi

C++
2014 feb

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

C++ | DOT | Hierholzer | Python | graf
2014 feb

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

C++ | DOT | Hierholzer | graf
2014 jan

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

C++ | DOT | De Bruijn | graf
2014 jan

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

C++ | De Bruijn
2014 jan

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.


Prev
Next
ALL (372 titluri)

vezi Cărţile mele (de programare)

despre acesta ~ Home
(sau https://vlad.bazon.net/

Factoriale | Graficul funcţiilor

PGN browser | chess JS engine

Load

in /slightchess

/slightchess

626 partide analizate cu Crafty

(R) Computer Art | Decoraţiuni

Aplicaţii şcolare (javaScript)

Sinteze: