Advertisement
Guest User

Untitled

a guest
Dec 11th, 2017
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.63 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. #include<time.h>
  3. #define hash_size 10000
  4. #define null_value 99999
  5.  
  6. using namespace std;
  7.  
  8. typedef unsigned long long int lli;
  9.  
  10. ///hash functions
  11.  
  12. lli djb2(string str)
  13. {
  14. lli x = 5381;
  15. int l = str.length();
  16.  
  17. for (long long int i = 0; i < l; i++)
  18. x =x+ ((x * 33) + str[i]);
  19.  
  20. return x;
  21. }
  22.  
  23.  
  24. lli sdbm(string str)
  25. {
  26. lli hash = 0;
  27.  
  28. for(int i = 0; i < str.length(); i++)
  29. {
  30. hash = str[i] + (hash << 6) + (hash << 16) - hash;
  31. }
  32.  
  33. return hash;
  34. }
  35.  
  36. lli jenkins(string str)
  37. {
  38. lli x = 0;
  39. int l=str.length();
  40. for (int i = 0; i < l; i++)
  41. {
  42. x += str[i];
  43. x += (x << 10);
  44. x ^= (x >> 6);
  45. }
  46.  
  47. x += (x << 3);
  48. x ^= (x >> 11);
  49. x += (x << 15);
  50.  
  51. return x;
  52. }
  53.  
  54. ///random string generator
  55. static const char alphanum[] ="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  56. int stringLength = sizeof(alphanum) - 1;
  57.  
  58. char genRandom() // Random string generator function.
  59. {
  60.  
  61. return alphanum[rand() % stringLength];
  62. }
  63.  
  64. void random_generator(int ssize,int n,string *rstr)
  65. {
  66.  
  67. for(int i=0;i<n;i++)
  68. {
  69. string str="";
  70. for(int z=0; z < ssize; z++)
  71. {
  72. char x=genRandom();
  73. str.push_back((char)x);
  74. }
  75. rstr[i]=str;
  76. }
  77.  
  78. }
  79.  
  80.  
  81. /// linearprobing probing
  82.  
  83. struct lnode
  84. {
  85. string key;
  86. int value;
  87.  
  88. lnode(string k, int v)
  89. {
  90. key=k;
  91. value=v;
  92. }
  93. lnode()
  94. {
  95.  
  96. }
  97.  
  98. };
  99.  
  100.  
  101. class linearprobing
  102. {
  103.  
  104. lnode *hashtable;
  105. int type,hsize,value,col;
  106.  
  107. public:
  108.  
  109. linearprobing(int size,int htype)
  110. {
  111. hashtable=new lnode[size];
  112. type=htype;
  113. hsize=size;
  114. value=0;
  115. col=0;
  116.  
  117. for(int i=0; i<hsize; i++)
  118. {
  119. hashtable[i]=lnode("EMPTY",-1);
  120. }
  121. }
  122.  
  123.  
  124. void insert (string key)
  125. {
  126. if(search(key)!=null_value)
  127. return;
  128.  
  129. lli index;
  130.  
  131. if(type==1)
  132. index=djb2(key);
  133. else if(type==2)
  134. index=sdbm(key);
  135. else
  136. index=jenkins(key);
  137.  
  138.  
  139. if(hashtable[index%hsize].value!= -1)
  140. {
  141. col++;
  142. }
  143.  
  144. int i=0;
  145. while(i<hsize)
  146. {
  147.  
  148. lli temp= (index+i) % hsize;
  149.  
  150. if(hashtable[temp].key=="EMPTY")
  151. {
  152. value++;
  153. hashtable[temp]=lnode(key,value);
  154. return;
  155. }
  156.  
  157. else
  158. {
  159. i++;
  160. }
  161. }
  162.  
  163. }
  164.  
  165.  
  166. int search(string key)
  167. {
  168. lli index;
  169. int i=0;
  170.  
  171. if(type==1)
  172. index=djb2(key);
  173. else if(type==2)
  174. index=sdbm(key);
  175. else
  176. index=jenkins(key);
  177.  
  178.  
  179. while(i<hsize)
  180. {
  181. lli temp= (index+i) % hsize;
  182.  
  183. if(hashtable[temp].key=="EMPTY")
  184. {
  185. return null_value;
  186. }
  187.  
  188. else if(hashtable[temp].key==key)
  189. {
  190. return temp;
  191. }
  192.  
  193. else
  194. {
  195. i++;
  196. }
  197. }
  198.  
  199. return null_value;
  200.  
  201. }
  202.  
  203. void deletekey (string key)
  204. {
  205. int temp=search(key);
  206.  
  207. if(temp!=null_value)
  208. {
  209. hashtable[temp]=lnode("DELETED",-1);
  210. }
  211.  
  212. else
  213. {
  214. cout<<"key not found"<<endl;
  215. return;
  216. }
  217. }
  218.  
  219.  
  220. int getcollision()
  221. {
  222. return col;
  223. }
  224.  
  225.  
  226. void print()
  227. {
  228. for(int i=0;i<hsize;i++)
  229. {
  230. cout<< hashtable[i].key<< " "<<hashtable[i].value <<endl;
  231. }
  232. }
  233.  
  234.  
  235.  
  236. };
  237. //-------------------------------x----------------------------------------------
  238. struct snode
  239. {
  240. string key;
  241. int value;
  242. snode *next,*prev;
  243.  
  244.  
  245. snode(string k,int v)
  246. {
  247. key=k;
  248. value=v;
  249.  
  250. next=0;
  251. prev=0;
  252. }
  253.  
  254. snode()
  255. {
  256. next=0;
  257. prev=0;
  258. }
  259.  
  260.  
  261. };
  262.  
  263.  
  264. class spchainning
  265. {
  266.  
  267. snode **hashtable;
  268. int type,hsize,value,col;
  269.  
  270. public:
  271. spchainning(int size,int htype)
  272. {
  273. hsize=size;
  274. type=htype;
  275. col=0;
  276. value=0;
  277. hashtable=new snode*[hsize];
  278. for(int i=0;i<hsize;i++)
  279. hashtable[i]=NULL;
  280. }
  281.  
  282.  
  283. void insert(string key)
  284. {
  285.  
  286. lli index;
  287.  
  288. if(type==1)
  289. index=djb2(key)%hsize;
  290. else if(type==2)
  291. index=sdbm(key)%hsize;
  292. else
  293. index=jenkins(key)%hsize;
  294.  
  295.  
  296. value++;
  297. snode *temp=new snode(key,value);
  298.  
  299.  
  300. if(hashtable[index]==NULL)
  301. {
  302. hashtable[index]=temp;
  303. }
  304. else
  305. {
  306. hashtable[index]->prev=temp;
  307. temp->next=hashtable[index];
  308. hashtable[index]=temp;
  309. col++;
  310.  
  311. }
  312.  
  313.  
  314.  
  315. }
  316.  
  317.  
  318. snode* search(string key)
  319. {
  320.  
  321. lli index;
  322.  
  323. if(type==1)
  324. index=djb2(key)%hsize;
  325. else if(type==2)
  326. index=sdbm(key)%hsize;
  327. else
  328. index=jenkins(key)%hsize;
  329.  
  330.  
  331.  
  332. if(hashtable[index]==NULL)
  333. {
  334. return NULL;
  335. }
  336. else
  337. {
  338.  
  339. snode *temp;
  340. temp=hashtable[index];
  341.  
  342. while(temp)
  343. {
  344. if(temp->key==key)
  345. return temp;
  346. else
  347. temp=temp->next;
  348.  
  349. }
  350.  
  351. }
  352.  
  353. return NULL;
  354.  
  355. }
  356.  
  357.  
  358. void deletekey(string key)
  359. {
  360.  
  361. snode *temp=search(key);
  362.  
  363. if(temp==NULL)
  364. {
  365. printf("key not found");
  366. return;
  367. }
  368.  
  369.  
  370. lli index;
  371. if(type==1)
  372. index=djb2(key)%hsize;
  373. else if(type==2)
  374. index=sdbm(key)%hsize;
  375. else
  376. index=jenkins(key)%hsize;
  377.  
  378.  
  379. ///if node is the head in that index
  380. if(hashtable[index]==temp)
  381. {
  382. snode *temp2=temp->next;
  383. hashtable[index]=temp2;
  384. if(temp->next != NULL)
  385. {
  386. temp2->prev=NULL;
  387.  
  388. }
  389.  
  390. delete temp;
  391.  
  392. }
  393.  
  394. else
  395. {
  396.  
  397. snode *prev=temp->prev;
  398. snode *next=temp->next;
  399.  
  400. prev->next=next;
  401. if(next!= NULL)
  402. {
  403. next->prev=prev;
  404. }
  405.  
  406. delete temp;
  407.  
  408.  
  409. }
  410.  
  411.  
  412.  
  413. }
  414.  
  415.  
  416. int getcollision()
  417. {
  418. return col;
  419. }
  420.  
  421.  
  422.  
  423.  
  424.  
  425. };
  426.  
  427.  
  428. int main()
  429. {
  430.  
  431. return 0;
  432. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement