Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 18 su 18
  1. #11
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Diciamo che hai anche un limite strutturale: i numeri interi (in informatica, quindi anche in Java) rappresentabili sono finiti (Java in particolare ne può rappresentare "solo" 4294967296), quindi non potrai mai codificare univocamente un numero illimitato di stringhe in un numero limitato di interi.


    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

  2. #12
    Utente di HTML.it L'avatar di Ed_Bunker
    Registrato dal
    Jul 2003
    Messaggi
    1,119
    Originariamente inviato da LeleFT
    Diciamo che hai anche un limite strutturale: i numeri interi (in informatica, quindi anche in Java) rappresentabili sono finiti (Java in particolare ne può rappresentare "solo" 4294967296), quindi non potrai mai codificare univocamente un numero illimitato di stringhe in un numero limitato di interi.


    Ciao.
    Si, certo... ma... considerando che ciascun intero fara' riferimento ad un utente (Individuato univocamente dal nome) attivo all'interno dell'applicazione nel generico istante... credo che 4 miliardi di numeri siano piu' che sufficienti...
    La cosa interessante sarebbe utilizzarli al meglio ovvero fare in modo che ogni utente ne becchi "sempre" uno diverso dagli altri.

    Come mi hanno suggerito, per il momento, sto utilizzando la funzione hashCode() messa a disposizione da Java. Se mi accorgo che l'intero generato era gia' stato generato precedentemente (Cosa piuttosto rara...) allora aggiungo uno spazio in fondo alla stringa e passo a calcolarne nuovamente l'hashing finche' non becco un intero ancora non generato.
    Un po' macchinoso ma per il momento puo' andare.
    Se vi viene in mente qualcosa... non esitate a suggerire...

  3. #13
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da Ed_Bunker
    Si, certo... ma... considerando che ciascun intero fara' riferimento ad un utente (Individuato univocamente dal nome) attivo all'interno dell'applicazione nel generico istante... credo che 4 miliardi di numeri siano piu' che sufficienti...
    Indubbiamente
    Come mi hanno suggerito, per il momento, sto utilizzando la funzione hashCode() messa a disposizione da Java. Se mi accorgo che l'intero generato era gia' stato generato precedentemente (Cosa piuttosto rara...) allora aggiungo uno spazio in fondo alla stringa e passo a calcolarne nuovamente l'hashing finche' non becco un intero ancora non generato.
    Un po' macchinoso ma per il momento puo' andare.
    Se vi viene in mente qualcosa... non esitate a suggerire...
    Se l'assegnazione deve avvenire una volta sola allora non ti converrebbe semplicemente aggiungere 1 (o 10 o 2^x) all'intero generato dall'hash, se trovi una collisione?


    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

  4. #14
    Utente di HTML.it L'avatar di Ed_Bunker
    Registrato dal
    Jul 2003
    Messaggi
    1,119
    Originariamente inviato da LeleFT
    Indubbiamente

    Se l'assegnazione deve avvenire una volta sola allora non ti converrebbe semplicemente aggiungere 1 (o 10 o 2^x) all'intero generato dall'hash, se trovi una collisione?


    Ciao.
    Perche' no. Sarebbe un modo per evitare di richiamare nuovamente il meetodo hashCode()...

  5. #15
    Utente di HTML.it L'avatar di Ed_Bunker
    Registrato dal
    Jul 2003
    Messaggi
    1,119
    Ripensandoci bene sommando smepre la stessa quantita' (In caso di "collisione" potrei avere un paio di inconvenienti).
    Supponendo (Teoricamente e con probabilita' minima...) che n stringhe (Differenti) generino lo stesso codice hash, se in tutti i casi sommo sempre 1 avremo che almeno una di esse dovra' fare n somme, almeno ne dovra' fare n-1 e cosi' via...
    Inoltre il fatto che vada a fare delle somme senza conoscere il valore a cui vado ad aggiungere uno o piu' "uni" potrebbe causare overflow...
    Stessa problema (Teorico) se al codice hash generato aggiungessi (In caso di collisione) un numero ottenuto chiamando Math.random()*MAX.
    Per ora credo che la "soluzione" dell'aggiungere un " " rimanga quella piu' fattibile...

  6. #16
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da Ed_Bunker
    Ripensandoci bene sommando smepre la stessa quantita' (In caso di "collisione" potrei avere un paio di inconvenienti).
    Supponendo (Teoricamente e con probabilita' minima...) che n stringhe (Differenti) generino lo stesso codice hash, se in tutti i casi sommo sempre 1 avremo che almeno una di esse dovra' fare n somme, almeno ne dovra' fare n-1 e cosi' via...
    Inoltre il fatto che vada a fare delle somme senza conoscere il valore a cui vado ad aggiungere uno o piu' "uni" potrebbe causare overflow...
    Stessa problema (Teorico) se al codice hash generato aggiungessi (In caso di collisione) un numero ottenuto chiamando Math.random()*MAX.
    Per ora credo che la "soluzione" dell'aggiungere un " " rimanga quella piu' fattibile...
    Verissimo... infatti, tra le mie proposte, c'è anche la possibilità di sommare 2^x. Nulla ti impedisce di determinare in modo casuale quell'X attraverso Math.random().


    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

  7. #17
    Utente di HTML.it L'avatar di Ed_Bunker
    Registrato dal
    Jul 2003
    Messaggi
    1,119
    Originariamente inviato da LeleFT
    Verissimo... infatti, tra le mie proposte, c'è anche la possibilità di sommare 2^x. Nulla ti impedisce di determinare in modo casuale quell'X attraverso Math.random().


    Ciao.
    Ma anche sommando una potenza "casuale" del 2 rischierei comunque overflow. No ?


  8. #18
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da Ed_Bunker
    Ma anche sommando una potenza "casuale" del 2 rischierei comunque overflow. No ?

    Certo, ma puoi gestirti questa eccezione in molti modi.


    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

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.