Szarpana tablica dwuwymiarowa - pętla

Odpowiedz Nowy wątek
2018-11-13 13:25
0

Cześć! Mam następującą dwuwymiarową szarpaną tablicę:


int tab[][] =
                {{1, 1, 3, 4, 5, 1},
                 {8, 7, 3},
                 {5, 5,}};

        int k = 0;

        for (int i = 0; i < tab.length; i++) {
            for (int j = 0; j < tab.length; j++) {
                for (int p = j+1; p < tab.length; p++) {
                    if (tab[i][j] == tab[i][p] && j != p)
                        k++;
                }
            }

        }

Chcę zliczyć powtarzające się w niej wartości. Jak ustawić iterację w pętli, aby nie pojawiał się wyjątek java.lang.ArrayIndexOutOfBounds? Czy w ogóle jest to możliwe dla tablic szarpanych?

Pozostało 580 znaków

2018-11-13 13:28
eL
     for (int i = 0; i < tab.length; i++) {
            for (int j = 0; j < tab.length; j++) {

Druga pętla nie powinna iterować do długości tab tylko tab[i] czyli:

     for (int i = 0; i < tab.length; i++) {
            for (int j = 0; j < tab[i].length; j++) {

powinno rozwiązać problem.

edytowany 1x, ostatnio: eL, 2018-11-13 13:32
Dzięki za szybką odpowiedź! - s4uden4 2018-11-13 13:34

Pozostało 580 znaków

2018-11-13 13:41
1

Moja rada: użyj ~mapy <int, int> w której kluczem będzie wartość z tablicy a w wartości tej mapy będzie jej częstość.
Dzięki temu będziesz mógł zmniejszyć złożoność oraz kod będzie czystszy.

edytowany 2x, ostatnio: lubie_programowac, 2018-11-13 13:44

Pozostało 580 znaków

2018-11-13 14:09
2
lubie_programowac napisał(a):

Moja rada: użyj ~mapy <int, int> w której kluczem będzie wartość z tablicy a w wartości tej mapy będzie jej częstość.
Dzięki temu będziesz mógł zmniejszyć złożoność oraz kod będzie czystszy.

Ale większe użycie pamięci: http://openjdk.java.net/jeps/218

premature optimization... - Spine 2018-11-13 15:07
@Spine: to wygląda jak nauka, może jakieś laby, pewnie coś wtedy też z algorytmami, warto wiedzieć że więcej pamięci potrzeba :) - Kermii 2018-11-13 15:17
Też nie, bo teraz wszyscy biorą przynajmniej 16GB ramu, a procki, studenckie algorytmy łykają bez problemu :P Na labki starczy. - Spine 2018-11-13 15:31
@Spine, ale 16 GB wg obliczeń amerykańskich naukowców nie pomieści nawet tablicy 50000 x 50000 x 64 bity. - vpiotr 2018-11-13 15:53
Jak to powiedział kiedyś mój znajomy ze studiów, parafrazując: Należy przenieść złożoność obliczeniową na złożoność pamięciową. Dlaczego? Odpowiedź jest prosta: pamięć zawsze można zwolnić a straconego czasu nikt już nie odzyska... - lubie_programowac 2018-11-13 15:58

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0