Jak wypisać wszystkie anagramy podanego wyrazu (permutacja ciągu, PHP Skrypty


[PHP] Jak wypisać wszystkie anagramy podanego wyrazu (permutacja ciągu)?

0x01 graphic

Chcesz utworzyć anagramy dla podanego wyrazu, czyli dokonać permutacji wyrazu aby uzyskać wszystkie możliwe jego kombinacje.

0x01 graphic

Anagramy to wyrazy, które mają takie same litery występujące w takiej samej ilości, ale na innych miejscach, np. "alga" jest anagramem wyrazu "gala".

Tworzenie anagramów z wyrazów może być przydatne w grach słownych. W matematyce permutacja liczb wykorzystywana jest bardzo często, szczególnie w różnych systemach szyfrujących.

Przedstawiony algorytm jest jedną z najbardziej czytelnych implementacji problemu. Ponieważ liczba permutacji rośnie bardzo szybko wraz z ilością liter w wyrazie, musisz zwracać uwagę, aby nie wywoływać funkcji z długimi wyrazami. Zobacz jak szybko wypisać na ekranie wszystkie anagramy dla podanego wyrazu.

<?

function anagramy($wyraz) {

for ($i=0;$i<strlen($wyraz);$i++) {

$znak=$wyraz[$i];

$ile=count($tmp);

if ($ile==0) $tmp[]=$znak;

else {

for($k=0;$k<$ile;$k++) {

$ciag=$tmp[$k];

for($j=0;$j<=strlen($ciag);$j++) {

$new[]= substr($ciag,0,$j).$znak.substr($ciag,$j);

}

}

$tmp=$new;

$new="";

}

}

return $tmp;

}

$tmp = anagramy("123");

for ($i=0;$i<count($tmp);$i++) echo $tmp[$i]."<br>";

?>

Dla 2 liter mamy 2 kombinacje, dla 3 liter już 6, dla 4 liter aż 24, dla 5 liter 120, a dla 6 liter 720 kombinacji. Dla 8 liter istnieje 40320 kombinacji!

Zasada działania algorytmu jest prosta. Pobiera on poszczególne litery i tworzy ich kombinację. Niech naszym ciągniem znaków będzie "123". Bierzemy pierwszą literę (akurat tak się składa, że to cyfra) i otrzymujemy:

1

Teraz bierzemy drugą literę i umieszczamy ją pomiędzy już istniejące. Ponieważ litera jest jedna, to kolejną dostawiamy z przodu i z tyłu. Mamy już dwie kombinacje, które pamiętamy w tablicy $tmp.

21

12

Z tablicy $tmp pobieramy poprzednie kombinacje (dwie) i ponownie uzupełniamy je trzecim znakiem, a całość zapisujemy jest w tablicy $new. Tym razem kombinacji jest sześć.

321

231

213

312

132

123

W przykładzie dobrze widać, jak znak "3" wkładany jest pomiędzy poprzednie kombinacje ze znakami "1" i "2". Ponieważ ciąg miał trzy znaki na tym kończymy i funkcja zwraca nam tablicę anagramów.

Teraz pozostaje wypisać anagramy na ekran, co można z powodzeniem wykonać w pętli for. A oto wszystkie anagramy dla słowa "rady":

adry adyr ardy aryd aydr ayrd

dary dayr dray drya dyar dyra

rady rayd rday rdya ryad ryda

yadr yard ydar ydra yrad yrda



Wyszukiwarka

Podobne podstrony:
Jak wysłać ze strony WWW e-mail z dowolnym załącznikiem, PHP Skrypty
Jak stworzyć prostą wyszukiwarkę dla własnych stron WWW, PHP Skrypty
Jak pobrać zawartość strony WWW korzystając z biblioteki CURL, PHP Skrypty
Jak uzyskać kolejny numer (id) ostatnio wstawionego rekordu, PHP Skrypty
jak przeslac dane z pol tekstowych do innych stron, PHP Skrypty
Jak pobrać i zapisać na dysk wskazane strony WWW, PHP Skrypty
Jak zmienić tło strony w zależności od aktualnej godziny, PHP Skrypty
Jak zablokować powtórne przetwarzanie formularzy przy odświeżaniu strony, PHP Skrypty
Jak sprawdzić czy domena istnieje i do kogo należy, PHP Skrypty
jak uzywajac szyfru cezara zakodowac lub odkodowac wiadomosc, PHP Skrypty
Jak szybko przenieść zawartość pliku tekstowego do tabeli, PHP Skrypty
Jak wybrać losowy rekord (lub losowe rekordy) z tabeli, PHP Skrypty
jak logowac unikatowe numery IP uzytkownikow z calego dnia, PHP Skrypty
Jak udostępnić stronę tylko dla wybranych numerów IP, PHP Skrypty
jak wykonac sortowanie przez wstawianie algorytm inserion sort, PHP Skrypty
Jak wysłać ze strony WWW e-mail z dowolnym załącznikiem, PHP Skrypty
Jak stworzyć prostą wyszukiwarkę dla własnych stron WWW, PHP Skrypty
Jak pobrać zawartość strony WWW korzystając z biblioteki CURL, PHP Skrypty
Jak uzyskać kolejny numer (id) ostatnio wstawionego rekordu, PHP Skrypty

więcej podobnych podstron