Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Wind Tre 'accende' il 5G Standalone in Italia: si apre una nuova era basata sui servizi
Wind Tre 'accende' il 5G Standalone in Italia: si apre una nuova era basata sui servizi
Con la prima rete 5G Standalone attiva in Italia, WINDTRE compie un passo decisivo verso un modello di connettività intelligente che abilita scenari avanzati per imprese e pubbliche amministrazioni, trasformando la rete da infrastruttura a piattaforma per servizi a valore aggiunto
OPPO Find X9 Pro: il camera phone con teleobiettivo da 200MP e batteria da 7500 mAh
OPPO Find X9 Pro: il camera phone con teleobiettivo da 200MP e batteria da 7500 mAh
OPPO Find X9 Pro punta a diventare uno dei riferimenti assoluti nel segmento dei camera phone di fascia alta. Con un teleobiettivo Hasselblad da 200 MP, una batteria al silicio-carbonio da 7500 mAh e un display da 6,78 pollici con cornici ultra ridotte, il nuovo flagship non teme confronti con la concorrenza, e non solo nel comparto fotografico mobile. La dotazione tecnica include il processore MediaTek Dimensity 9500, certificazione IP69 e un sistema di ricarica rapida a 80W
DJI Romo, il robot aspirapolvere tutto trasparente
DJI Romo, il robot aspirapolvere tutto trasparente
Anche DJI entra nel panorama delle aziende che propongono una soluzione per la pulizia di casa, facendo leva sulla propria esperienza legata alla mappatura degli ambienti e all'evitamento di ostacoli maturata nel mondo dei droni. Romo è un robot preciso ed efficace, dal design decisamente originale e unico ma che richiede per questo un costo d'acquisto molto elevato
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 14-02-2008, 10:15   #1
fracarro
Senior Member
 
L'Avatar di fracarro
 
Iscritto dal: Jul 2002
Messaggi: 869
[C] Identificazione univoca insiemi

Salve ragazzi,
ho un problemino da risolvere e mi servirebbe qualche esperto in matematica e programmazione. Allora, io ho il mio insieme di elementi N={1,2,3,......,1000} da cui in base a certe operazioni genero un sottoinsieme di dimensione variabile, es. S1={5,24,134,432,567,700,876}. Ora il mio problema è trovare un sistema per assegnare una chiave univoca a questo insieme di elementi che lo distingua da qualsiasi altro insieme (di dimensione anche differente da S1) generabile da N.

Un modo per ottenere questo risultato è assegnare ad ogni elemento di N un numero primo. Dopodichè dato S1 mi basta moltiplicare i numeri primi associati ai suoi elementi per ottenere una chiave univoca. Il problema però è che moltiplicare tanti numeri primi mi genera delle chiavi spaventose quindi avrei bisogno di qualche altro modo per generare queste chiavi. Qualche idea?
__________________
Notebook: MBP 15 i7 Retina, (Mid 2014)
fracarro è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2008, 11:01   #2
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
se vuoi la certezza matematica avrai chiavi spaventosamente lunghe.
Se invece ti bassta un'ottima coperatura con una probabilita' decisamente bassa di conflitti allora ti puo' bastare una Hash.
Es: Metti tutti i numeri in fila, magari mettendoci anche la dimensione di ciascuno dei sotto-array, e passi tutti il flusso ad un algoritmo come
MD5
Ce ne sono tanti altri, questo e' uno dei piu' usati.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2008, 12:14   #3
fracarro
Senior Member
 
L'Avatar di fracarro
 
Iscritto dal: Jul 2002
Messaggi: 869
Quote:
Originariamente inviato da gugoXX Guarda i messaggi
se vuoi la certezza matematica avrai chiavi spaventosamente lunghe.
Se invece ti bassta un'ottima coperatura con una probabilita' decisamente bassa di conflitti allora ti puo' bastare una Hash.
Es: Metti tutti i numeri in fila, magari mettendoci anche la dimensione di ciascuno dei sotto-array, e passi tutti il flusso ad un algoritmo come
MD5
Ce ne sono tanti altri, questo e' uno dei piu' usati.
Esiste qualche implementazione in C di questo algoritmo? Inoltre il range delle "diverse" chiavi generate dall'algoritmo lo posso decidere io?
__________________
Notebook: MBP 15 i7 Retina, (Mid 2014)
fracarro è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2008, 12:42   #4
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
MD5 e' un algoritmo che restituisce sempre lo stesso spazio di 16byte di firma.
Come detto ce ne sono tanti altri, ma lo spazio della firma mi risulta sia fisso su ciascuno di essi. Cerca quello che ti piace di piu' e provalo.
Altri sono quelli della famiglia SHA
Ci sono anche quelli della famiglia CRC.

Per quanto riguarda l'implementazione invece ovviamente penso esistano implementazioni e librerie di tutti questi algoritmi in C, ma in C non saprei dove dirti di guardare. Piu' probabile C++, anche se su alcune librerie embedded si trova veramente di tutto.
In C# per esempio MD5 e' gia' in libreria, gia' dentro il framework, quindi e' una sola semplice chiamata. Se ti stai rivolgendo al mondo embedded prova anche a valutare il MicroFramwork, che si puo' montare su molti microprocessori del campo (ma non sono assolutamente esperto).

Per quanto riguarda il CRC vesione 32 pensa che negli x86, nella estensione delle istruzioni macchina SSE4.2 (introdotta sui Pentium4 Nehalem) esiste gia' addirittura hardware, sotto il codice opcode appunto CRC32.
Ti basterebbe quindi aprire una
Codice:
__asm{
  //qualcosina
  CRC32
  //qualcos'altro
}
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.

Ultima modifica di gugoXX : 14-02-2008 alle 12:46. Motivo: specifica sui P4 Nehalem
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2008, 12:50   #5
fracarro
Senior Member
 
L'Avatar di fracarro
 
Iscritto dal: Jul 2002
Messaggi: 869
Quote:
Originariamente inviato da gugoXX Guarda i messaggi
MD5 e' un algoritmo che restituisce sempre lo stesso spazio di 16byte di firma.
Come detto ce ne sono tanti altri, ma lo spazio della firma mi risulta sia fisso su ciascuno di essi. Cerca quello che ti piace di piu' e provalo.
Altri sono quelli della famiglia SHA
Ci sono anche quelli della famiglia CRC.

Per quanto riguarda l'implementazione invece ovviamente penso esistano implementazioni e librerie di tutti questi algoritmi in C, ma in C non saprei dove dirti di guardare. Piu' probabile C++, anche se su alcune librerie embedded si trova veramente di tutto.
In C# per esempio MD5 e' gia' in libreria, gia' dentro il framework, quindi e' una sola semplice chiamata. Se ti stai rivolgendo al mondo embedded prova anche a valutare il MicroFramwork, che si puo' montare su molti microprocessori del campo (ma non sono assolutamente esperto).

Per quanto riguarda il CRC vesione 32 pensa che negli x86, nella estensione delle istruzioni macchina SSE4.2 (introdotta sui Pentium4 Nehalem) esiste gia' addirittura hardware, sotto il codice opcode appunto CRC32.
Ti basterebbe quindi aprire una
Codice:
__asm{
  //qualcosina
  CRC32
  //qualcos'altro
}

Purtroppo a me serve in C e da utilizzare sia sotto windows che sotto linux. Ad ogni modo credo di aver trovato la soluzione qui: http://www.hwupgrade.it/forum/showth...&highlight=md5

Non mi resta che provare. Ad ogni modo grazie per l'aiuto.

P.S. Dati due insiemi per verificare se sono uguali mi basta generare le stringhe ad essi associate (concatenando semplicemente i numeri), passarle all'MD5 e poi usare la strcmp sulle due stringhe ritornate da questo algoritmo.
__________________
Notebook: MBP 15 i7 Retina, (Mid 2014)
fracarro è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2008, 12:58   #6
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Quote:
Originariamente inviato da fracarro Guarda i messaggi
P.S. Dati due insiemi per verificare se sono uguali mi basta generare le stringhe ad essi associate (concatenando semplicemente i numeri), passarle all'MD5 e poi usare la strcmp sulle due stringhe ritornate da questo algoritmo.
Esatto. Nel caso in cui le 2 stringhe del MD5 siano diverse sei sicuro che i due insiemi erano diversi gia' in origine.
Se invece le 2 stringhe sono uguali, per avere la certezza dovrai controllarle direttamente. Cosi' funzionano le Hastable.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2008, 13:21   #7
fracarro
Senior Member
 
L'Avatar di fracarro
 
Iscritto dal: Jul 2002
Messaggi: 869
Quote:
Originariamente inviato da gugoXX Guarda i messaggi
Esatto. Nel caso in cui le 2 stringhe del MD5 siano diverse sei sicuro che i due insiemi erano diversi gia' in origine.
Se invece le 2 stringhe sono uguali, per avere la certezza dovrai controllarle direttamente. Cosi' funzionano le Hastable.
Tutto chiaro. Ora stabilito come assegnare ad ogni insieme una chiave diverse dovrei risolvere il secondo problema riguardante l'efficienza. Io ho una lista di insiemi (e quindi di rispettive chiavi) e un nuovo insieme S1. Per controllare se S1 già appartiene a questa lista il modo più semplice è scorrerla e verificare ad uno ad uno le stringhe generate dall'MD5. Non esiste un modo più furbo per fare la ricerca in tempo costante? ( O(1) per intenderci?).

Per esempio poichè le stringhe sono tutte differenti non c'è una funzione che restituisce un numero a seconda della stringa datagli in input? Se invoco l'atoi per fare una cosa del genere i numeri restituiti saranno differenti? Perchè in questo modo potrei generarmi un array booleano e verificare in tempo costante se S1 appartiene alla lista.
__________________
Notebook: MBP 15 i7 Retina, (Mid 2014)
fracarro è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2008, 13:32   #8
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Stai reinventando l'hashtable, che ha proprio complessita' O(1)

Cerca una libreria per l'hashtable, una per l'MD5, cucini a fuoco lento ed hai finito.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2008, 14:13   #9
fracarro
Senior Member
 
L'Avatar di fracarro
 
Iscritto dal: Jul 2002
Messaggi: 869
Quote:
Originariamente inviato da gugoXX Guarda i messaggi
Stai reinventando l'hashtable, che ha proprio complessita' O(1)

Cerca una libreria per l'hashtable, una per l'MD5, cucini a fuoco lento ed hai finito.
non potresti indicarmene qualcuna? Magari che hai utilizzato in passato e con cui ti sei trovato bene?
__________________
Notebook: MBP 15 i7 Retina, (Mid 2014)
fracarro è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2008, 14:58   #10
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Purtroppo in C non ne conosco, anche se cercando con google ne ho appena trovate tantissime. Non saprei consigliarti, ma ovviamente sembrano abbastanza complesse.
Personalmente le hastable le uso tutti i giorni, ma in C# (conosciute con il nome di Dictionary)
Ma perche' proprio C e non almeno C++? Forse in C++ qualche template samplice riesci a trovarlo.
Davvero penso che oggi il C sia limitato al mondo embedded, e anche li' piano piano lo stanno lasciando.

Fra l'altro, se la tua utility non e' un'utility grafica, oppure se fa uso regolare delle finestre allora potresti valutare di scrivere il codice in C# e farlo funzionare sia sotto Windows che sotto Linux (progetto MONO), oppure in Java, e farlo funzionare poi sotto qualche java virtual machine.
Io oggi seguirei questa strada, per non perdersi in tecnicismi che possono deviare i tuoi sforzi da quello che e' il vero studio della tua utility.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2008, 16:21   #11
Manbearpig
Member
 
L'Avatar di Manbearpig
 
Iscritto dal: Jan 2008
Messaggi: 90
se hai bisogno di identificare solo sottoinsiemi semplici e non multiinsiemi allora potresti vedere ogni sottoinsieme come una stringa di bit dove un bit e' posto a 1 se l'elemento e' presente ed e' posto a 0 se l'elemento non e' presente. Es. {0,3,7} = 1001000100000000000...
trasformi la stringa binaria in un intero e hai una chiave.
Manbearpig è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2008, 16:25   #12
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Se non ho capito male il problema e' diverso.
Vorrebbe che i 2 insiemi
{2,4,8} e {4,8,2} siano considerati diversi.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2008, 16:35   #13
Manbearpig
Member
 
L'Avatar di Manbearpig
 
Iscritto dal: Jan 2008
Messaggi: 90
Beh per definizione un isieme non e' ordinato. In ogni caso ho detto una stronzata prima convertirlo in un intero non e' possibile... (1000 bit)
Cmq potrebbe tenersi la stringa di bit come identificatore
Manbearpig è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2008, 17:10   #14
fracarro
Senior Member
 
L'Avatar di fracarro
 
Iscritto dal: Jul 2002
Messaggi: 869
Allora per quanto riguarda {2,4,6} e {2,6,4} per me sono la stessa cosa proprio perchè insiemi. Tuttavia la soluzione con i bit se da un lato risparmia in memoria e mi permette di effettuare il confronto tra due insiemi velocemente tramite l'and bit a bit dall'altro mi costringerebbe a verificare la lista dei insiemi per intero, per questo ho scartato l'ipotesi dei bit.

A questo punto l'unica soluzione mi sembra quella di trovare una libreria (più semplice possibile) per l'hashtable come consigliato gugoXX.

Riguardo il mio codice sono algoritmi di ottimizzazione quindi niente grafica e finestre. Una semplice linea di comando per risolvere un determinato problema di ottimizzazione. (Gli insiemi registrati nella hash table non sono altro che gli elementi di una tabu list e siccome devo verificare velocemente se una "mossa" è tabu devo sapere velocemente se un insieme appartiene o meno all'hashtable).
__________________
Notebook: MBP 15 i7 Retina, (Mid 2014)
fracarro è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2008, 17:30   #15
Manbearpig
Member
 
L'Avatar di Manbearpig
 
Iscritto dal: Jan 2008
Messaggi: 90
Il problema dell'hashtable sono le collisioni, avrai quindi insiemi diversi con lo stesso hash in quel caso dovrai confrontare tutti gli elementi dell'insieme con tutti gli insiemi che hanno lo stesso hash. nel peggiore dei casi hai 1000*1000*k confronti, dove k e' il numero di collisioni.
Manbearpig è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2008, 17:33   #16
Manbearpig
Member
 
L'Avatar di Manbearpig
 
Iscritto dal: Jan 2008
Messaggi: 90
Una soluzione ibrida probabilmente e' la cosa migliore, usi una hashtable nella quale memorizzi i tuoi valori sotto forma di stringhe di bit, in questo modo in caso di collisione puoi fare i confronti molto velocemente.
Manbearpig è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2008, 17:39   #17
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
No, guarda, allora ti consiglio di utilizzare un ibrido della mia soluzione e quella di Manbearpig, perche' avevo sopravvalutato il problema.

Con la soluzione di Manbearpig ti calcoli la chiave di ogni tuo insieme. (1000bit = 62byte invece che 32 dell'MD5)
Con una hashtable mantieni l'insieme di tutti gli elementi, controllando l'esistenza in O(1).

La hastable non e' altro che un vettore di oggetti, il cui indice, chiamato chiave, non e' un intero come nei vettori normali, ma sono altri oggetti.
Giusto per spiegarti un funzionamento:

Se sei su linea di comando JAVA o C# e vai a nozze sia sotto Linux che sotto Windows.
Forse bisogna aggiungere qualcosa sul comparatore di eguaglianza del tipo byte[], ma non sono sicuro.

Codice:
class Program
    {
        static void Main(string[] args)
        {
            //Inizializzo la hastable
            //TaleHashTable in questa implementazione restituisce, dato un risultato compattato in bit, quello che era l'insieme degli interi originari.
            // Se la hash la usi solo per testare l'esistenza del tuo risultato allora e' ancora piu' semplice.
            Dictionary<byte[], List<int>> MyMem = new Dictionary<byte[], List<int>>();
                       
            do
            {
                //Leggo una nuova lista in qualche modo
                List<int> nuovo=GenerateNuovoInsieme();
                //Ne calcolo il risultato;
                List<int> risultato = FromInisiemeToRisultato(nuovo);
                //Compatto il risultato in bit, invece che usare l'MD5
                byte[] RisultatoCompattato=CompactRisultato(risultato);

                //Lavoro sulla hash
                if (MyMem.ContainsKey(RisultatoCompattato))
                {
                    //Qui il codice di che faccio se gia' ce l'ho
                }
                else
                {                    
                    //Qui il codice di che faccio se non ce l'ho, oltre a memorizzarlo nella hash
                    MyMem[RisultatoCompattato] = nuovo;
                }                
            } while (Console.ReadKey().Key!=ConsoleKey.Escape);

        }        

        static List<int> FromInisiemeToRisultato(List<int> Insieme)
        {            
            List<int> ret = new List<int>();
            // qui il codice per calcolare l'insieme risultato dato l'insieme di ingresso
            return ret;
        }

        static byte[] CompactRisultato(List<int> risultato)
        {
            byte[] ret=new byte[64];
            //Qui il codice di ManBearPig per compattare una lista in un array di byte
            return ret;
        }

        static List<int> GenerateNuovoInsieme()
        {
            List<int> ret = new List<int>();
            // qui il codice per riempire l'insieme;
            return ret;
        }
    }
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.

Ultima modifica di gugoXX : 14-02-2008 alle 17:41.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2008, 18:00   #18
fracarro
Senior Member
 
L'Avatar di fracarro
 
Iscritto dal: Jul 2002
Messaggi: 869
Quote:
Originariamente inviato da gugoXX Guarda i messaggi
No, guarda, allora ti consiglio di utilizzare un ibrido della mia soluzione e quella di Manbearpig, perche' avevo sopravvalutato il problema.

Con la soluzione di Manbearpig ti calcoli la chiave di ogni tuo insieme. (1000bit = 62byte invece che 32 dell'MD5)
Con una hashtable mantieni l'insieme di tutti gli elementi, controllando l'esistenza in O(1).

La hastable non e' altro che un vettore di oggetti, il cui indice, chiamato chiave, non e' un intero come nei vettori normali, ma sono altri oggetti.
Giusto per spiegarti un funzionamento:

Se sei su linea di comando JAVA o C# e vai a nozze sia sotto Linux che sotto Windows.
Forse bisogna aggiungere qualcosa sul comparatore di eguaglianza del tipo byte[], ma non sono sicuro.

....
A me sembra invece più efficiente usare soltanto la hashtable senza creare la chiave tramite i bit (anche perchè non mi interessa risolvere eventuali conflitti nella hashtable). Mi spiego meglio. Se per esempio devo rappresentare l'insieme {2,7,4,9} io prima me lo ordino e poi genero la stringa str=2,7,4,9 che rappresenta la mia chiave. Da li poi uso la hashtable. Se invece la chiave la devo generare usando i bit sono costretto (almeno credo) a a inizializzarli tutti a zero e poi a settare ad uno solo quelli corrispondenti agli elementi dell'insieme. Se è così la prima soluzione è più efficiente.
__________________
Notebook: MBP 15 i7 Retina, (Mid 2014)
fracarro è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2008, 18:14   #19
Manbearpig
Member
 
L'Avatar di Manbearpig
 
Iscritto dal: Jan 2008
Messaggi: 90
Quote:
Originariamente inviato da fracarro Guarda i messaggi
A me sembra invece più efficiente usare soltanto la hashtable senza creare la chiave tramite i bit (anche perchè non mi interessa risolvere eventuali conflitti nella hashtable). Mi spiego meglio. Se per esempio devo rappresentare l'insieme {2,7,4,9} io prima me lo ordino e poi genero la stringa str=2,7,4,9 che rappresenta la mia chiave. Da li poi uso la hashtable. Se invece la chiave la devo generare usando i bit sono costretto (almeno credo) a a inizializzarli tutti a zero e poi a settare ad uno solo quelli corrispondenti agli elementi dell'insieme. Se è così la prima soluzione è più efficiente.
Beh si e' una buona soluzione, in ogni caso i conflitti in qualche modo dovrai gestirli... ordinando gli insiemi riduci il costo del confronto in caso di conflitto ma hai il costo di ordinare tutti gli insiemi. Cosa in effetti sia piu' efficente dipende molto dall'istanza del problema.
Per quanto riguarda il settare i bit a zero ti basterebbe una memset che ha costo pari a zero, e per settare i bit a 1 ti basta scorrere una volta gli elementi dell'insieme.
Manbearpig è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2008, 18:21   #20
lovaz
Senior Member
 
L'Avatar di lovaz
 
Iscritto dal: Jul 2002
Messaggi: 4334
Risposta da ignorante: e se invece ti costruisci degli alberi del tipo:

2
| - 3 - 4
| - 145

7
| - 456

per rappresentare ad es. gli insiemi {2,3,4}, {2,145}, {7,456}
e mentre crei un nuovo insieme confronti il primo elemento con le radici,
se non lo trovi l'insieme è nuovo (crei un nuovo albero),
se lo trovi confronti il secondo el. con i figli della radice, e così via,
finché non trovi l'elemento (insieme nuovo -> aggiungi un sottoalbero).

Nel caso sopra se generi l'insieme {2, 145, 146} al terzo tentativo saprai che
è nuovo, in quanto 145 non ha figli.

Forse questa roba ha anche un nome, ma io che sono un pozzo di ignoranza non lo so
lovaz è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Wind Tre 'accende' il 5G Standalone in Italia: si apre una nuova era basata sui servizi Wind Tre 'accende' il 5G Standalone in Italia: s...
OPPO Find X9 Pro: il camera phone con teleobiettivo da 200MP e batteria da 7500 mAh OPPO Find X9 Pro: il camera phone con teleobiett...
DJI Romo, il robot aspirapolvere tutto trasparente DJI Romo, il robot aspirapolvere tutto trasparen...
DJI Osmo Nano: la piccola fotocamera alla prova sul campo DJI Osmo Nano: la piccola fotocamera alla prova ...
FUJIFILM X-T30 III, la nuova mirrorless compatta FUJIFILM X-T30 III, la nuova mirrorless compatta
Il Galaxy S26 Edge potrebbe essere ancor...
Google riaccenderà una centrale n...
Crollo per Pornhub nel Regno Unito:-77% ...
La Germania accende il suo cannone laser...
Il meglio di Amazon in 2 minuti: tira ar...
ECOVACS risponde a Eureka e dimezza il p...
Durissimo colpo per Nintendo: l'ufficio ...
Scope elettriche al minimo storico su Am...
Blue Jay e Project Eluna: robotica e AI ...
Scede a 949€ il Samsung Galaxy S25 Ultra...
Blue Yeti Nano in super offerta su Amazo...
Netflix sta preparando un'offerta per Wa...
Prezzo impossibile, è sceso ancor...
Torna il migliore dei mini PC economici:...
USA, via libera all'uso di plutonio mili...
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: 19:07.


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