Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Jak szybko porównać tablice?

Adam Ś. 18 Sie 2012 13:12 3000 6
  • #1 18 Sie 2012 13:12
    Adam Ś.
    Poziom 12  

    Cześć all. Mam taki problem że tworząc aplikację w C# muszę porównać 2 tablice 25-cio elementowe. Mogę puścić to w pętli i porównywać elementy po kolei ale podobno jest to wolny sposób a ja potrzebuję czegoś szybszego tak żeby zyskać na wydajności. Więc jak to zrobić szybko?

    0 6
  • #2 18 Sie 2012 13:31
    marcinj12
    Poziom 40  

    Co to znaczy porównać? Znaleźć elementy wspólne/charakterystyczne dla obydwu tablic? Porównać stosunek większy/mniejszy/równy poszczególnych elementów? Czy wartości w tej tablicy mogą się powtarzać, czy są unikalne?

    0
  • #3 18 Sie 2012 14:29
    McMonster
    Poziom 32  

    Jak często porównujesz tablice, jak wyżej, co dokładnie porównujesz i jaki charakter mają dane w tablicy? Co to za aplikacja, algorytm? Być może brniesz w zupełnie złym kierunku, dlatego warto, byś lepiej opisał swój problem.

    0
  • #4 18 Sie 2012 14:33
    Adam Ś.
    Poziom 12  

    Po prostu sprawdzić czy obie tablice są takie same, inaczej czy ciąg elementów (od pierwszego do ostatniego) z pierwszej tablicy jest taki sam jak ten w drugiej. Pytam o szybki sposób bo jeżeli chodzi o porównanie kliku tablic to mógłbym to zrobić w pętli, ale ja mam ~2000 tablic 25-cio elementowych i muszę z pośród tych tablic znaleźć tą która będzie identyczna jak tablica "wzorcowa" (w ogóle mowa tu o tablicach typu byte).

    0
  • #5 18 Sie 2012 14:44
    McMonster
    Poziom 32  

    Jaka jest żywotność tych tablic, jak często są tworzone, zmieniane? Jeśli relatywnie rzadko w stosunku do porównywania, to możesz zastosować funkcję skrótu przy tworzeniu i każdej modyfikacji, przechowywać wartość dla każdej tablicy i porównywać tylko jednobajtowe skróty. Tyle można poradzić przy podanych informacjach.

    Szybkie zapytanie do popularnej wyszukiwarki zwróciło jeszcze kilka alternatywnych metod dla C#.

    0
  • #6 18 Sie 2012 15:12
    marcinj12
    Poziom 40  

    No właśnie, co rozumiesz przez "szybki" sposób?
    Nie musisz porównywać wszystkich elementów w tablicy, jeżeli już pierwszy się nie zgadza, możesz pominąć sprawdzanie reszty... Nie wiem na ile losowe masz te dane w tablicy, ale taki kod - tworzący 3.000 losowych tablic, w tym 3 odpowiadające wzorcowi, z zastosowaniem pętli na moim komputerze (co prawda 2x2,3 GHz, więc raczej szybka maszyna...) wykonuje się w niemierzalnym czasie 0 ms, a dokładniej ok. 70µs.
    W najgorszym przypadku (3.000 elementów takich samych jak wzorzec), porównanie zajmuje ok. 15ms.
    Naprawdę potrzebujesz to bardziej optymalizować??

    Kod: csharp
    Zaloguj się, aby zobaczyć kod

    0
  • #7 18 Sie 2012 15:43
    gaskoin
    Poziom 38  

    Użyj takiej klasy, nie da się tego inaczej zrobić. Można przyspieszyć to jakieś kilka procent używając wskaźników w C#, ale wysiłek jest nieopłacalny.

    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    Przykład użycia:

    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    Porównanie 30000 takich samych tablic (co trwa najdłużej) ze wzorcem o długości 250 znaków trwa u mnie 63 milisekundy.

    0