Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.06.2012, 12:43   #1
СветОК
Пользователь
 
Регистрация: 13.12.2010
Сообщений: 30
Восклицание Хэширование

Задание: разработать и реализовать хэш функциию осуществляющую хэширование данных:
Код:
struct Date
{
int Mouth
int year
}
Диапазон измерения Year равен (1971,1992)
Пытаясь разобраться какэто реализовать нашла нечто подобное
Код:
struct Date
{
	int Month;
	int Year;
	bool choosen;
};

int Hash(Date date, const int M)
{
 return (date.Month+date.Year*12)%M;
}

void main (void)
{
  Date C[300];
  const int M = 67;
  int T[M]={0};
  int i,j;
  const int K = 200;
  int U=0;
  double X=0;
  for (i=0; i<20; i++)
	for (j=0; j<12; j++)
	{
	  C[i*12+j].Year=1972+i;
	  C[i*12+j].Month=j;
	  C[i*12+j].choosen=false;
	}
  C[rand()%150].choosen = true;
  C[rand()%150+150].choosen = true;
  for (i=0; i<300; i++)
  {   
	  //cout <<i<< " "<< C[i].choosen << " "<< C[i].Suit << " " << C[i].Value << endl;
	  if(!C[i].choosen)  T[Hash(C[i],M)]++;
	  // cout<<Hash(C[i],M)<<endl;
  }
cout <<endl;
  for(i = 0; i <M; i++)
    cout <<  T[i] << endl;
for(int i = 0; i < M; i++)
  {
		U+=((T[i]-(K/M))*(T[i]-(K/M)));
		cout<<T[i]<<endl;
  }
X=((double)M/(double)K)*U;
cout<<endl<<X;
  getch();
}
не могу разобраться как она работает. но пример довольно таки похож на мою задачу. Не могли бы пояснить принцип работы этой хэшфункции

Последний раз редактировалось Stilet; 01.06.2012 в 19:09.
СветОК вне форума Ответить с цитированием
Старый 01.06.2012, 18:11   #2
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Объяснять принцип работы по коду - неблагодарная задача. Обычно проще бывает написать с нуля.
Так что пишите сами - проще будет объяснить.
s-andriano вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц