Skip to content
This repository has been archived by the owner on Jun 25, 2020. It is now read-only.

Latest commit

 

History

History
79 lines (63 loc) · 4.73 KB

README.md

File metadata and controls

79 lines (63 loc) · 4.73 KB

Домашно 1

Краен срок за предаване: 2016.03.17 23:59:59

Задача 1

Точки: 5

Напишете функция long hash(char *word), която пресмята хеш стойността на дадена дума. Хеширане на данни представлява преобразуването на входни данни с произволна дължина към изходни с фиксирана. За хеширане могат да се използват различни алгоритми. Програмата трябва да чете от стандартния вход дума с големина до 200 символа и да изведе хеша на стандартния изход.

Във вашата функция използвайте следният алгоритъм:

  • Дефинирайте начална стойност: 42
  • За всеки символ от думата (може да ползвате strlen за да вземете големината на думата):
    • Вземете ASCII кода
    • Умножете го по позицията на символа в думата (започва от 1, не от 0)
  • Сумирайте всички получени стойности - това е хешът

Функцията трябва да връща пресметнатото число.

Примерен вход:

tovaeprimerenvhod

Изход:

16512

Ограничения:

  • Думата може да има най-много 200 символа

Задача 2

Точки: 7

Дефинирайте структура struct occurance_t съдържаща хешът на дума и броят пъти, които се среща. Четете от стандартния вход думи докато не срещнете думата "vsmisal". Изведете на стандартния изход колко пъти се среща най-често срещаната дума и нейният хеш. Използвайте хеширащата функция описана в задача 1.

Ограничения:

  • Думата може да има най-много 200 символа
  • Няма да бъдат въведени повече от 2000 думи преди "vsmisal".
  • Ще бъде въведена поне една дума преди "vsmisal".

Пояснение:

  • Ако има повече от една думи с равен брой срещания, и този брой е най-голям, се очаква да се изведе първата.и
    • Пример: ако всички думи се срещат по веднъж се очаква да се изведе хешът на първата
    • Пример: ако няколко думи се срещат по два пъти се очаква да се изведе хешът на двойката, която се среща първа
  • Ако две думи имат еднакъв хеш, то двете думи ги считаме за еднакви
    • Думите "vsmisal" и "Vsmisal" се считат за ралични думи
    • Всмисъл техните хешове са различни

Примерен вход:

do you even yaml bro rofl vsmisal

Изход:

2 1116

Задача 3

Точки: 7

Нашият алгоритъм за смятане на хеш има един проблем. Всмисъл появяват се т.нар колизии или две различни думи с един и същи хеш. Напишете програма, която чете думи докато не намери точно 4 думи с еднакъв хеш. За целта добавете поле към структурата occurance_t което да бъде масив от стрингове на думите, както и поле за брой на срещанията. Да се изведат колизиращите думи (без повторения) в нарастващ ред по хеш. Редът на думите с еднакъв хеш трябва да бъде същият както реда на прочитане от стандартния вход.

Формат на изхода:

хешът дума1 дума2
хешът дума1 дума2 дума3 дума4
хешът дума1 дума2 дума3

В изходa не трябва да фигурират [].

Ограничения:

  • Думата може да има най-много 200 символа
  • Няма да бъдат въведени повече от 3000 думи преди срещането на четирите колизиращи думи.