usprawnienie działania kodu

Odpowiedz Nowy wątek
2011-07-23 19:38
0

witam...
mam oto taki kod:

 
  String[] out = new String[20];
        int[] dataSet = new int[10];
        for (int i = 0; i < dataSet.length; i++) {
            dataSet[i] = i * 5;
        }
        System.out.println(Arrays.toString(dataSet));
 
        for (int j = 0; j < out.length; j++) {
            int i = 0;
            for (i = 0; i < dataSet.length; i++) {
                if (j >= dataSet[i] && j <= dataSet[i + 1]) {
                    out[j] = "pomiędzy: " + String.valueOf(dataSet[i]) + " a " + String.valueOf(dataSet[i + 1]);
                    break;
                }
            }
        }
        System.out.println(Arrays.toString(out));

i nie mam pomysłu jak przyśpieszyć jego działanie:/
Coś takiego mam w mojej aplikacji, w której ten kod jest wielokrotnie powtarzany. Gdy uruchamiam profile'a wyrzuca mi że nad tą metodą procesor spędza spory okres czasu...Może da się to jakoś poprawić...

edytowany 2x, ostatnio: remigio, 2011-07-23 19:38

Pozostało 580 znaków

2011-07-23 19:45
0

A dataSet jest zawsze posortowany rosnąco ew można go posortować?

Jeśli tak to najprościej jest nie resetować zmiennej i do zera za każdym razem:

import java.util.Arrays;
 
public class Main {
 
    public static void main(String[] args) {
        String[] out = new String[20];
        int[] dataSet = new int[10];
        for (int i = 0; i < dataSet.length; i++) {
            dataSet[i] = i * 5;
        }
        System.out.println(Arrays.toString(dataSet));
 
        int i = 0;
        for (int j = 0; j < out.length; j++) {
            for (; i < dataSet.length; i++) {
                if (j >= dataSet[i] && j <= dataSet[i + 1]) {
                    out[j] = "pomiędzy: " + String.valueOf(dataSet[i]) + " a " + String.valueOf(dataSet[i + 1]);
                    break;
                }
            }
        }
        System.out.println(Arrays.toString(out));
    }
}

"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
edytowany 2x, ostatnio: Wibowit, 2011-07-23 19:52
Hej come on! przecież zmieniłeś tylko kolejność instrukcji "int i = 0;" Więc co się zmieniło ? - szypxx 2011-07-23 23:51
Zastanów się. Zbiłem złożoność z kwadratowej do liniowej. - Wibowit 2011-07-24 00:58
nie no tak - oczywiste :P Jeszcze sporo nauki przede mną - szypxx 2011-07-24 14:03

Pozostało 580 znaków

2011-07-23 19:49
0

Z data set jest tak że początkowa wartość będzie miała 0 , końcowa 20 a kolejne liczby w tablicy nie mogą być mniejsze niż poprzednia wartość...
np. [0,3,4,7,itd...]

No to w takim razie moje ulepszenie powinno przejść. - Wibowit 2011-07-23 19:52

Pozostało 580 znaków

2011-07-23 19:57
0

Dzięki wielkie za szybką i skuteczną odpowiedż :)

Z 4223 ms zeszło na 351...

Gratki za to :)

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