Autor Wątek: Potrzebuję pomocy z algorytmem - sprawdzenie, czy tablice są anagramami :)  (Przeczytany 249 razy)

Offline BeereQ

  • Self-improvement fan :)
  • Administrator
  • Maniak
  • ******
  • Wiadomości: 687
  • Reputacja +20/-6
    • http://aster-forum.info
Witajcie moi mili!

Potrzebuję pomocy z algorytmem, myślę że znajdzie się tu jakiś "programista", może przejdę od razu do rzeczy:


Algorytm sprawdza, czy dwie tablice są anagramami np. [1,2,3,4] i [2,3,1,5] nie są, ale np. [1,2,3,4] i [2,3,1,4] są. (tablice muszę być takie, aby przestawiając elementy w jednej z nich otrzymać drugą).

W skrócie mój plan działania:

1. Wprowadzenie danych
2. Sprawdzenie, czy długość (ilość liczb) w tablicach x i y jest taka sama.
3. Posortowanie tablic (np. w kolejności rosnącej)
4. Sprawdzanie element po elemencie

Doszedłem do czegoś takiego (docelowo ma to być pseudokod mieszany z językiem C), w tej chwili jest to powiedzmy Pascal :P

A,B to tablice jednowymiarowe
i oznacza iterację wiersza tablicy (A lub B)
w1, w2 to liczba wierszy (elementow) tablicy odpowiednio A/B
asort, bsort - zmienne pomocnicze do sortowania bąbelkowego

Pomijając już wprowadzenie danych i deklarację zmiennych wymyśliłem coś takiego

while w1=w2 do

begin

  for (i=0 to w1-1) && (i=0 to w2-1) do

  if A[i] > A[i+1] then

    begin

    asort:=A[i+1];
    A[i+1]:=A[i];
    A[i]:=asort

    end;

  if B[i] > B[i+1] then

    begin

    bsort:=B[i+1];
    B[i+1]:=B[i];
    B[i]:=bsort

    end;

  for (i=0 to w1) do

  if A[i]=B[i] then

  wyświetl("Tablice sa anagramami")


end;

else wyświetl("Tablice nie sa anagramami")


Potrzebuję opinii czy to ma szansę działać, co jest ok a co jest nie ok i czy można zrobić to prościej, tak żeby zmniejszyć złożoność obliczeniową. (stosując quicksort?)
« Ostatnia zmiana: Styczeń 21, 2010, 13:17:29 pm wysłana przez BeereQ »
Fiber Power 10 Mbit/s + n tv. DVB-S > DVB-C.
Ovislink WL-1600GL + tomato + QoS UL & DL
TP-Link 1043ND + OpenWRT + Play HSPA+

 


SimplePortal 2.3.3 © 2008-2010, SimplePortal