Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    25

    matrice "pesante"

    ciao a tutti!!!
    vi spiego immediatamente con cosa ho a che fare!! ho una matrice strutturata nel seguente modo:

    -righe di n utenti (circa 500);
    -colonne di 7 variabili (id_utente, nome, età, stipendio ecc.ecc.);

    dovrei isolare gli id_utente di quei clienti aventi caratteristiche simili, ovvero coetanei, stessa fascia di reddito.... in modo tale che ognuno degli utenti sia correlato ad almeno un altro utente del database. Esempio:

    id nome età stipendio tempo_detrminato tempo_indeterminato
    23 rossi 34 23000 1 0
    45 bianchi 25 12000 0 1
    56 verdi 56 27000 1 0

    restituire i lavoratori con contratto a tempo_determinato con stipendio maggiore di 22000 euro:

    id
    23
    56

    il costo computazionale è elevatissimo dal momento che si ha a che fare con circa 500 righe(ognuna delle quali deve essere confrontata con tutte le altre iterativamente)........a tal proposito chiedo: qualcuno ha qualche idea?? come posso risolvere il problema? attendo risposte

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328

    Moderazione

    Manca un dettaglio essenziale, sia perchè richiesto dal regolamento, sia perchè altrimenti nessuno ti può dare una mano: il linguaggio di programmazione!

    Per quanto riguarda la complessità, 500 righe non sono nulla... un'azienda di piccole dimensioni, solitamente, ha a che fare con record di dimensioni ben maggiori (come numero di campi e tipologia) e con quantità di record dell'ordine delle centinaia di migliaia... per dirla in tutta franchezza: per 500 righe non scomoderei nemmeno Access...


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    il costo computazionale è elevatissimo dal momento che si ha a che fare con circa 500 righe(ognuna delle quali deve essere confrontata con tutte le altre iterativamente)
    Forse ho capito male, a parte il fatto che 500 righe rappresentano un numero al limite del trascurabile (altro che costo computazionale elevatissimo), ma non vedo perché tu debba confrontare una riga con tutte le altre.

    Se hai esposto bene il problema (=restituire i lavoratori con contratto a tempo_determinato con stipendio maggiore di 22000 euro) tutto si riconduce ad un semplice loop, in pseudo-codice:

    codice:
    for i := 1 to 500 do
     if (tabella[i].stipendio > 22000) and (tabella[i].tempo_determinato = TRUE) then
       stampa(tabella[i].ID)
    Codice che verrà eseguito in una frazione di un centesimo di secondo.
    "Se riesci a passare un pomeriggio assolutamente inutile in modo assolutamente inutile, hai imparato a vivere."

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    25
    avete perfettamente ragione!!i'm sorry!! allora riformulo il tutto cercando di essere il più chiaro possibile!! ho un db sql di un'azienda che vuole aumentare il valore prodotto dal singolo utente(cioè il guadagno che ne trae) confrontandolo con altri utenti aventi caratteristiche simili (sia aziendali che geografiche) ma valore differente!! l'utente con valore più alto diventa il "model" di quello a valore più basso ("target")!! in tal caso il confronto va fatto per:
    1)le variabili aziendali (modalità pagamento, numero accessi al carrello, numero prodotti acquistati ecc.ecc.)
    2)il valore d'acquisto.

    così, se l'utente i-esimo ha caratteristiche simili a quelle di un utente j-esimo e con una differenza di valore che non supera una determinata soglia, vengono restituiti gli id di entrambi......uno come model e l'altro come target!!
    è chiaro che in questo modo il confronto deve essere fatto in modo iterativo, come ho spiegato prima, dal momento che un target può a sua volta diventare il model di un altro utente!!!

    so che la cosa appare complicata (sopratutto da spiegare) ma confido in voi!! spero di essere stato più chiaro!!ah.....il tutto va fatto in java!

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Originariamente inviato da nacma
    il tutto va fatto in java!
    E Java ha un forum dedicato...

    Correggo il titolo e sposto.

    PS: Ti invito anche a postare un po' di codice, così da rendere più facile il lavoro di chi potrà aiutarti.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  6. #6
    in effetti la cosa puo' diventare più pesantina:

    a mio parere ci sono due modi di implementare la cosa:
    (supponendo che la matrice abbia n righe e m colonne)

    a) per ogni riga, esegui un loop su tutte le righe a verificare se la differenza tra i dati richiesti è minore di una certa quantità (= i dati sono "simili"):
    costo computazionale: n x (n-1) elaborazioni (249500 nel tuo caso)

    b) ordina la matrice in base al dato desiderato, poi ricerca la riga model e restituisci tutti le righe "vicine"
    costo computazionale: dipende dall'algoritmo di sort

    c) crea m copie della matrice e ordinale ognuna in base a una colonna diversa, poi scegli quella desiderata in base al dato richiesto dall'utente e agisci come in b)
    costo computazionale: m volte il costo di b)
    vantaggi: utile se vengono effettuate molte richieste, dato che le richieste successive alla prima agiscono istantaneamente
    è quindi possibile eseguire più volte l'algoritmo basandosi su più dati e intersecare rapidamente i risultati per ottenere clienti che condividano più caratteristiche
    Armageddon - Chief Developer

    Stiamo cercando collaboratori!

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.