Prima pagină > Articole > Computing > Varia > Recurenţă

Recurenţă

Marţi 6 iunie 2006, de Valentin Murariu

Într-un moment de dat in mintea copiilor, mi-am adus aminte de un joc care era cam aşa: dat fiind un cuvant, să obţin cat mai multe alte cuvinte din literele care compun cuvantul iniţial.

Am nevoie de următoarele structuri de date:
 entităţi de limbaj (language entities): le. Poate fi o literă sau un alt cuvant.
 colecţie de entităţi de limbaj: cle.

Pseudo-cod care foloseşte recurenţă:

funcţie construieşte_lista(le, cle ) {
	iniţializează cle_retur cu o listă goală;
	pentru fiecare le' care constituie cle {
		dacă cuvantul obţinut prin concatenarea le cu le' are sens atunci {
			adaugă la cle_retur noul cuvant (le + le');
			adaugă la cle_retur lista cle obţinută
				prin apelul recursiv la 
				construieşte_lista(le + le', cle -le' );
		}
	}
	returneaza cle_retur;
}

M-am gandit să transcriu acest algoritm intr-un limbaj oarecare. După un moment de ezitare in care am comparat:
 C, unde le poate fi un sir de caractere iar cle un tablou de pointere la şiruri de caractere
 C++, unde le poate fi un std::string şi cle un std::vector;
 Java, unde le poate fi un String şi cle un List;
 Perl, unde le poate fi un şir de caractere şi cle un tablou;

Am ales Perl, pentru concizia cu care pot scrie următorul cod:

Putem remarca că funcţia makes_sense este fără rost (sic!), dar poate fi imbunătăţită in viitor cu o căutare intr-un dicţionar de cuvinte. Pană una-alta, filtrarea va fi făcută ulterior de către operatorul uman.

Dacă rulez acest script:

$ ./words.pl radu
r; ra; rad; radu; rau; raud; rd; rda; rdau; rdu; rdua; ru; rua; ruad; rud; ruda; a; ar; ard; ardu; aru; arud; ad; adr; adru; adu; adur; au; aur; aurd; aud; audr; d; dr; dra; drau; dru; drua; da; dar;
daru; dau; daur; du; dur; dura; dua; duar; u; ur; ura; urad; urd; urda; ua; uar; uard; uad; uadr; ud; udr; udra; uda; udar

Nu mai am acum decat să filtrez cuvintele care au sens, de exemplu: rad, ard, rudă, aur, dar (Bravo, Radule, ce nume plin de sensuri ascunse ai !).

Trăiască plăcerile obscure ale algoritmilor !