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.

C# - Redukcja wielkości tablicy dwuwymiarowej

michal2409 16 Kwi 2014 12:22 879 7
  • #1 16 Kwi 2014 12:22
    michal2409
    Poziom 12  

    Witam!

    Poszukuje sposobu na zredukowanie wielkości tablicy dwuwymiarowej, w spósób który pokażę na przykładzie.
    Mamy tablicę przykładowo wypełnioną:

    Code:
     0  1
    
     1  2
     2  3
     4  5
     8  9
     9  10
    10  11
    11  12
    12  13
    13  14


    A potrzebuje ją zredukować do postaci:
    Code:
    0 3
    
    4 5
    8 14


    Chodzi o to, że pierwszy element tablicy to jest początek jakiegoś zakresu, a drugi to koniec. Potrzebuje ją zmniejszyć jak na przykładzie gdyż tablica będzie tworzona na podstawie dużych plików, a później przesyłana przez sieć, więc chciałbym żeby ona była jak najmniejsza już po stronie "serwera".

    Od razu mówię, że nie musi to być na tablicach, ale mi póki co tylko coś takiego przyszło do głowy, żeby mieć dwa wymiary.

    0 7
  • #3 16 Kwi 2014 13:21
    the_fifth_horseman
    Poziom 32  

    Posortuj tablicę wg początków i końców zakresów.

    Bierzesz pierwszy zakres, wstawiasz do danych wynikowych.
    Potem dopóki masz dane na wejściu, jeżeli początek zakresu z wejścia pokrywa się z ostatnim zakresem na wyniku, koniec zakresu na wyniku ustawiasz na równy końcowi zakresu na wejściu. Inaczej zakres wejściowy dodajesz do zakresów wynikowych.

    0
  • #4 16 Kwi 2014 14:12
    michal2409
    Poziom 12  

    the_fifth_horseman napisał:
    Posortuj tablicę wg początków i końców zakresów.

    Bierzesz pierwszy zakres, wstawiasz do danych wynikowych.
    Potem dopóki masz dane na wejściu, jeżeli początek zakresu z wejścia pokrywa się z ostatnim zakresem na wyniku, koniec zakresu na wyniku ustawiasz na równy końcowi zakresu na wejściu. Inaczej zakres wejściowy dodajesz do zakresów wynikowych.


    Tzn. jak posortować? Ona jest posortowana już. Mógłbyś to na jakimś przykładzie pokazać?

    0
  • #5 16 Kwi 2014 17:00
    the_fifth_horseman
    Poziom 32  

    Nie napisałeś czy dane na wejściu na pewno są posortowane, więc tylko zaznaczyłem że powinny być. :)
    Jak już są to nie ma problemu.

    0
  • #6 16 Kwi 2014 17:44
    michal2409
    Poziom 12  

    Jak dla mnie jest :P
    Próbowałem to jakoś rekurencyjnie przypisywać, ale maksymalnie co mi się udało zrobić to taką postać:

    Code:
     0  3
    
     1  3
     2  3
     4  5
     8  14
     9  14
    10  14
    11  14
    12  14
    13  14


    Nie bd pokazywał kodu bo wstyd i sam się w nim mieszam, więc słucham podpowiedzi :P

    Edit:

    Przepisałem to co mi powiedziałeś w taki sposób:
    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    i na wyjściu mam coś takiego
    tablica wejsciowa:
    Code:
    0 1
    
    1 2
    4 5
    11 12
    15 16
    23 24
    26 27
    30 31
    35 36
    36 37
    37 38
    38 39
    39 40


    tablica wyjściowa:
    Code:
    0 2
    
    0 0
    4 5
    11 12
    15 16
    23 24
    26 27
    30 31
    35 37
    0 0
    37 39
    0 0
    39 40

    0
  • Pomocny post
    #7 19 Kwi 2014 14:10
    marcinj12
    Poziom 40  

    Można w ten sposób:

    Kod: csharp
    Zaloguj się, aby zobaczyć kod

    0
  • #8 22 Kwi 2014 21:03
    michal2409
    Poziom 12  

    O to chodziło ;) Dzięki

    0