Wpis z mikrobloga

Mirki, mam zadanie z #java, #algorytmy, #programowanie: http://prac.im.pwr.wroc.pl/~kik/AiSD/INFORMATYKA/laboratorium/zadanie2.pdf

O ile z adresowaniem liniowym sobie poradziłem: h(k, i) = ((k % m) + i) % m, tak z resztą mam wątpliwości czy dobrze rozumiem.

np:

h(k, i) = (h′(k) + c1i + c2i^2) mod m

dla m = 4d, c2 = 2d, c1 = 1, gdzie d ∈ {25,50,...,2500}...

Czy to nie jest to samo co m = 100 od 10000 (jak w adresowaniu liniowym), tyle, że c2 = 1/2 m? No i jaki jest sens przyjmować za c1 cały czas wartość "1"? Przecież i tak to się przemnaża przez i-tą próbę...

Czy zapis matematyczny przekształcony na kod to:

// h(k, i) = (h′(k) + c_1*i + c2i^2) mod m

public int toHash(int k, int i) {

int c
1 = 1;

int c2 = m/2; // c2 = 2d, d = 1/4 m, d = 1/2 m

return ((k % m) + c1i + c2*i^2) % m;

}

?

W dwukrotnym zrobiłem coś takiego:

return ((k % m) + ((i * (k % m)) % m)) % m;

Dobrze?
  • 4
@Bresiu: A takie pytanie, niekoniecznie do Ciebie... Wszystkie zadania na studiach są tak zajebiście-bardzo oderwane od rzeczywistości czy to ja jestem hejterem? :D