Torna indietro   Hardware Upgrade Forum > Software > Programmazione

PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è
PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è
La PNY GeForce RTX 5080 Slim OC si distingue nel panorama delle GPU di fascia alta per il design compatto a due slot, ispirato alla NVIDIA GeForce RTX 5080 Founders Edition. In questo test analizziamo comportamento termico e prestazioni in gioco, valutando se il formato ridotto comprometta o meno l'esperienza complessiva rispetto alle soluzioni più ingombranti presenti sul mercato.
Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei
Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei
HUAWEI WiFi Mesh X3 Pro Suite è probabilmente il router mesh più fotogenico che si possa acquistare oggi in Italia, ma dietro il guscio in acrilico trasparente e le luci LED dinamiche c'è una macchina tecnica costruita attorno allo standard Wi-Fi 7, con velocità teoriche Dual-Band fino a 3,6 Gbps e una copertura fino a 120 m² una volta abbinato il router principale all'extender incluso nel kit
Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: Intel cerca il riscatto ma ci riesce in parte
Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: Intel cerca il riscatto ma ci riesce in parte
Abbiamo provato le nuove CPU Intel Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: più core e ottimizzazioni al funzionamento interno migliorano le prestazioni, anche in virtù di prezzi annunciati interessanti. A questo si aggiungono nuove ottimizzazioni software. Purtroppo, a fronte di prestazioni di calcolo elevate, il quadro rimane incerto nel gaming, dove l'andamento rimane altalenante. Infine, rimane il problema della piattaforma a fine vita.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 08-05-2010, 16:13   #1
cdere
Senior Member
 
L'Avatar di cdere
 
Iscritto dal: Feb 2001
Città: Foggia
Messaggi: 2519
[JAVA] Ordinare array secondo "qualcosa" e Arrays.sort

Salve a tutti
Ho questo problemino... ho questo algoritmo di quicksort (che funziona e anche bene) perchè ordini un array di "tuple" (sostanzialmente una matrice) in base al nome della "colonna" (cioè in base ai valori che sono in 'attributo' che è la colonna di questa matrice non in base a tutti i valori)

vi posto la "matrice" (in realtà un'array di classe Tupla) e l'algoritmo:

Codice:
data = new Tuple[14];

        /* D1  */ data[0] = new Tuple( "Sunny","Hot","High","Weak","No" );
in corrispondenza di ogni valore di tupla chiaramente c'è un attributo, io con tale algoritmo ordino l'array in base all'attributo che voglio

Codice:
void sort(Attribute attribute, int beginExampleIndex, int endExampleIndex){
        quicksort(attribute, beginExampleIndex, endExampleIndex);
    }


    // scambio esempio i con esempio j
    private void swap(int i,int j){
        Object temp;
        for (int k=0; k<getNumberOfExplanatoryAttributes()+1; k++){
                temp = data[i].getValue(k);
                data[i].setValue(k, data[j].getValue(k) );
                data[j].setValue(k, temp);
        }
    }


    /*
     * Partiziona il vettore rispetto all'elemento x e restiutisce il punto di separazione
     */
    private int partition(DiscreteAttribute attribute, int inf, int sup){
        int i, j;
        i=inf;
        j=sup;
        int med = (inf+sup)/2;
        String x = (String)getExplanatoryValue(med, attribute.getIndex());
        swap(inf, med);
        while (true){
            while(i<=sup && ((String)getExplanatoryValue(i, attribute.getIndex())).compareTo(x)<=0)
                    i++;
            while(((String)getExplanatoryValue(j, attribute.getIndex())).compareTo(x)>0)
                    j--;
            if(i<j)
                swap(i,j);
            else break;
        }
        swap(inf,j);
        return j;
    }


    /*
     * Algoritmo quicksort per l'ordinamento di un array di interi A
     * usando come relazione d'ordine totale "<="
     * @param A
     */
    private void quicksort(Attribute attribute, int inf, int sup){
        if(sup >= inf){
            int pos;
            pos = partition((DiscreteAttribute)attribute, inf, sup);
            if ((pos-inf) < (sup-pos+1)) {
                quicksort(attribute, inf, pos-1);
                quicksort(attribute, pos+1, sup);
            }
            else
            {
                quicksort(attribute, pos+1, sup);
                quicksort(attribute, inf, pos-1);
            }
        }
    }
ok.. ora però mi sembra un po inutile reimplementare un algoritmo di sort.. quindi avevo pensato di utilizzare Arrays.sort (e implementare una delle 2 interfacce comparator o comparable)... solo che solo che... come faccio a "passargli" anche il nome dell'attributo per il quale deve ordinare i valori?


Grazie mille ragazzi!
siete grandi
__________________
mi sembra di essere tornato adolescente ai bei tempi.. che figata essere di nuovo su questo forum

Ultima modifica di cdere : 08-05-2010 alle 16:17.
cdere è offline   Rispondi citando il messaggio o parte di esso
Old 08-05-2010, 16:43   #2
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Puoi usare il sort di Arrays che accetta come secondo argomento un Comparator<T> dove T è il tipo di componenti dell'array (se sono stringhe sarà string, se sono tuple sarà tuple). Il comparator ha un metodo ad hoc (compare) attraverso il quale stabilisci la tua relazione d'ordine.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 08-05-2010, 17:36   #3
cdere
Senior Member
 
L'Avatar di cdere
 
Iscritto dal: Feb 2001
Città: Foggia
Messaggi: 2519
tu parli giustamente di questo (perchè a me servono anche gli estremi degli indici):
Codice:
public static <T> void sort(T[] a, int fromIndex, int toIndex, Comparator<? super T> c)
ma non so come chiamarlo:

Codice:
        Comparator<Tuple[]> c = null;
        Arrays.sort(data, beginExampleIndex, endExampleIndex, c);
data è il mio array di Tuple, invece per comparator non so proprio cosa mettere! bho non capisco proprio il senso.

EDIT: ma posso passare una stringa a Compare? (cioè il nome dell'attributo per quale voglio ordinare) e se si, come ?
__________________
mi sembra di essere tornato adolescente ai bei tempi.. che figata essere di nuovo su questo forum

Ultima modifica di cdere : 08-05-2010 alle 17:43.
cdere è offline   Rispondi citando il messaggio o parte di esso
Old 08-05-2010, 17:49   #4
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Comparator è un'interfaccia, devi creare una classe che la implementi. Puoi usare la forma anonima o no. Di solito se una certa definizione appare una sola volta nel programma, in ragione di certe sue particolarità, si usa una classe anonima. Diciamo che la tua classe Tuple è questa:

Codice:
public class Tuple {
    private final String[] data;

    public Tuple(String[] data) {
        this.data = data;
    }
    
    public String[] getData() {
        return data;
    }
}
Crei la tua classettina che concretizza un Comparator<Tuple>:

Codice:
import java.util.Comparator;

public class TupleComparable implements Comparator<Tuple> {

    public int compare(Tuple o1, Tuple o2) {
        
    }

}
Secondo il contratto di Comparator, il metodo compare deve restituire un numero minore di zero se o1 è minore di o2, zero se o1 è uguale a o2, un numero maggiore di 1 se o1 è maggiore di o2.

Mi pare vagamente di capire che l'ordine dipenda dall'indice del componente dell'array di tuple. Puoi dire una cosa del genere:

Codice:
import java.util.Comparator;

public class TupleComparable implements Comparator<Tuple> {
    
    private final int componentIndex;
    
    public TupleComparable(int componentIndex) {
        this.componentIndex = componentIndex;
    }

    public int compare(Tuple o1, Tuple o2) {
        return o1.getData()[componentIndex].compareTo(o2.getData()[componentIndex]);
    }

}
Qui che succede? Succede che un certo TupleComparable confronta due Tuple usando la stringa in una certa posizione. A questo punto dato un array di Tuple:

Tuple[] elementi = qualcosa

ordini l'array dicendo:

Arrays.sort(elementi, new TupleComparable(0));

o new TupleComparable(1), come vuoi.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 08-05-2010, 18:49   #5
cdere
Senior Member
 
L'Avatar di cdere
 
Iscritto dal: Feb 2001
Città: Foggia
Messaggi: 2519

grazie mille PGI-Bis sei stato davvero disponibilissimo, chiaro ed esauriente.
Non avrei potuto chiedere di più!

Infatti il "robo" funziona!
Codice:
public class TupleComparator implements Comparator<Tuple>{

        private int index;

        public TupleComparator(Attribute attribute) {
            index = attribute.getIndex();
        }


        @Override
        public int compare(Tuple rec1, Tuple rec2) {
            return  ((String)rec1.getValue(index)).compareTo( (String)rec2.getValue(index) );
        }

    }
Però, però... c'è un però... non so perchè, ma ogni ordinamento che effettua, l'ultima tupla non è ordinata, non so perchè, sempre l'ultima non c'entra nulla...

so che praticamente non ho detto niente, ma magari è un problema "comune" in questi casi, idee?

EDIT: c'era un -1 all'endIndex.. che dire risolto, GRAZIE
__________________
mi sembra di essere tornato adolescente ai bei tempi.. che figata essere di nuovo su questo forum
cdere è offline   Rispondi citando il messaggio o parte di esso
Old 08-05-2010, 19:11   #6
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 12966
Si può fare anche così, senza creare un'altra classe:

Codice:
class Tupla implements Comparable<Test>
{

    ...
        attributi di classe
    ...

    ...
        metodi di classe
    ...

    public int compareTo(Test o) {
       // ritorna -1, 0, 1 a seconda dei casi
    }    
}
A questo punto poi:

Codice:
Tupla[] arr = new Tupla[] { ... };

Arrays.sort(arr);
Personalmente lo trovo un po' più elegante (ammesso cmq che si abbia accesso ai sorgenti della classe Tupla) .
WarDuck è offline   Rispondi citando il messaggio o parte di esso
Old 08-05-2010, 19:13   #7
cdere
Senior Member
 
L'Avatar di cdere
 
Iscritto dal: Feb 2001
Città: Foggia
Messaggi: 2519
o non ho capito io, o tu non hai letto la discussione io con TupleComparator ordino data (ricordo array di tuple) secondo l'attributo (tipo l'ORDER BY di SQL) (che passo al costruttore di TupleComparator) tu ordini e basta
__________________
mi sembra di essere tornato adolescente ai bei tempi.. che figata essere di nuovo su questo forum
cdere è offline   Rispondi citando il messaggio o parte di esso
Old 08-05-2010, 19:15   #8
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 12966
Quote:
Originariamente inviato da cdere Guarda i messaggi
o non ho capito io, o tu non hai letto la discussione io con TupleComparator ordino data (ricordo array di tuple) secondo l'attributo (tipo l'ORDER BY di SQL) (che passo al costruttore di TupleComparator) tu ordini e basta
Forse ho letto male io .
WarDuck è offline   Rispondi citando il messaggio o parte di esso
Old 08-05-2010, 19:22   #9
cdere
Senior Member
 
L'Avatar di cdere
 
Iscritto dal: Feb 2001
Città: Foggia
Messaggi: 2519
ok ok figurati
__________________
mi sembra di essere tornato adolescente ai bei tempi.. che figata essere di nuovo su questo forum
cdere è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è PNY RTX 5080 Slim OC, sembra una Founders Editio...
Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei Wi-Fi 7 con il design di una vetta innevata: ecc...
Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: Intel cerca il riscatto ma ci riesce in parte Core Ultra 7 270K Plus e Core Ultra 7 250K Plus:...
PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu PC Specialist Lafité 14 AI AMD: assemblat...
Recensione Nothing Phone 4(a): sempre iconico ma ora più concreto Recensione Nothing Phone 4(a): sempre iconico ma...
PlayStation 5, doccia fredda da Sony: i ...
Super Meat Boy 3D: annunciata la data d'...
XT View Matrix, il mid-tower Phanteks ch...
David Sacks lascia il ruolo di 'Crypto C...
LG All Stars 2026: quando l'installatore...
Addio ad Anna's Archive? Ecco la mossa l...
Addio al Mac Pro, Apple mette fine a un ...
Panasonic a MCE 2026: la rivoluzione sil...
Netflix alza la posta: il piano Premium ...
Nimbus Innovation Awards – Cloud Edition...
Wikipedia vieta i contenuti generati dal...
Niente volante, niente schermi: cos&igra...
Gli 'Avengers' di Windows sono tornati: ...
Alien Deathstorm annunciato da Rebellion...
Amazon Haul punta tutto sui prezzi bassi...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 14:56.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v