Advertisement
Guest User

Untitled

a guest
Feb 22nd, 2019
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.77 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. using namespace std;
  5.  
  6.  
  7. int hashFun(int v, int max){
  8.     unsigned int suma=23;
  9.     suma = suma*31 + v;
  10.     return suma % max;
  11. }
  12.  
  13. int nadjiIndex(vector<int>& niz, int j){
  14.     int i = (j+1)%niz.size();
  15.     do{
  16.         if(niz[i]!=-1 && niz[i]!=0) i = (i+1) % niz.size();
  17.         else break;
  18.     }while(i!=j);
  19.     if(i==j) return -1; // pun niz
  20.     else return i;
  21. }
  22.  
  23.  
  24. int nadjiIndex(int *niz, int vel, int j){
  25.     int i = (j+1)%vel;
  26.     do{
  27.         if(niz[i]!=-1 && niz[i]!=0) i = (i+1) % vel;
  28.         else break;
  29.     }while(i!=j);
  30.     if(i==j) return -1; // pun niz
  31.     else return i;
  32. }
  33.  
  34. vector<int> LinearniHash(vector<int> niz){
  35.     vector<int> rez(niz.size(),0);
  36.     for(int i=0; i<niz.size(); i++){
  37.         int j = hashFun(niz[i],niz.size());
  38.         cout<<"Rez hashiranja  je indeks j = "<<j<<" za el = "<<niz[i]<<endl;
  39.         if(rez[j]!=-1 && rez[j]!=0){ //nije slobodna vrijednost
  40.             j = nadjiIndex(rez,j);
  41.         }
  42.         rez[j] = niz[i];
  43.     }
  44.     return rez;
  45. }
  46.  
  47.  
  48. vector<vector<int>> LancaniHash(vector<int> niz){
  49.     vector<vector<int>> rez(niz.size());
  50.     for(int i=0; i<niz.size(); i++){
  51.         int j = hashFun(niz[i],niz.size());
  52.         cout<<"Rez hashiranja je indeks j = "<<j<<" za el = "<<niz[i]<<endl;
  53.         if(rez[j].size()!=0){ //nije slobodna vrijednost
  54.             int k=0;
  55.             for(; k<rez[j].size(); k++){
  56.                 if(niz[i]>rez[j][k]) break;
  57.             }
  58.             rez[j].insert(rez[j].begin()+k,niz[i]);
  59.         }
  60.         else
  61.             rez[j].push_back(niz[i]);
  62.  
  63.     }
  64.     return rez;
  65. }
  66.  
  67. int prebrojElemente(vector<vector<int>>& a){
  68.     int br(0);
  69.     for(auto vek:a){
  70.         for(auto el:vek) br++;
  71.     }
  72.     return br;
  73. }
  74.  
  75. void prebaciHash(vector<vector<int>> h, int* &t, int &velT){
  76.     int vel = prebrojElemente(h);
  77.     if(vel>velT){
  78.         delete[] t;
  79.         t = new int[vel];
  80.         velT=vel;
  81.         for(int i=0; i<velT; i++) t[i]=0; //prazan element
  82.     }
  83.  
  84.     for(auto vek:h){
  85.         for(auto el:vek){
  86.             int j = hashFun(el,velT);
  87.             if(t[j]!=0 && t[j]!=-1){
  88.                 j = nadjiIndex(t,velT,j);
  89.             }
  90.             t[j]=el;
  91.         }
  92.     }
  93.  
  94. }
  95.  
  96.  
  97.  
  98. vector<int>  ocistiHash(int* t,int velT, int n){
  99.     vector<int> rez;
  100.     for(int i=0; i<velT; i++){
  101.         int j = hashFun(t[i],velT);
  102.         if(j!=i){
  103.             int razmak2;
  104.             if(i<j) razmak2 = velT-j+i;
  105.             else razmak2 = i-j;
  106.             if(razmak2==n){
  107.                 rez.push_back(t[i]);
  108.                 t[i]=-1;
  109.  
  110.             }
  111.         }
  112.     }
  113.     return rez;
  114. }
  115.  
  116.  
  117. int main(){
  118.     vector<int> tVektor{1,5,99,15,20,32,512,1042,124,54,125,12,13,14,15,16};
  119.     cout<<endl<<"Lancani hash:"<<endl<<endl;
  120.     auto rez(LancaniHash(tVektor));
  121.     cout<<endl<<endl<<"Rezultat:"<<endl;
  122.     for(int i=0; i<rez.size(); i++){
  123.         cout<<"index = "<<i<<" "<<"elementi: ";
  124.         for(auto b:rez[i]) cout<<b<<" ";
  125.         cout<<endl;
  126.     }
  127.     cout<<endl<<endl;
  128.  
  129.     int* p = new int[5];
  130.     int vel=5;
  131.     prebaciHash(rez,p,vel);
  132.     cout<<"HashNiz prije ciscenja: "<<endl;
  133.         for(int i=0; i<vel; i++){
  134.         cout<<"index = "<<i<<" el = "<<p[i]<<endl;
  135.     }
  136.     auto rezzi = ocistiHash(p,vel,2);
  137.     cout<<"Izbaceni elementi:"<<endl;
  138.     for(int b:rezzi)cout<<b<<" ";
  139.     cout<<endl<<endl;
  140.     cout<<"HashNiz nakon izbacivanja"<<endl;
  141.     for(int i=0; i<vel; i++){
  142.         cout<<"index = "<<i<<" el = "<<p[i]<<endl;
  143.     }
  144.     delete[] p;
  145.  
  146.     cout<<endl<<endl;
  147.  
  148.     cout<<endl<<endl<<"Linearni hash:"<<endl<<endl;
  149.     auto rez2(LinearniHash(tVektor));
  150.     cout<<endl<<"Rezultat: "<<endl;
  151.     for(int i=0; i<rez2.size(); i++){
  152.         cout<<"index = "<<i<<" el = "<<rez2[i]<<endl;
  153.     }
  154.  
  155.  
  156.     return 0;
  157. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement