Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Le soluzioni FSP per il 2026: potenza e IA al centro
Le soluzioni FSP per il 2026: potenza e IA al centro
In occasione del Tech Tour 2025 della European Hardware Association abbiamo incontrato a Taiwan FSP, azienda impegnata nella produzione di alimentatori, chassis e soluzioni di raffreddamento tanto per clienti OEM come a proprio marchio. Potenze sempre più elevate negli alimentatori per far fronte alle necessità delle elaborazioni di intelligenza artificiale.
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa
AWS è il principale operatore di servizi cloud al mondo e da tempo parla delle misure che mette in atto per garantire una maggiore sovranità alle organizzazioni europee. L'azienda ha ora lanciato AWS European Sovereign Cloud, una soluzione specificamente progettata per essere separata e distinta dal cloud "normale" e offrire maggiori tutele e garanzie di sovranità
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto
Xiaomi ha portato sul mercato internazionale la nuova serie Redmi Note, che rappresenta spesso una delle migliori scelte per chi non vuole spendere molto. Il modello 15 Pro+ punta tutto su una batteria capiente e su un ampio display luminoso, sacrificando qualcosa in termini di potenza bruta e velocità di ricarica
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 21-11-2007, 21:15   #1
gurutech
Senior Member
 
L'Avatar di gurutech
 
Iscritto dal: Jun 2000
Città: S.Giuliano (MI)
Messaggi: 1047
[C] Hash Table: roba che si mangia?

Ciao,
dato un URL in ingresso ad un programma devo confrontarlo per una corrispondenza in una luuuunga lista di URL.
da quello che ho capito la funzionalità che mi serve è implementata da qualcosa chiamato Hash Table.
http://en.wikipedia.org/wiki/Hash_table
Mi date qualche riferimento per documentarmi meglio, magari con del codice di esempio? tenete presente che io so programmare solo in C (eccetto per i linguaggi di scripting) e che comunque il resto del codice l'ho già scritto in C.

cosa ne pensate di queste implementazioni?
http://www.ipd.bth.se/ska/sim_home/libghthash.html
http://cmph.sourceforge.net/
http://uthash.sourceforge.net/userguide.html

grazie
__________________
“No te tomes tan en serio la vida, al fin y al cabo no saldrás vivo de ella”
gurutech è offline   Rispondi citando il messaggio o parte di esso
Old 22-11-2007, 10:16   #2
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Per corrispondenza intendi uguaglianza ?
IMHO fai prima a calcolarti un hash di ogni url ed a salvarti questo hash insieme all'url. Dopo quello che ti serve è solo un'indicizzazione degli hash. Per calcolare l'hash puoi usare md5.

Un md5 è qualcosa di questo tipo: 5308a79f5e652edba5be84644ee14b09

Ad esempio: con un indice a due livelli.
Immagina di avere una lista di strutture:
Codice:
struct url_list {
    char *url;
    struct url_list *next;
};

typedef struct url_list * url_list_pointer;

url_list_pointer hash_table[256][256]; /* da inzializzare a NULL */
Per indicizzare la tabella usa i primi 2 byte della stringa md5 (sono in esadecimale).
Quindi:
Codice:
int get_hex_value_from_char(char c)
{
    return (c < '9' && c > '0') ? c - '0' : (c < 'f' && c > 'a') ? c - 'a' + 10 : 0;
}

int row_index = get_hex_value_from_char(md5_string[0]) * 16 + get_hex_value_from_char(md5_string[1]);

int column_index = get_hex_value_from_char(md5_string[2]) * 16 + get_hex_value_from_char(md5_string[3]);
hash_table[row_index][column_index] conterrà la lista di tutti gli url che hanno gli stessi primi due byte dell'hash !!!

Grazie al md5 gli url si andranno a distribuire uniformemente su tutta la tabella. Ovviamente dovrai pensare anche a come inserire un url nella lista

Una volta che accedi ad una lista della tabella, se l'elemento contiene NULL allora non ci sono match, se contiene una lista valida allora devi fare un confronto fra le stringhe in tutta la lista, ma grazie alla distribuzione quasi uniforme il numero di confronti sarà mediamente di NUMERO_DI_URL / 2^16.

Se hai un numero di url molto maggiore di 2^16...che so...molto maggiore di 2^24 allora ti conviene ampliare la tabella, ad esempio andando a lavorare su 2^12 bit per indice (3 cifre esadecimali per indice). In questo modo arrivi tranquillamente a gestire 2^32 url facendo un numero di confronti fra stringhe massimo pari a 2^8
In alternativa c'è anche la possibilità di aumentare il numero di livelli dell'indicizzazione

Ultima modifica di cionci : 22-11-2007 alle 10:19.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 22-11-2007, 10:31   #3
gurutech
Senior Member
 
L'Avatar di gurutech
 
Iscritto dal: Jun 2000
Città: S.Giuliano (MI)
Messaggi: 1047
Inizialmente avevo pensato di usare MD5 oppure SHA1, calcolare un hash della URL e metterlo in un DB tipo sqlite. Il programma una volta online deve solo leggere dal DB non scrivere. il punto è che avrò circa 10^6 URL da controllare in tempo reale per emettere un verdetto "si puoi navigare" / "no no puoi navigare". Poi però leggendo qua:
Quote:
Originariamente inviato da http://en.wikipedia.org/wiki/Hash_table
[...]
Choosing a good hash function
[...]
Simplicity and speed are readily measured objectively (by number of lines of code and CPU benchmarks, for example), but strength is a more slippery concept. Obviously, a cryptographic hash function such as SHA-1 would satisfy the relatively lax strength requirements needed for hash tables, but their slowness and complexity makes them unappealing. However, using cryptographic hash functions can protect against collision attacks when the hash table modulus and its factors can be kept secret from the attacker,[citation needed] or alternatively, by applying a secret salt.
[...]
ho pensato che forse non era la cosa adatta.
Quanto è veloce la macchina a calcolare un hash MD5?
tenete presente che devo fare tutto su un AMD Geode LX800 @ 500 MHz con 256 MB di RAM.

il fatto di immagazzinare tutto in un DB mi era comodo perchè devo aggiornare la lista di URL frequentemente sulla base di dati che mi vengono inviati.
__________________
“No te tomes tan en serio la vida, al fin y al cabo no saldrás vivo de ella”
gurutech è offline   Rispondi citando il messaggio o parte di esso
Old 22-11-2007, 10:33   #4
gurutech
Senior Member
 
L'Avatar di gurutech
 
Iscritto dal: Jun 2000
Città: S.Giuliano (MI)
Messaggi: 1047
potrei anche fare un mix: caricare tutto in un DB e all'avvio del programma precaricare una tabella di hash come quella che mi ha illustrato cionci ....
__________________
“No te tomes tan en serio la vida, al fin y al cabo no saldrás vivo de ella”
gurutech è offline   Rispondi citando il messaggio o parte di esso
Old 22-11-2007, 11:00   #5
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da gurutech Guarda i messaggi
potrei anche fare un mix: caricare tutto in un DB e all'avvio del programma precaricare una tabella di hash come quella che mi ha illustrato cionci ....
Certo...ovviamente gli hash degli url devono essere precalcolati (basta salvarsi i primi byte dell'hash o direttamente gli indici), non è il caso di andare a calcolarteli ogni volta. Per l'inserimento nella tabella direi che andarseli ad inserire a runtime nella lista corrispondente dovrebbe costare relativamente poco dal punto di vista computazionale (fai un inserimento in testa, più il calcolo degli indici della tabella).

Sicuramente un hash come md5 per un problema di questo tipo è sovradimensionato, ma in fondo a runtime si tratta di calcolarlo solo una volta per ogni url di cui verifichi la presenza.
cionci è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Le soluzioni FSP per il 2026: potenza e IA al centro Le soluzioni FSP per il 2026: potenza e IA al ce...
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa AWS annuncia European Sovereign Cloud, il cloud ...
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto Redmi Note 15 Pro+ 5G: autonomia monstre e displ...
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione HONOR Magic 8 Pro: ecco il primo TOP del 2026! L...
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata Insta360 Link 2 Pro e 2C Pro: le webcam 4K che t...
200 droni capaci di pianificare attacchi...
I food truck a New York ora si alimentan...
Meta blocca i chatbot AI con personalit&...
Resident Evil Code: Veronica, il Remake ...
Allenatore esonerato a causa di ChatGPT?...
Il mercato degli SSD è in salita:...
Offerte Dell su Amazon: 4 portatili pote...
Richard Stallman spara a zero su intelli...
C'è anche un Ripetitore Wi-Fi sot...
Biostampa 3D: scienziati creano tessuto ...
Adesso puoi comprare gli occhiali smart ...
Changan CS75 Plus entra nel Guinness: sa...
Prime foto della McLaren MCL40: bellissi...
Una manna per gli allergici: torna a 79€...
Blink a prezzo minimo storico: Mini 2K+ ...
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: 13:50.


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