গভীরতা-প্রথম অনুসন্ধান (ডিএফএস) বনাম ব্রেথথ ফার্স্ট অনুসন্ধান (বিএফএস) ব্যবহার করা কখন ব্যবহারিক? [বন্ধ]


345

আমি ডিএফএস এবং বিএফএসের মধ্যে পার্থক্য বুঝতে পারি, তবে আমি কখন আগ্রহী অন্যটি ব্যবহার করার জন্য এটি কখন ব্যবহারিক?

ডিএফএস কীভাবে বিএফএস এবং এর বিপরীতে ট্রাম্প করবে তার কোনও উদাহরণ কেউ দিতে পারেন?


4
প্রশ্নটিতে আপনি ডিএফএস এবং বিএফএসের পুরো শর্তাদি উল্লেখ করতে পারেন - লোকেরা এই সংক্ষিপ্ত বিবরণগুলি জানেন না।
হ্যান্স-পিটার স্টার




নোট এই বি এবং DFS কিছু আবেদন পরিস্থিতিতে উল্লেখ
Yossarian42

উত্তর:


353

এটি অনুসন্ধানের গাছের কাঠামো এবং সমাধানের সংখ্যা এবং অবস্থানের উপর নির্ভর করে (আইটেমগুলিতে অনুসন্ধান করা) on

  • আপনি যদি জানেন যে কোনও গাছ গাছের গোড়া থেকে খুব দূরে নয়, তবে প্রস্থের প্রথম অনুসন্ধান (বিএফএস) আরও ভাল হতে পারে।
  • যদি গাছটি খুব গভীর হয় এবং সমাধানগুলি বিরল হয় তবে গভীরতার প্রথম অনুসন্ধানে (ডিএফএস) খুব দীর্ঘ সময় নিতে পারে, তবে বিএফএস আরও দ্রুত হতে পারে।

  • যদি গাছটি খুব প্রশস্ত হয় তবে একটি বিএফএসের খুব বেশি মেমরির প্রয়োজন হতে পারে, তাই এটি সম্পূর্ণ অবৈধ হতে পারে।

  • যদি সমাধানগুলি ঘন ঘন তবে গাছের গভীরে অবস্থিত থাকে তবে বিএফএস অযৌক্তিক হতে পারে।

  • যদি অনুসন্ধান গাছটি খুব গভীর হয় তবে আপনাকে গভীরতার প্রথম অনুসন্ধান (ডিএফএস) এর জন্য অনুসন্ধানের গভীরতা সীমাবদ্ধ করতে হবে, যাইহোক (উদাহরণস্বরূপ পুনরাবৃত্তি গভীর করার সাথে)।

তবে এগুলি কেবল থাম্বের নিয়ম; আপনার সম্ভবত পরীক্ষা করা দরকার।


4
আফাইক পুনরাবৃত্তি সাধারণত পুনরাবৃত্তির চেয়ে বেশি মেমরির প্রয়োজন।
মারেক মার্ক্সাক

3
@ মারেকমার্কজাক আপনি কী বলতে চান তা আমি যথেষ্ট দেখতে পাচ্ছি না। আপনি যদি বিএফএসকে পুনরাবৃত্তি হিসাবে গ্রহণ করেন - যদি সমাধানের স্থানটি সহজেই গণনাযোগ্য না হয় তবে আপনাকে এন ট্রিটমেন্টের পুরো এন-তৃতীয় স্তরের মেমরিতে এন + 1-তম স্তরটি গণনা করতে হবে।
হান্স-পিটার স্টার

11
@ মেরেকমার্কজাক ডিএফএস এর পুনরাবৃত্তি সংস্করণ একটি স্ট্যাক ব্যবহার করে। পুনরাবৃত্তি বনাম Iteration একটি সম্পূর্ণ পৃথক বিষয়।
ক্লিন্ট দেইগু

মাথায় আসা কেবল আরেকটি ক্ষেত্রে: গ্রাফ "অসীম" ক্ষেত্রে বিএফএস দরকারী (প্রয়োজনীয়)। যেমনটি বলুন, একটি দাবা বোর্ড যা সমস্ত দিক থেকে অনন্ততায় প্রসারিত। ডিএফএস আর ফিরে আসবে না। শর্তটি সন্তোষজনক হলে বিএফএস এটি অনুসন্ধান করছে কিনা তা নিশ্চিত করার জন্য গ্যারান্টিযুক্ত।
ThePartyTurtle

157

গভীরতা প্রথম অনুসন্ধান

গভীরতার প্রথম অনুসন্ধানগুলি প্রায়শই গেমগুলির সিমুলেশনগুলিতে ব্যবহৃত হয় (এবং বাস্তব বিশ্বের খেলাগুলির মতো পরিস্থিতি)। একটি সাধারণ খেলায় আপনি বেশ কয়েকটি সম্ভাব্য ক্রিয়াগুলির মধ্যে একটি চয়ন করতে পারেন। প্রতিটি পছন্দ আরও পছন্দ বাড়ে, যার মধ্যে প্রতিটি আরও পছন্দ বাড়ে এবং এর ফলে সম্ভাবনার একটি বর্ধিত গাছ-আকারের গ্রাফের দিকে যায়।

এখানে চিত্র বর্ণনা লিখুন

উদাহরণস্বরূপ দাবা, টিক-টাক-টো-এর মতো গেমগুলিতে আপনি যখন সিদ্ধান্ত নেবেন যে কোন পদক্ষেপটি করবেন, আপনি মানসিকভাবে কোনও পদক্ষেপের কল্পনা করতে পারেন, তারপরে আপনার প্রতিপক্ষের সম্ভাব্য প্রতিক্রিয়া, তারপরে আপনার প্রতিক্রিয়া ইত্যাদি। কোন পদক্ষেপটি সেরা ফলাফলের দিকে নিয়ে যায় তা দেখে আপনি কী করতে হবে তা স্থির করতে পারেন।

গেম ট্রি এ কেবলমাত্র কয়েকটি পথ আপনার জয়ের দিকে নিয়ে যায়। কিছু আপনার প্রতিপক্ষের দ্বারা জয়ের দিকে পরিচালিত করে, আপনি যখন এইরকম শেষের দিকে পৌঁছান, আপনাকে অবশ্যই পূর্ববর্তী নোডে ব্যাকআপ করতে হবে, বা ব্যাকট্র্যাক করতে হবে এবং একটি আলাদা পথ চেষ্টা করতে হবে। আপনি সফল উপসংহার সহ কোনও পথ না পাওয়া পর্যন্ত আপনি এইভাবে গাছটি অন্বেষণ করেন। তারপরে আপনি এই পথটি ধরে প্রথম চালনা করুন।


প্রথম প্রস্থে অনুসন্ধান

প্রস্থের প্রথম সন্ধানটিতে একটি আকর্ষণীয় সম্পত্তি রয়েছে: এটি প্রথমে সমস্ত প্রান্ত খুঁজে পায় যা প্রারম্ভিক বিন্দু থেকে এক প্রান্ত দূরে, তারপরে সমস্ত প্রান্ত যে দুটি প্রান্ত দূরে রয়েছে, ইত্যাদি। আপনি যদি প্রারম্ভিক প্রান্ত থেকে একটি প্রদত্ত প্রান্তের সবচেয়ে ছোটতম পথটি খুঁজতে চেষ্টা করেন তবে এটি কার্যকর। আপনি একটি বিএফএস শুরু করেন এবং আপনি যখন নির্দিষ্ট রেখার সন্ধান করেন, আপনি জানেন যে পথ আপনি এখন পর্যন্ত সন্ধান করেছেন সেটি নোডের সবচেয়ে সংক্ষিপ্ততম পথ। যদি আরও ছোট পথ থাকে তবে বিএফএস এটি ইতিমধ্যে খুঁজে পেয়েছে।

প্রস্থে প্রথম বিস্তৃত অনুসন্ধানটি বিট টরেন্টের মতো পিয়ার টু পিয়ার নেটওয়ার্কে প্রতিবেশী নোডগুলি সন্ধানের জন্য, কাছাকাছি অবস্থানগুলি সন্ধানের জন্য জিপিএস সিস্টেমগুলি, নির্দিষ্ট দূরত্বে লোকদের সন্ধান করার জন্য সামাজিক নেটওয়ার্কিং সাইটগুলি এবং এর মতো জিনিসগুলি ব্যবহার করতে পারে।


113

Http://www.programmerinterview.com/index.php/data-structures/dfs-vs-bfs/ থেকে চমৎকার ব্যাখ্যা

বিএফএসের একটি উদাহরণ

একটি বিএফএস দেখতে কেমন হবে তার একটি উদাহরণ এখানে। এটি লেভেল অর্ডার ট্রি ট্র্যাভারসালের মতো কিছু যেখানে আমরা ITEATIVE পদ্ধতির সাথে কোয়েইউ ব্যবহার করব (বেশিরভাগ ক্ষেত্রেই DEC দিয়ে রিসার্শনটি শেষ হবে)। নম্বরগুলি কোনও বিএফএসে নোডগুলি অ্যাক্সেস করা হয় এমন ক্রমটি উপস্থাপন করে:

এখানে চিত্র বর্ণনা লিখুন

গভীরতার প্রথম অনুসন্ধানে, আপনি মূল থেকে শুরু করুন এবং যতদূর সম্ভব গাছের একটি ডাল অনুসরণ করুন যতক্ষণ না আপনি খুঁজছেন নোড পাওয়া যায় বা আপনি কোনও পাতার নোড (কোনও শিশু নেই এমন নোড) আঘাত করেন। আপনি যদি কোনও পাতার নোডে আঘাত করেন তবে আপনি অনাবৃত শিশুদের সাথে নিকটতম পূর্বপুরুষের অনুসন্ধান চালিয়ে যাচ্ছেন।

ডিএফএসের একটি উদাহরণ

ডিএফএস দেখতে কেমন হবে তার একটি উদাহরণ এখানে's আমি মনে করি বাইনারি গাছের পোস্ট অর্ডার ট্র্যাভারসাল লিফ স্তর থেকে প্রথমে কাজ শুরু করবে। নম্বরগুলি একটি ডিএফএসে নোডগুলি অ্যাক্সেস করা হয় সেই ক্রমের প্রতিনিধিত্ব করে:

এখানে চিত্র বর্ণনা লিখুন

ডিএফএস এবং বিএফএসের মধ্যে পার্থক্য

বিএফএস এবং ডিএফএসের তুলনা করে, ডিএফএসের বড় সুবিধাটি হ'ল বিএফএসের তুলনায় এর অনেক কম মেমরির প্রয়োজনীয়তা রয়েছে, কারণ প্রতিটি স্তরের সমস্ত পয়েন্ট পয়েন্টার সংরক্ষণ করার প্রয়োজন নেই। ডেটা এবং আপনি যা অনুসন্ধান করছেন তার উপর নির্ভর করে ডিএফএস বা বিএফএস উভয়ই সুবিধাজনক হতে পারে।

উদাহরণস্বরূপ, যদি একটি পরিবার গাছ দেওয়া হয় তবে যদি কেউ গাছটির উপরে এমন কাউকে খুঁজছেন যিনি এখনও বেঁচে আছেন, তবে সেই ব্যক্তি গাছের নীচে থাকবে তা ধরে নেওয়া নিরাপদ হবে। এর অর্থ এই যে কোনও বিএফএস শেষ পর্যায়ে পৌঁছাতে খুব দীর্ঘ সময় নেয়। একটি ডিএফএস তবে লক্ষ্যটি আরও দ্রুত খুঁজে পেতে পারে। তবে, কেউ যদি খুব দীর্ঘদিন আগে মারা যাওয়া পরিবারের সদস্যের সন্ধান করেন, তবে সেই ব্যক্তি গাছটির শীর্ষের কাছাকাছি থাকবে। তারপরে, একটি বিএফএস সাধারণত ডিএফএসের চেয়ে দ্রুত হয়। সুতরাং, ডেটা এবং আপনি যা অনুসন্ধান করছেন তার উপর নির্ভর করে উভয়ের সুবিধাগুলি পৃথক হয়।

আরও একটি উদাহরণ ফেসবুক; বন্ধুদের বন্ধুবান্ধব সম্পর্কে পরামর্শ। পরামর্শের জন্য আমাদের তাত্ক্ষণিক বন্ধুবান্ধব প্রয়োজন যেখানে আমরা বিএফএস ব্যবহার করতে পারি। আমরা সবচেয়ে সংক্ষিপ্ততম পথটি খুঁজে পেতে বা চক্র সনাক্ত করতে (পুনরাবৃত্তি ব্যবহার করে) আমরা ডিএফএস ব্যবহার করতে পারি।


"বাইনারি গাছে পোস্ট অর্ডার ট্রভারসাল" কী?
কাইল ডেলানি

8
ডিএফএস কি বিএফএসের চেয়ে স্বল্পতম পথ পাবে? আমি মনে করি এটি অন্যদিকে। আমি মনে করি বিএফএস সবচেয়ে সংক্ষিপ্ত পথ পাবে। তাই না?
নবীন গ্যাব্রিয়েল

1
আপনি যদি উত্সটি জমা দিয়েছিলেন তবে আরও প্রশংসা করতেন। তুলনার অংশটি নরসিংহ করুণাঞ্চি দ্বারা "জাভাতে সহজতর উপাত্ত কাঠামো" থেকে নেওয়া হয়েছে।
লারেন্টোগ্রো-গ্রোথলেয়ার্ন

অবশ্যই আমি এটি আপডেট করতে পারি, তবে এখানে কারও প্রশংসা আশা করছি না। শুধু আমার মতো দরিদ্র টেকিকে সহায়তা করতে চাই।
কানগাভেলু সুগুমার

1
কাইলডেলানিতে তিনটি অর্ডার রয়েছে যাতে আপনি একটি গাছকে পেরিয়ে যেতে পারেন - প্রি-অর্ডার, ইনর্ডার এবং পোস্টর্ডার। এগুলি যথাক্রমে উপসর্গ ইনফিক্স এবং পোস্টফিক্স স্বরলিপি অনুসারে। আপনি যখন গাছটিকে নীচে নামাবেন এবং তারপরে ব্যাকআপ নেবেন, আপনি যদি কোনও নোড প্রথমবার বেছে নেন তবে আপনি এটি প্রাক-অর্ডারের সাথে দ্বিতীয়বার দেখার পরে যদি এটি অন্তর্বর্তী হয়, যদি শেষ বার এটি পোস্টর্ডার হয়। আপনি আসলে এইভাবে গাছটিকে সিরিয়ালাইজ করতে পারেন এবং যতক্ষণ আপনি অর্ডারটি ব্যবহার করেছেন তা মনে রাখলে আপনি সিরিয়ালীকরণ থেকে গাছটি পুনর্নির্মাণ করতে পারেন।
ডেভ

43

গাছের গভীরতা পরিবর্তিত হতে পারে তখন প্রস্থের প্রথম অনুসন্ধানটি সর্বোত্তম পন্থা হয় এবং সমাধানের জন্য আপনার কেবল গাছের অংশ অনুসন্ধান করতে হবে। উদাহরণস্বরূপ, প্রারম্ভিক মান থেকে চূড়ান্ত মান পর্যন্ত সংক্ষিপ্ততম পথটি সন্ধান করা বিএফএস ব্যবহারের জন্য ভাল জায়গা।

যখন আপনাকে পুরো গাছটি অনুসন্ধান করার দরকার হয় তখন গভীরতার প্রথম অনুসন্ধানটি সাধারণত ব্যবহৃত হয়। এটি বিএফএসের চেয়ে কার্যকর (পুনরাবৃত্তির সাহায্যে) প্রয়োগ করা সহজ এবং এর জন্য কম স্টেটের প্রয়োজন: বিএফএসের জন্য আপনি পুরো 'সীমান্ত' সংরক্ষণ করতে চান, ডিএফএসের জন্য কেবলমাত্র আপনার বর্তমান উপাদানটির মূল নোডের তালিকা সংরক্ষণ করতে হবে।


26

ডিএফএস বিএফএসের চেয়ে বেশি স্থান-দক্ষ, তবে এটি অপ্রয়োজনীয় গভীরতায় যেতে পারে।

তাদের নামগুলি প্রকাশ করছে: যদি একটি বৃহত্তর প্রস্থ (যেমন বড় শাখাগুলি ফ্যাক্টর) থাকে তবে খুব সীমাবদ্ধ গভীরতা (উদাহরণস্বরূপ সীমিত সংখ্যক "চালগুলি") থাকে তবে ডিএফএস বিএফএসের চেয়ে বেশি পছন্দনীয় হতে পারে।


আইডিডিএফএসে

এটি উল্লেখ করা উচিত যে একটি কম পরিচিত বৈকল্পিক যা ডিএফএসের স্থান দক্ষতার সাথে সম্মিলিত হয়, তবে (সংশ্লেষে) বিএফএসের লেভেল-অর্ডার পরিদর্শন, পুনরুক্তি গভীরতর গভীরতা-প্রথম অনুসন্ধান । এই অ্যালগরিদম কিছু নোডকে পুনর্বিবেচনা করে তবে এটি কেবল অ্যাসিপোটোটিক পার্থক্যের একটি ধ্রুবক উপাদানকে অবদান রাখে।


1
এটি অগত্যা আরও কার্যকর দক্ষ নয় .. উদাহরণস্বরূপ কোনও পাথ গ্রাফ বিবেচনা করুন।
আরবি

16

আপনি যখন প্রোগ্রামার হিসাবে এই প্রশ্নের কাছে যান, তখন একটি কারণ উপস্থিত থাকে: যদি আপনি পুনরাবৃত্তি ব্যবহার করছেন, তবে গভীরতা-প্রথম অনুসন্ধানটি কার্যকর করা সহজ , কারণ আপনাকে এক্সপ্লোর করার জন্য নোডগুলি সহ কোনও অতিরিক্ত ডেটা কাঠামো বজায় রাখার দরকার নেই।

আপনি যদি নোডগুলিতে "ইতিমধ্যে পরিদর্শন করা" তথ্য সংরক্ষণ করেন তবে অ-ওরিয়েন্টেড গ্রাফের জন্য এখানে গভীরতার প্রথম অনুসন্ধান:

def dfs(origin):                               # DFS from origin:
    origin.visited = True                      # Mark the origin as visited
    for neighbor in origin.neighbors:          # Loop over the neighbors
        if not neighbor.visited: dfs(next)     # Visit each neighbor if not already visited

যদি একটি পৃথক ডেটা কাঠামোতে "ইতিমধ্যে পরিদর্শন করা" তথ্য সংরক্ষণ করা থাকে:

def dfs(node, visited):                        # DFS from origin, with already-visited set:
    visited.add(node)                          # Mark the origin as visited
    for neighbor in node.neighbors:            # Loop over the neighbors
        if not neighbor in visited:            # If the neighbor hasn't been visited yet,
            dfs(node, visited)                 # then visit the neighbor
dfs(origin, set())

এটিকে প্রস্থ-প্রথম অনুসন্ধানের সাথে বিপরীতে করুন যেখানে আপনাকে দেখার জন্য নোডের তালিকার জন্য পৃথক ডেটা কাঠামো বজায় রাখা দরকার, যাই হোক না কেন।


15

বিএফএসের একটি গুরুত্বপূর্ণ সুবিধা হ'ল এটি অপ্রকাশিত গ্রাফের যে কোনও দুটি নোডের মধ্যে সবচেয়ে সংক্ষিপ্ততম পথটি খুঁজে পেতে ব্যবহার করা যেতে পারে। যদিও আমরা এর জন্য ডিএফএস ব্যবহার করতে পারি না


5

বিএফএসের জন্য, আমরা ফেসবুকের উদাহরণ বিবেচনা করতে পারি। আমরা অন্যান্য অন্যান্য প্রোফাইলের প্রোফাইল থেকে এফবি প্রোফাইল থেকে বন্ধুদের যুক্ত করার পরামর্শ পাই। ধরা যাক এ-> বি, বি-> ই এবং বি-> এফ, সুতরাং এ ই এবং এফ এর জন্য পরামর্শ পাবে তারা দ্বিতীয় স্তরের অবধি পড়তে অবশ্যই বিএফএস ব্যবহার করবে। ডিএফএস আরও দৃশ্যের উপর ভিত্তি করে যেখানে আমরা উত্স থেকে গন্তব্য পর্যন্ত থাকা তথ্যের উপর ভিত্তি করে কিছু পূর্বাভাস দিতে চাই। দাবা বা সুডোকু সম্পর্কে ইতিমধ্যে উল্লেখ করা হয়েছে। আমার এখানে ভিন্ন জিনিসটি হ'ল, আমি বিশ্বাস করি যে ডিএফএস সবচেয়ে সংক্ষিপ্ত পথের জন্য ব্যবহার করা উচিত কারণ ডিএফএস প্রথমে পুরো পথটি coverেকে দেবে তারপরে আমরা সবচেয়ে ভাল সিদ্ধান্ত নিতে পারি। তবে বিএফএস যেমন লোভীর পদ্ধতির ব্যবহার করবে তাই এটি এর সবচেয়ে সংক্ষিপ্ত পথের মতো দেখায় তবে চূড়ান্ত ফলাফলটি ভিন্ন হতে পারে। আমার বোঝাপড়াটি ভুল কিনা তা আমাকে জানান।


এখন আমার মন্তব্যটি কিছুটা দেরিতে। তবে সংক্ষিপ্ততম পথটি খুঁজে পেতে, বিএফএস ব্যবহার করা উচিত। তবে, "ডিএফএস হ'ল দৃশ্যের উপর ভিত্তি করে যেখানে আমরা উত্স থেকে গন্তব্য পর্যন্ত ডেটা ভিত্তিক কিছু পূর্বাভাস দিতে চাই" আপনি বলেছেন একটি উজ্জ্বল জিনিস! যশ !!
ওসকারজিটো

4

কিছু অ্যালগরিদম কাজ করার জন্য ডিএফএসের (বা বিএফএস) বিশেষ বৈশিষ্ট্যের উপর নির্ভর করে। উদাহরণস্বরূপ 2-সংযুক্ত উপাদানগুলি অনুসন্ধানের জন্য হপকক্রফ্ট এবং টারজান অ্যালগরিদম এই সত্যটির সুবিধা গ্রহণ করে যে ডিএফএসের দ্বারা দেখা প্রতিটি নোড বর্তমানে মূলত অন্বেষিত নোডের পথে রয়েছে।


4

নীচে আপনি যা জিজ্ঞাসা করছেন তার একটি বিস্তৃত উত্তর।

সহজ অর্থে:

ব্রাডথ ফার্স্ট সার্চ (বিএফএস) অ্যালগরিদম, এর নাম "ব্রেডথ" থেকে নোডের আউট প্রান্তগুলির মধ্য দিয়ে একটি নোডের সমস্ত প্রতিবেশীকে আবিষ্কার করে তারপরে এটি পূর্বের উল্লিখিত প্রতিবেশীদের অপ্রত্যাশিত প্রতিবেশীদের তাদের বাহির প্রান্তের মাধ্যমে আবিষ্কার করে এবং সমস্ত কিছু অবধি অরিজিনাল উত্স থেকে আগত নোডগুলি পরিদর্শন করা হয় (আমরা অবিরত থাকতে পারি এবং যদি অপ্রকাশিত নোডগুলি অবশিষ্ট থাকে তবে আমরা অন্য একটি উত্স উত্স নিতে পারি)। এজন্য এটি প্রান্তের ওজন সমান হলে নোড (অরিজিনাল উত্স) থেকে অন্য নোডের সংক্ষিপ্ততম পথ (যদি থাকে তবে) খুঁজে পেতে ব্যবহার করা যেতে পারে।

ডিপথ ফার্স্ট সার্চ (ডিএফএস) অ্যালগরিদম, এর নাম "গভীরতা" থেকে, সন্ধান পাওয়া অতি সম্প্রতি পাওয়া নোড x এর অপ্রত্যাশিত প্রতিবেশীদের তার প্রান্তগুলির মধ্য দিয়ে আবিষ্কার করে। যদি নোড এক্স থেকে অপ্রত্যাশিত প্রতিবেশী না থাকে তবে নোডের অপ্রত্যাশিত প্রতিবেশীদের আবিষ্কারের জন্য অ্যালগরিদম ব্যাকট্র্যাকস (এর আউট প্রান্তগুলির মধ্য দিয়ে) যেখান থেকে নোড এক্স আবিষ্কৃত হয়েছিল এবং অন্যদিকে, যতক্ষণ না উত্স উত্স থেকে আগত সমস্ত নোড পরিদর্শন করা হয় (যদি অবিরত নোড থাকে এবং আরও কিছু অবশিষ্ট থাকে তবে আমরা চালিয়ে যেতে পারি এবং অন্য কোনও উত্স উত্স নিতে পারি)।

বিএফএস এবং ডিএফএস উভয়ই অসম্পূর্ণ হতে পারে। উদাহরণস্বরূপ, যদি কোনও নোডের ব্রাঞ্চিং ফ্যাক্টরটি অসীম হয়, বা সংস্থানসমূহ (মেমরি) সমর্থন করার জন্য খুব বড় (যেমন পরবর্তী নোডগুলি সন্ধান করার সময়) অনুসন্ধান করা কীটি একটি দূরত্বে থাকতে পারে তবুও বিএফএস সম্পূর্ণ হয় না মূল উত্স থেকে কয়েকটি প্রান্ত। এই অনন্ত শাখা ফ্যাক্টরটি আবিষ্কারের জন্য প্রদত্ত নোড থেকে অসীম পছন্দ (প্রতিবেশী নোড) এর কারণ হতে পারে। যদি গভীরতা অসীম হয়, বা উত্সগুলির জন্য খুব বড় (মেমোরি) সমর্থন করে (যেমন পরবর্তী নোডগুলি সন্ধান করার সময়), তবে ডিএফএস সম্পূর্ণ হয় না যদিও সন্ধানী কীটি মূল উত্সের তৃতীয় প্রতিবেশী হতে পারে। এই অসীম গভীরতা এমন কোনও পরিস্থিতির কারণেই হতে পারে যেখানে প্রতিটি নোডের জন্য অ্যালগোরিদম আবিষ্কার হয়, কমপক্ষে একটি নতুন পছন্দ (প্রতিবেশী নোড) যা আগে দেখা না গিয়েছিল।

অতএব, বিএফএস এবং ডিএফএস ব্যবহার করার সময় আমরা সিদ্ধান্তে পৌঁছাতে পারি। মনে করুন আমরা একটি পরিচালনাযোগ্য সীমিত শাখা ফ্যাক্টর এবং একটি পরিচালনাযোগ্য সীমিত গভীরতা নিয়ে কাজ করছি। মূল উত্স থেকে কিছু প্রান্তের পরে যদি অনুসন্ধান করা নোড অগভীর অর্থাৎ পৌঁছনীয় হয় তবে বিএফএস ব্যবহার করা ভাল। অন্যদিকে, যদি অনুসন্ধানের নোডটি গভীর উত্স থেকে মূল উত্স থেকে প্রচুর প্রান্তের পরে পৌঁছতে সক্ষম হয় তবে ডিএফএস ব্যবহার করা ভাল।

উদাহরণস্বরূপ, একটি সোশ্যাল নেটওয়ার্কে যদি আমরা নির্দিষ্ট ব্যক্তির অনুরূপ আগ্রহী ব্যক্তিদের সন্ধান করতে চাই, তবে আমরা এই ব্যক্তির কাছ থেকে একটি উত্স উত্স হিসাবে বিএফএস প্রয়োগ করতে পারি, কারণ বেশিরভাগ লোকেরা তার প্রত্যক্ষ বন্ধু বা বন্ধু বন্ধু হিসাবে থাকবেন একজন বা দুটি প্রান্ত দূরে। অন্যদিকে, আমরা যদি কোনও নির্দিষ্ট ব্যক্তির সম্পূর্ণ ভিন্ন স্বার্থের লোকদের সন্ধান করতে চাই, তবে আমরা এই ব্যক্তির কাছ থেকে একটি উত্সগত উত্স হিসাবে ডিএফএস প্রয়োগ করতে পারি, কারণ বেশিরভাগই এই লোকেরা তাঁর কাছ থেকে অর্থাত্ বন্ধু বন্ধু হিসাবে থাকবেন mostly .... অর্থাত্ অনেকগুলি কিনারা।

বিএফএস এবং ডিএফএসের অ্যাপ্লিকেশনগুলির মধ্যেও প্রতিটি অনুসন্ধানের প্রক্রিয়াটির কারণে আলাদা হতে পারে। উদাহরণস্বরূপ, আমরা বিএফএস (ব্রাঞ্চিং ফ্যাক্টরটি ম্যানেজমেন্টযোগ্য বলে ধরে নেওয়া) বা ডিএফএস (গভীরতা পরিচালনাযোগ্য বলে ধরে নিই) ব্যবহার করতে পারি যখন আমরা কেবল একটি নোড থেকে অন্য নোডে পুনঃব্যবহারযোগ্যতা পরীক্ষা করতে চাই যেখানে সেই নোডটি কোথায় থাকতে পারে তার কোনও তথ্য নেই। এছাড়াও উভয়ই গ্রাফের টপোলজিকাল বাছাইয়ের মতো একই কাজগুলি সমাধান করতে পারে (যদি এটি থাকে)। নোড (অরিজিনাল উত্স) থেকে অন্যটিতে ইউনিট ওজন প্রান্তের সাথে সংক্ষিপ্ততম পথটি খুঁজে পেতে বিএফএস ব্যবহার করা যেতে পারে। অন্যদিকে, ডিএফএসকে অ্যাসাইক্লিক গ্রাফের দুটি নোডের মধ্যে দীর্ঘতম পথ আবিষ্কার করার মতো গভীরতায় যাওয়ার প্রকৃতির কারণে সমস্ত পছন্দ নিঃশেষ করার জন্য ব্যবহার করা যেতে পারে। এছাড়াও ডিএফএস, একটি গ্রাফে চক্র সনাক্তকরণের জন্য ব্যবহার করা যেতে পারে।

শেষ পর্যন্ত যদি আমাদের কাছে অসীম গভীরতা এবং অসীম শাখা প্রশাখা ফ্যাক্টর থাকে তবে আমরা Iterative গভীরকরণ অনুসন্ধান (আইডিএস) ব্যবহার করতে পারি।


2

ডিএফএস এবং বিএফএসের বৈশিষ্ট্য অনুসারে। উদাহরণস্বরূপ, আমরা যখন সবচেয়ে সংক্ষিপ্ততম পথটি খুঁজতে চাই। আমরা সাধারণত বিএফএস ব্যবহার করি, এটি 'সংক্ষিপ্ততম' এর গ্যারান্টি দিতে পারে। তবে ডিএফএস কেবল গ্যারান্টি দিতে পারে যে আমরা এই বিন্দু থেকে আসতে পারি যে পয়েন্টটি অর্জন করতে পারে, 'সংক্ষিপ্ততম' গ্যারান্টি দিতে পারে না।


2

আমি মনে করি এটি নির্ভর করে আপনি কোন সমস্যার মুখোমুখি হচ্ছেন on

  1. সরল গ্রাফের সবচেয়ে সংক্ষিপ্ত পথ -> বিএফএস
  2. সমস্ত সম্ভাব্য ফলাফল -> ডিএফএস
  3. গ্রাফে অনুসন্ধান করুন (ট্রি, ট্রিট, গ্রাফিককেও গ্রাফ হিসাবে বিবেচনা করুন) -> ডিএফএস ....

আপনি যদি তালিকার আগে একটি খালি লাইন যুক্ত করেন তবে উত্তরটি আরও ভাল দেখাচ্ছে।
মন্টোনরো

1

নোডগুলি প্রক্রিয়া করার সাথে সাথে গভীরতা-প্রথম অনুসন্ধানগুলি স্ট্যাক ব্যবহার করে, ব্যাকট্র্যাকিং ডিএফএসের সাথে সরবরাহ করা হয়। যেহেতু নর্থগুলি কীভাবে প্রসেস করা হয় তা ট্র্যাক রাখতে ব্রেডথ-ফার্স্ট অনুসন্ধানগুলি একটি স্ট্যাক নয়, একটি স্ট্যাক নয়, একটি সারি ব্যবহার করে, বিএফএসের সাথে ব্যাকট্রাকিং সরবরাহ করা হয় না।


1

যখন গাছের প্রস্থ খুব বেশি হয় এবং গভীরতা কম ব্যবহার ডিএফএস হয় কারণ পুনরাবৃত্তির স্ট্যাক উপচে পড়বে না width যখন প্রস্থ কম থাকে এবং গাছটি পেরোনোর ​​জন্য গভীরতা খুব বড় হয় তখন বিএফএস ব্যবহার করুন।


0

নির্দিষ্ট ক্ষেত্রে ডিএফএসের চেয়ে বিএফএস আরও ভাল তা প্রমাণ করার জন্য এটি একটি উত্তম উদাহরণ। https://leetcode.com/problems/01-matrix/

সঠিকভাবে প্রয়োগ করা হলে, উভয় সমাধানের বর্তমান কক্ষ +1 এর চেয়ে বেশি দূরত্ব থাকা ঘরগুলি ঘুরে দেখা উচিত। তবে ডিএফএস অদক্ষ এবং বারবার একই কক্ষ পরিদর্শন করেছে যার ফলে হে (এন * এন) জটিলতা রয়েছে।

উদাহরণ স্বরূপ,

1,1,1,1,1,1,1,1, 
1,1,1,1,1,1,1,1, 
1,1,1,1,1,1,1,1, 
0,0,0,0,0,0,0,0,

0

এটি যে পরিস্থিতিতে ব্যবহৃত হয় তার উপর নির্ভর করে Whenever যখনই আমাদের কোনও গ্রাফ ট্র্যাভার করার সমস্যা হয় আমরা কোনও উদ্দেশ্যে এটি করি। যখন অপ্রকাশিত গ্রাফের মধ্যে সবচেয়ে সংক্ষিপ্ত পথটি খুঁজে পাওয়ার বা কোনও গ্রাফ দ্বিপক্ষীয় কিনা তা খুঁজে পাওয়ার সমস্যা রয়েছে, আমরা বিএফএস ব্যবহার করতে পারি। চক্র সনাক্তকরণের সমস্যায় বা ব্যাকট্র্যাকিংয়ের জন্য প্রয়োজনীয় কোনও যুক্তির জন্য, আমরা ডিএফএস ব্যবহার করতে পারি।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.