Visualizzazione dei risultati da 1 a 3 su 3

Discussione: Strani tempi del java

  1. #1

    Strani tempi del java

    Buonasera a tutti. Sto realizzando un algoritmo che mi restituisca il tempo di esecuzione di alcuni algoritmi di ordinamento. In C sembra andare bene, sto usando il flag di ottimizzazione -O3 e ottengo ad esempio questi valori:

    ISORT (Insertion sort)

    per array di dimensione 5000 tempo = 16.09ms
    un un array quasi ordinato tempo = 0.01ms

    SSORT (Selection sort)

    array di 5000 elementi tempo = 43.05ms
    array quasi ordinato tempo = 35.01

    Mentra in java ottengo valori più o meno simili per l'isort mentre per il selection sort ottengo tempi stranissimi intorno ai 6000ms. Questo tempo in più dipende dal fatto che java carica on demand le classi in cui sono presenti i metodi da richiamare in parole povere, e quindi su consiglio di altri ho messo all'inizio un ciclo che richiama tutti gli algoritmi almeno 2 volte per ordinare un array, in modo da far iniziare poi il calcolo del tempo in maniera più pulita possibile.

    Ma niente solo per il selection sort mi da tempi strani:
    questo è il codice in java :
    codice:
     
    public static void ssort(int[] a) {
     int i, j, n = a.length;
    
     for (i = 0; i < n-1; i++) {
      int iMin = i;
      for (j = i+1; j < n; j++) 
       if (a[j] < a[iMin]) iMin = j;
    
      scambia(a, i, iMin);
    }
    Dove sbaglio ?

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755
    guarda il metodo mi sembra implementato correttamente , io l'ho testato con un array di 5000 elementi casuali e ottengo come tempo 49 ms (ovviamente esso varia anche in base alla velocità del processore ma ora tralasciamo questo dettaglio) dunque mi pare strano il tuo risultato..
    Sei sicuro di non sbagliare qualche conversione?Nel senso magari ottieni il tempo in nanosecondi e sbagli il fattore di proporzionalità nel passare a ms (6000 ms sono 6 secondi , un po' tanti ) boh

  3. #3
    Si ok, usavo un test per creare meno garbage, diciamo che era un errore banale da farmi meritare una pedata nei birzilli. In pratica creando un solo array all'inizio molto grande, richiamavo ssort non sulla sola porzione "riempita" ma su tutto l'array . Grazie mille lo stesso

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.