Pagini recente » Istoria paginii utilizator/mihnea_branzeu | Cod sursa (job #3146043) | Istoria paginii utilizator/petrur | Autentificare | Diferente pentru tabele-hash-prezentare-detaliata intre reviziile 10 si 11
Nu exista diferente intre titluri.
Diferente intre continut:
}
int Search1(Hash H, DataType K) {
/* Intoarce -1 daca elementul nu exista in hash
* sau indicele in hash daca el exista */
// Intoarce -1 daca elementul nu exista in hash
// sau indicele in hash daca el exista
return H[h(K)] ? h(K) : -1;
}
}
int Search2(Hash H, int K) {
/* Intoarce 0 daca elementul nu exista in hash
* sau 1 daca el exista */
// Intoarce 0 daca elementul nu exista in hash
// sau 1 daca el exista
List *L;
for (L=H[h2(K)]; L && (L->P != K); L = L->Next);
return L!=NULL;
In incheiere, prezentam un exemplu de functie de dispersie pentru cazul tablei de sah.
== code(c) |
const int M = 9973; /* numarul de "intrari" */
const int M = 9973; // numarul de "intrari"
typedef struct {
char b_T[8][8];
/* tabla de joc, cu 0 <= T[i][j] <= 12 */
// tabla de joc, cu 0 <= T[i][j] <= 12
char b_CastleW, b_CastleB;
/* ultimii doi biti ai lui b_CastleW
* indica daca albul are dreptul de a
* efectua rocada mare, respectiv pe cea
* mica. Analog pentru b_CastleB */
// ultimii doi biti ai lui b_CastleW
// indica daca albul are dreptul de a
// efectua rocada mare, respectiv pe cea
// mica. Analog pentru b_CastleB
char b_Side;
/* 0 sau 1, dupa cum la mutare este albul
* sau negrul */
// 0 sau 1, dupa cum la mutare este albul
// sau negrul
char b_EP;
/* 0..8, indicand coloana (0..7) pe care
* partea la mutare poate efectua o
* captura "en passant". 8 indica ca nu
* exista aceasta posibilitate */
// 0..8, indicand coloana (0..7) pe care
// partea la mutare poate efectua o
// captura "en passant". 8 indica ca nu
// exista aceasta posibilitate
int b_NMoves;
/* Numarul de mutari efectuate */
// Numarul de mutari efectuate
} Board;
Board B;
int h3(Board *B) {
int i, j;
/* Valoarea initiala a lui S este un numar pe 17 biti care
* inglobeaza toate variabilele suplimentare pe langa T.
* S se va lua apoi modulo M */
long S = (B->b_NMoves /* 8 biti */
+(B->b_CastleW << 8) /* 2 biti */
+(B->b_CastleB << 10) /* 2 biti */
+(B->b_Side << 12) /* 1 bit */
+(B->b_EP << 13)) % M; /* 4 biti */
// Valoarea initiala a lui S este un numar pe 17 biti care
// inglobeaza toate variabilele suplimentare pe langa T.
// S se va lua apoi modulo M
long S = (B->b_NMoves // 8 biti
+(B->b_CastleW << 8) // 2 biti
+(B->b_CastleB << 10) // 2 biti
+(B->b_Side << 12) // 1 bit
+(B->b_EP << 13)) % M; // 4 biti
for (i=0; i<=7; i++)
for (j=0; j<=7; j++) {
Nu exista diferente intre securitate.
Topicul de forum nu a fost schimbat.