Upload
beso-bancadze
View
31
Download
1
Embed Size (px)
Citation preview
ალგორითმებისა და მონაცემთა სტრუქტურების , მონაცემთა სტრუქტურების
საკონტროლოს ერთ-ერთი ბილეთის ამოხსნა
14 Jun
CountingSort – ის ალგორითმი
void CountingSort (vector <int> & a , vector <int> & b )
{
k = *max_element (a.begin() , a.end () );
k++;
vector <int > c (k);
for (int i=0 ; i < a.size (); i++ )
c[a[i]]++;
for (int i=1; i < k ; i++ )
c[i] += c[i-1];
for (int i=a.size() – 1 ; i >=0; i– )
{
b[c[a[i]]-1] = a[i] ;
c[a[i]]–;
}
}
ოპერაციების რაოდენობა :
პირველ for ციკლის ოპერაციების მაქსიმალური რაოდენობა არის O(n) სადაც n არის a
ვექტორის ელემენტების რაოდენობა , მეორე for ციკლისა იქნება O(k-1) ხოლო მესამე for
ციკლისთვის ეს იქნება O(n) საბოლოო ჯამში იქნება O(k+n) ;
ალგორითმი კორექტულად მუშაობს არაუარყოფითი მთელი რიცხვების შემთხვევაში .
მეორე for -ის შემდეგ c[6] არ იარსებებს რადგან k არის 6 და ციკლი ტრიალებს 6-მდე ანუ
5-ის ჩათვლით , მეორე for გვიჩვენებს i(რაიმე კონკრეტულ მნიშვნელობაზე)-ზე
ნაკლები ან ტოლი ელემენტების რაოდენობას .
ღია მისამართებიანი ჰეშ- ცხრილის კლასის
მაგალითი
class OAHT {
private :
vector <int> * hTable ;
int capacity;
int size ;
int (*fPtr)(int , int);
public :
OAHT () ;
~OAHT ();
OAHT (int k , int hashFunc (int , int ));
int search (int k );
int get_capacity () ;
int get_size ();
void erase (int k );
int insert (int k);
};
void OAHT :: erase (int k )
{
int j=search (int k );
if ( j != capacity )
{
(*hTable)[j] = -1;
size –;
}
}
int OAHT :: search (int k)
{
int i=0;
while (1)
{
int j= ((*fPtr)(k,capacity)+i )% capacity;
if ( ( *hTable)[j] == k )
return j;
if ( ( *hTable)[j] == 0 || j == capacity )
{
cout<<”Hash Table Overflow ! “<<endl;
return capacity;
}
i++;
}
int HashByMultiply (int k, int m)
{
const int A= (sqrt(5)-1) /2;
return (int)(m*(k*A – floor(a*k)));
}
int main ()
{
OAHT ht (29,HashByMultiply);
—————————–
return 0;
}
მე-3 საკითხი
H(k,i) = (h1(k) + ih2(k))%capacity;
m = 9;
როცა k = 23 და i=0 ; insert (23) იმუშავებს j=H(23,0) =(5+0*(23%8))%9 = 5 ესეიგი T[5] = 23
როცა k=41 და i=0 ; insert (41) იმუშავებს j=H(41,0) =(5+0*(41%8))%9 = 5 ესეიგი i
გაიზრდება ,
insert (41) იმუშავებს j=H(41,1) =(5+1*(23%8))%9 =13%9 =4 ესეიგი T[4] = 41
როცა k = 50 და i=0 ; insert (50) იმუშავებს j=H(50,0) =(1+0*(50%8))%9 = 5 ესეიგი i
გაიზრდება ,
insert (50) იმუშავებს j=H(50,1) =(5+1*(50%8))%9 =7%9 =7 ესეიგი T[7] = 50