গ্রাফ অনুসন্ধান: প্রস্থ-প্রথম বনাম, গভীরতা-প্রথম


78

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

এখন, একে অপরের কোনও সুবিধা আছে?

আমি যেগুলি সম্পর্কে ভাবতে পারি:

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

আমি কি কিছু মিস করেছি বা এটি বেশিরভাগ ব্যক্তিগত পছন্দে নেমে আসে?

উত্তর:


43

আমি স্ট্যাক ওভারফ্লো থেকে hstoerr দ্বারা একটি উত্তর উদ্ধৃত করতে চাই যা সমস্যাটি সুন্দরভাবে কভার করে:

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

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

রাফা ডাউগার্ড আরও মন্তব্য করেছেন:

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


5
আমি বুঝতে পারি না কেন এই উত্তরটির 27 টি আপভোট রয়েছে এবং এটি হ'ল অন্য 2 টি উত্তরের সংশ্লেষ, যা উপায় সম্পর্কে কেবল সাধারণ চিন্তাভাবনা ...
nbro

37

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


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

এই উত্তরটি 20 টি উপাখ্যানের প্রাপ্য নয়। প্রশ্নটি 2 অ্যালগরিদমের সাধারণ ব্যবহার সম্পর্কে এবং কোনও নির্দিষ্ট ব্যবহার সম্পর্কে নয়।
এনবিরো

31

(আমি এটি একটি সম্প্রদায়ের উইকি তৈরি করেছি Please

যদি

  • b
  • d
  • hdh

তারপর

  • ডিএফএসে লাগেO(bh)O(h)
  • বিএফএসে লাগেO(bd)O(bd)
  • O(bd)O(d)

কারণ বেছে নেওয়ার

  • DFS
    • যাইহোক পুরো গাছ অবশ্যই দেখতে হবে
    • তোমরা কি জান , উত্তর মাত্রাd
    • উত্তরটি মূলের নিকটতম কিনা সে বিষয়ে চিন্তা করবেন না
  • এই বি
    • উত্তর শিকড় কাছাকাছি
    • আপনি যে উত্তরটি মূলের নিকটতম চান তা চাইবেন
    • একাধিক কোর / প্রসেসর রয়েছে
  • IDDFS
    • আপনি বিএফএস চান, পর্যাপ্ত স্মৃতি নেই, তবে কিছুটা ধীর গতিতে গ্রহণযোগ্য

আইডিডিএফএস = পুনরাবৃত্তি গভীরতার গভীরতা-প্রথম অনুসন্ধান


1
এটি একটি দুর্দান্ত উত্তর। আমি লক্ষ করছি যদিও প্রশ্ন গ্রাফ সম্পর্কে জিজ্ঞাসা করার সময়, এই উত্তরটি গাছগুলিকে বোঝায়। একটি গাছ অবশ্যই একটি গ্রাফ, এবং এটি শব্দটি প্রতিস্থাপন করা যেতে পারে ... তবে কীভাবে h, "গাছের উচ্চতা"। এটি কি "গ্রাফের উচ্চতা" তে সরাসরি অনুবাদ করে?
ব্যবহারকারী 2023370

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

যোগ করা যেতে পারে এমন আরও একটি বিষয় হ'ল ডিএফএস স্ট্যাক ব্যবহার করে যেখানে বিএফএস সারি ব্যবহার করে।
কার্তিক বালাগুরু

17

একটি দৃশ্য (সংক্ষিপ্ততম পথটি সন্ধান করা ব্যতীত, যা ইতিমধ্যে উল্লেখ করা হয়েছে) যেখানে আপনাকে সঠিক প্রোগ্রাম পেতে অন্যের থেকে বেছে নিতে হবে অসীম গ্রাফগুলি:

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

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


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

15

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

প্রস্থের প্রথম অনুসন্ধানের একটি দুর্দান্ত বোনাস হ'ল এটি সবচেয়ে স্বল্পতম পাথ (খুব কম কিনার অর্থে) সন্ধান করে যা আগ্রহী বা নাও হতে পারে।

যদি আপনার গড় নোডের র‌্যাঙ্ক (প্রতিবেশীর সংখ্যা) নোডের সংখ্যার তুলনায় উচ্চ হয় (যেমন গ্রাফটি ঘন) তবে প্রস্থে প্রথমের বিশাল সারি থাকবে এবং গভীরতার প্রথমটিতে ছোট স্ট্যাক থাকবে। বিরল গ্রাফগুলিতে পরিস্থিতি বিপরীত হয়। অতএব, স্মৃতি যদি সীমাবদ্ধ ফ্যাক্টর হয় তবে গ্রাফের আকারটি হ'ল গ্রাফের আকারটি আপনার অনুসন্ধান কৌশল চয়ন করতে পারে inform


বিএফএসে সারির দৈর্ঘ্য এবং ডিএফএসে স্ট্যাকের উচ্চতা বাস্তবায়নের উপর অনেক বেশি নির্ভর করে। যদি ডিএফএসের ক্ষেত্রে আপনি সর্বদা স্ট্যাকের উপরে পুরো প্রতিবেশী সম্প্রদায়কে প্রসারিত করেন তবে এটি অনেক বেড়ে যায়, বিশেষত যখন গ্রাফটি ঘন হয়। কেবল রেফারেন্সে ঠেলাঠেলি যা ডিফএস যখন পুনরাবৃত্তি থেকে ফিরে আসে তখন অনেক জায়গাগুলি সাশ্রয় করে কোথায় যেতে হবে tells
uli

3

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

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


1

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

  • সেতু এবং স্পষ্ট বক্তব্য পয়েন্টগুলি (পুনঃনির্দেশিত গ্রাফের জন্য) সন্ধান করুন
  • চক্র সনাক্তকরণ
  • দৃ strongly়ভাবে সংযুক্ত উপাদানগুলি (টার্জনের অ্যালগোরিদম) সন্ধান করুন

বিএফএসের সাহায্যে আপনি উত্স নোড এবং গ্রাফের অন্য কোনও নোডের মধ্যে সংক্ষিপ্ততম পাথগুলি খুঁজে পেতে পারেন।

সিএলআরএস-এর গ্রাফ অ্যালগরিদম অধ্যায়টি ডিএফএস এবং বিএফএসের এই বৈশিষ্ট্যগুলি খুব সুন্দরভাবে পূরণ করে।


-2

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

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

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

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

সুতরাং, আমার জন্য প্রাকৃতিক ঘটনাটি সত্যিকারের জীবনের প্রচারের মডেলটির সাথে (ট্রান্সভার্সিং) সবচেয়ে ভাল মেলে এমন মিথ্যার মধ্যে পার্থক্য।


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

প্রশ্নের সবচেয়ে বেশি সংযুক্ত অংশটি ন্যূনতম বিস্তৃত গাছ, সংক্ষিপ্ততম পথ এবং এটির জন্য অ্যালগরিদমকে অভিযোজিত করা এবং এটি বলা যে কিছু প্রাকৃতিক ঘটনা বিএফএস দ্বারা পুনরুত্পাদনযোগ্য, যখন ডিএফএস
user5193682

1
বিএফএস এবং ডিএফএসের সাথে সম্পর্কিত কি তা প্রশ্ন করছে না isn't এটি বিস্তৃত গাছ বা সংক্ষিপ্ততম পাথগুলি বা কীভাবে "প্রাকৃতিক ঘটনাকে পুনরুত্পাদন করতে হবে" সন্ধানের বিষয়ে জিজ্ঞাসা করছে না।
ডেভিড রিচার্বি

এটি সুবিধার জন্য জিজ্ঞাসা। অন্য কেউ যখন শারীরিক ঘটনাকে মডেল করতে পারে তবে অন্যটি করতে পারে না, যদি আপনাকে এই ঘটনাটি মডেল করার দরকার হয় তবে এটির একটি সুবিধা। আমি মনে করি আপনি '
বেনিফিট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.