বিএফএস সাধারণত নিম্নলিখিত হিসাবে কিছু বর্ণনা করা হয় ( উইকিপিডিয়া থেকে )।
1 procedure BFS(G,start_v):
2 let Q be a queue
3 label start_v as discovered
4 Q.enqueue(start_v)
5 while Q is not empty
6 v = Q.dequeue()
7 if v is the goal:
8 return v
9 for all edges from v to w in G.adjacentEdges(v) do
10 if w is not labeled as discovered:
11 label w as discovered
12 w.parent = v
13 Q.enqueue(w)
বিষয়টি কিছুটা সূক্ষ্ম একটি: এটি 3 লাইনে লুকিয়ে আছে! প্রশ্নটি হ'ল আমরা কোন ডেটা স্ট্রাকচারটি ব্যবহার করতে যাচ্ছি কোন কোন শীর্ষকোষটি আবিষ্কার করা হয়েছে তা সংরক্ষণ করতে?
সবচেয়ে সহজ সমাধানটি হ'ল প্রতিটি অনুসারে একটি বুলি দিয়ে বুলিয়ান অ্যারে ব্যবহার করা। এই ক্ষেত্রে, অ্যারের প্রতিটি উপাদানকে আমাদের অবশ্যই শুরু করতে হবে false
এবং এতে সময় লাগবে । এটি প্রতিটি গ্রাফের জন্য প্রযোজ্য, এমনকি কোনও প্রান্ত না থাকলেও, তাই আমরা মধ্যে কোনও সম্পর্ক ধরে নিতে পারি না এবং এবং আমরা চলমান সময় পাই ।Θ ( |।) ভি।)| )| ভী|| ই|ও ( | ভি।)| + | ই| )
আমরা কি প্রারম্ভিক সময়ের সাথে কোনও ডেটা স্ট্রাকচার থাকা এড়াতে পারি ? আমাদের প্রথম প্রচেষ্টা হতে পারে একটি লিঙ্কযুক্ত তালিকা ব্যবহার করা। যাইহোক, এখন পরীক্ষা করছে যে কোনও শীর্ষবিন্দুটি সন্ধান করা হয়েছে (10 লাইন) পূর্বের মতো ধ্রুবক সময়ের পরিবর্তে পরিদর্শন করা উল্লম্ব সংখ্যায় সময় রৈখিক লাগে। এর অর্থ চলমান সময় , যা সবচেয়ে খারাপ ক্ষেত্রে সবচেয়ে খারাপ is (দ্রষ্টব্য যে আমরা হিসাবে এটি পুনরায় লিখতে চাই না যেহেতু এটি আরও খারাপ: এটি মতো খারাপ হতে পারে , তবে )Θ ( | ভি।)| )ও ( | ভি।)|| ই| )ও ( | ই।)|2)| ভী|4| ভী|| ই| ≤ | ভী|3
একটি পরিবর্তনশীল আকারযুক্ত অ্যারে ব্যবহার করা আমাদের তালিকাটি বাছাই করতে দেয়, সুতরাং এখন চেহারাগুলি কেবল সময় নিতে পারে তবে এটি এখনও কেবলমাত্র চলমান সময় দেয় , যা এখনও মানের চেয়ে খারাপ।ও ( লগ| ভী| )ও ( | ই।)| লগ| ভী| )
শেষ অবধি, আমরা একটি গতিশীল আকারের হ্যাশ টেবিল ব্যবহার করতে পারি: ধ্রুব আকারের এর একটি টেবিল দিয়ে শুরু করুন এবং প্রতিবার অর্ধ-পূর্ণ হয়ে গেলে এটি দ্বিগুণ করুন। এর অর্থ হ'ল টেবিলের চূড়ান্ত আকারটি অ্যালগোরিদম শেষ হওয়ার আগে যে শৃঙ্গগুলি আবিষ্কার হয়েছিল তার সর্বাধিক দ্বিগুণ এবং এটি সর্বাধিক কারণ আমরা প্রারম্ভের ভার্টেক্সের উপাদানটির বাইরে কখনই আবিষ্কার করি না। তদুপরি, এটি প্রসারণ করতে হ্যাশ টেবিলটি অনুলিপি করা মোট কাজের পরিমাণ সর্বাধিক। হ্যাশ টেবিলটিতে সন্ধান এবং সন্নিবেশগুলি রূপান্তরিত হয়েছে যাতে আমরা প্রকৃতপক্ষে চলমান সময় চলমান সময় পাই ।গ| ই| +1গ + + 2 গ + + 4 গ + + ⋯ + + 2 | ই| ।4 | ই| ও ( 1 )ও ( | ই।)| )
সুতরাং সম্ভব, তবে বাস্তব বাস্তবায়নে কি এটি করতে চান? আমি বলব সম্ভবত না। আপনার ইনপুট গ্রাফগুলিতে অনেকগুলি ছোট উপাদান থাকবে বলে বিশ্বাস করার কারণ না থাকলে হ্যাশ টেবিলটি বজায় রাখার ওভারহেড চলমান সময়টিতে একটি লক্ষণীয় ধ্রুবক উপাদান যুক্ত করতে চলেছে। হ্যাশ টেবিল বাড়তে সময় লাগতে পারেএবং অনুসন্ধানগুলির জন্য আপনাকে হ্যাশ ফাংশনটি গণনা করতে হবে এবং গড়ে টেবিলে একাধিক স্লট তাকান। হ্যাশ টেবিলগুলির দুর্বল ক্যাশে পারফরম্যান্স আপনাকে বাস্তব কম্পিউটারে আঘাত করতে পারে। স্ট্যান্ডার্ড অ্যারে প্রয়োগের বেশিরভাগ ক্ষেত্রে অংশটি হ'ল প্রভাবশালী শব্দও ( | ই।)| )4 | ই|ও ( | ই।)| )ও ( | ভি।)| + | ই| ) চলমান সময় তাই এটি করার ব্যবহারিক ব্যয় বিবেচনা করে, প্রভাবশালী শব্দটি সরিয়ে ফেলার জন্য হ্যাশ টেবিল ব্যবহার করা উচিত নয়।