ალგორითმებისა და მონაცემთა სტრუქტურების , მონაცემთა სტრუქტურების საკონტროლოს ერთ-ერთი ბილეთის ამოხსნა

 

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

One thought on “ალგორითმებისა და მონაცემთა სტრუქტურების , მონაცემთა სტრუქტურების საკონტროლოს ერთ-ერთი ბილეთის ამოხსნა

Leave a Reply / უპასუხე

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / შეცვლა )

Twitter picture

You are commenting using your Twitter account. Log Out / შეცვლა )

Facebook photo

You are commenting using your Facebook account. Log Out / შეცვლა )

Google+ photo

You are commenting using your Google+ account. Log Out / შეცვლა )

Connecting to %s