স্ব-সংগঠিত তালিকা মূলত সর্বশেষ অনুসন্ধান করা আইটেমের ভিত্তিতে আইটেমের প্রদত্ত পরিসরের তালিকা আপডেট করে। এই পদ্ধতিতে, অনুক্রমিক অনুসন্ধান পদ্ধতি ব্যবহার করা হয়। এই অ্যালগরিদম তালিকার শুরুতে আরও গুরুত্বপূর্ণ ডেটা স্থানান্তর করে। এই অনুসন্ধান কৌশলের সময় জটিলতা হল O(n).
অ্যালগরিদম
শুরু ফাংশন FibonacciSearch()। 'start+fib[index-2]' এক্সপ্রেশন ব্যবহার করে মধ্য মান গণনা করুন। যদি নির্বাচিত আইটেমটি মধ্য সূচকের মানের সমান হয়, ফলাফল মুদ্রণ করুন এবং মূলে ফিরে যান। যদি এটি মধ্য সূচকে মানের থেকে কম হয়, বাম সাব-অ্যারে দিয়ে এগিয়ে যান। যদি এটি মধ্য সূচকে মানের থেকে বেশি হয়, তাহলে ডান সাব-অ্যারে নিয়ে এগিয়ে যান। যদি গণনা করা মধ্য মানটি শুরু বা শেষের সমান হয় তবে আইটেমটি অ্যারেতে পাওয়া যায় না৷ শেষ
উদাহরণ কোড
#includenamespace ব্যবহার করে std;struct node { int d; node *next;};node* CreateNode(int d) { node *newnode =new node; নিউনোড->d =d; newnode->next =NULL; রিটার্ন newnode;}node* InsertIntoList(node *head, int d) { node *temp =CreateNode(d); node *t =নতুন নোড; t =মাথা; if(head ==NULL) { head =temp; মাথা ফেরত; } else { while(t->পরবর্তী!=NULL) t =t->পরবর্তী; t->পরবর্তী =তাপমাত্রা; } রিটার্ন হেড;} void ডিসপ্লে(নোড *হেড) { নোড *টেম্প =নতুন নোড; temp =মাথা; cout<<"\n তালিকার অবস্থা হল :"; while(temp->পরবর্তী !=NULL) { cout<<"->"< d; temp =temp->পরবর্তী; }}নোড* সার্চ আইটেম (নোড *হেড, int আইটেম) { int ফ্ল্যাগ =0; node *temp =নতুন নোড; node *t =নতুন নোড; temp =মাথা; if(temp->d ==আইটেম) { cout<<"\nআইটেম হেড নোডে পাওয়া গেছে"; পতাকা =5; প্রদর্শন (মাথা); মাথা ফেরত; } else { while((temp->next)->next !=NULL) { if((temp->next)->d ==item) { cout<<"\nআইটেম পাওয়া গেছে"; পতাকা =5; বিরতি } temp =temp->পরবর্তী; } t =(temp->পরবর্তী)->পরবর্তী; (temp->পরবর্তী)->পরবর্তী =মাথা; head =temp->পরবর্তী; temp->পরবর্তী =t; if(পতাকা ==5) ডিসপ্লে(হেড); else cout<<"\nআইটেম পাওয়া যায়নি।"; } রিটার্ন হেড;} int main() { int i, n; char ch; node *head =নতুন নোড; head =NULL; for(i =1; i <20; i++) head =InsertIntoList(head, i); প্রদর্শন (মাথা); up:cout<<"\nঅনুসন্ধান করা উপাদানটি লিখুন:"; cin>>n; head =SearchItem(head, n); cout<<"\n\n\tআপনি কি আরও অনুসন্ধান করতে চান...চয়েস লিখুন(y/n)?"; cin>>ch; if(ch =='y' || ch =='Y') উপরে যান; রিটার্ন 0;