tablica haszująca

  • Rejestracja: dni
  • Ostatnio: dni
0

Mam nastepujący problem. Zadanie polega na implementacji tablicy haszującej podanej niżej oraz 2 zaproponowanych funkcji mieszających

Jako dane tekstowe nalezy użyć słownik zawierający słowa w języku angielskim.

Funkcja haszująca do wykorzystania:

Kopiuj
int hash(const std::string &s)
{
int result = 0;
for (int i = 0; i < s.length(); ++i)
{
result ^= s[i];
}
return result;
}

Uwaga: powyższa funkcja generuje wartości z przedziału [0, 255] - na potrzeby zadania
należy zmodyfkować ją tak, aby generowała wartości z szerszego zakresu.

Ktoś wie jak to ugryźć?

hauleth
  • Rejestracja: dni
  • Ostatnio: dni
1

tak

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
1

Ta funkcja daje wyniki tylko 0-255 bo xorujesz zmienne char które są 1bajtowe (czyli przyjmują właśnie 256 wartości).
Chcesz więcej wyników? Xoruj inne kawałki tekstu niż 1 bajtowe. Jak? Rzutuj na przykład kawałki po 4 bajty na int i xoruj ;)

Kopiuj
int hash(const char* slowo)
{
  int modulo = 1000; //maksymalna liczba jaką chcesz uzyskać
  int ret=0;
  int n=strlen(slowo); //dlugosć słowa

  while(n>=sizeof(int)) //dopóki są kawałki po 4 bajty
  {
   ret^=*(int*)slowo; //xor na 4 bajtach
   n-=sizeof(int); //"skracamy słowo"
   slowo+=sizeof(int); //przesuwamy sie dalej
  }

  int rem=0; //to co nam zostało, tzn 1,2 lub 3 bajty
  while(n--)
  {
    rem<<=8; //przesuwamy się o 1 bajt
    rem^=*slowo++; //xor
  }
  ret^=rem;
  return ret%modulo;
}
LN
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1398
0

Najpierw trzeba się dowiedzieć, jak działa tablica hashująca -> Google.

  • Rejestracja: dni
  • Ostatnio: dni
0

Chłopaki/dziewczyny podpinam sie do posta, gdyż mam do rozwiązania identyczny problem.

Wspomógłby ktoś gotowym rozwiazaniem??

Był bym wdzięczny

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
0

Pomroczność? Przecież tu już jest gotowiec ode mnie...

  • Rejestracja: dni
  • Ostatnio: dni
0

Przepraszam kolego.
Nie doczytałem całego polecenia.

Moje zadanie to:

<image>18464a0831.png</image>

54cd50ef57.png

Prosze o pomoc

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
0

I co? Liczysz że ktoś ci da gotowca? o_O Chyba będę musiał wysłać maila do odpowiedniej osoby na politechnice łódzkiej...

  • Rejestracja: dni
  • Ostatnio: dni
0

Czerwiec to ciężki okres dla studenta.....

Każda pomoc w cenie

spartanPAGE
  • Rejestracja: dni
  • Ostatnio: dni
1

Cena... otóż to ;-)

pingwindyktator
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Kraków
  • Postów: 1055
0

Za 50 zł będziesz miał rozwiązanie za 10 minut.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.