ডিএফএস এবং বিএফএস ও (ভি + ই) উভয়ের সময়ের জটিলতা কেন?


132

বিএফএসের জন্য প্রাথমিক অ্যালগোরিদম:

set start vertex to visited

load it into queue

while queue not empty

   for each edge incident to vertex

        if its not visited

            load into queue

            mark vertex

সুতরাং আমি সময় জটিলতা হবে মনে করি:

v1 + (incident edges) + v2 + (incident edges) + .... + vn + (incident edges) 

যেখানে vপ্রান্তবিন্দু হয় 1থেকেn

প্রথমত, আমি কি সঠিক বলেছি? দ্বিতীয়ত, এটি কীভাবে সত্য O(N + E)এবং দুর্দান্ত কারণ হিসাবে অন্তর্নিহিত। ধন্যবাদ

উত্তর:


268

আপনার যোগফল

v1 + (incident edges) + v2 + (incident edges) + .... + vn + (incident edges)

হিসাবে আবার লিখতে পারেন

(v1 + v2 + ... + vn) + [(incident_edges v1) + (incident_edges v2) + ... + (incident_edges vn)]

এবং প্রথম গ্রুপটি O(N)যখন অন্যটি হয় O(E)


1
তবে প্রতিটি ভার্টেক্স অবশ্যই সারি থেকে বের করা উচিত এবং এটি লগ (| প্রশ্ন |) এই অংশটি সম্পর্কে কী বলা যায়?
ইওলা

3
লগ (| প্রশ্ন |) <লগ (এন) <এন তাই আপনি নিরাপদে অ্যাসিম্পটোটিক শব্দটি উপেক্ষা করতে পারেন
মিহাই মারুসেয়াক

2
যদি একটি সংলগ্ন তালিকায় থাকে তবে প্রতিটি শীর্ষবিন্দুটি অন্যান্য সমস্ত শীর্ষে সংযুক্ত থাকে তবে জটিলতাটি O (V + E) = O (V + V ^ 2) = O (V ^ 2) এর সমতুল্য হবে। E = V ^ 2 কারণ সর্বাধিক সংখ্যা = ভি ^ 2।
সর্বাধিক

আপনার উত্তর অনুসারে, জটিলতা ও (V + 2E) হয়ে উঠবে না? যেহেতু প্রতিটি প্রান্তের অন্য প্রান্তের সাথে একটি সাধারণ প্রান্ত থাকতে পারে?
করানস্কি

2
ধ্রুব পদগুলি বাদ দেওয়া যেতে পারে।
মিহাই মারুসেয়াক

41

DFS (বিশ্লেষণ):

  • একটি ভার্টেক্স / প্রান্তের লেবেল সেট করা / গ্রহণ করা লাগে O(1) সময়
  • প্রতিটি ভার্টেক্স দুটিবার লেবেলযুক্ত
    • একবার ইউএনএক্সপ্লোরড হিসাবে
    • একবার ভিজিট করা হয়েছে
  • প্রতিটি প্রান্ত দুইবার লেবেলযুক্ত
    • একবার ইউএনএক্সপ্লোরড হিসাবে
    • একবার ডিসকভারি বা ব্যাক হিসাবে
  • পদ্ধতির ইভেন্টএডজগুলি প্রতিটি শীর্ষবিন্দুর জন্য একবার ডাকা হয়
  • ডিএফএস O(n + m)সময় মতো চালায় তবে গ্রাফটি সংলগ্ন তালিকা কাঠামোর দ্বারা প্রতিনিধিত্ব করা হয়
  • মনে আছে Σv deg(v) = 2m

এই বি (বিশ্লেষণ):

  • ভার্টেক্স / প্রান্তের লেবেল সেট করা / পাওয়ার জন্য ও (1) সময় লাগে
  • প্রতিটি ভার্টেক্স দুটিবার লেবেলযুক্ত
    • একবার ইউএনএক্সপ্লোরড হিসাবে
    • একবার ভিজিট করা হয়েছে
  • প্রতিটি প্রান্ত দুইবার লেবেলযুক্ত
    • একবার ইউএনএক্সপ্লোরড হিসাবে
    • একবার ডিসকভারি বা ক্রস হিসাবে
  • প্রতিটি ভার্টেক্স একবার অনুক্রমের মধ্যে প্রবেশ করানো হয় Li
  • পদ্ধতির ইভেন্টএডজগুলি প্রতিটি শীর্ষবিন্দুর জন্য একবার ডাকা হয়
  • বিএফএস চলেছে O(n + m) সময় মতো চলতে থাকে তবে গ্রাফটি সংলগ্ন তালিকা কাঠামোর দ্বারা প্রতিনিধিত্ব করা হয়
  • মনে আছে Σv deg(v) = 2m

টিএনএক্স সম্পাদনার জন্য আমি এখানে নতুন তাই আমি এখনও সম্পাদনা স্ক্রিনটি দিয়ে পরিচালনা করার চেষ্টা করি :)
থিনিউইন

1
উল্লেখ করে উল্লেখ করার জন্য ধন্যবাদ যে গ্রাফগুলি সংলগ্ন তালিকা কাঠামোর দ্বারা প্রতিনিধিত্ব করা উচিত, এটি আমাকে ডিফএসে ও (এন + এম) কেন বানাচ্ছে, আমি মনে করব এটি ও (এন + 2 মি) কারণ প্রতিটি প্রান্ত দু'বার বিভ্রান্ত হয়েছে ব্যাকট্র্যাকিং দ্বারা।
mib1413456

22

খুব আনুষ্ঠানিকতা ছাড়াই খুব সরলীকৃত: প্রতিটি প্রান্তটি ঠিক দু'বার বিবেচনা করা হয়, এবং প্রতিটি নোড হুবহু একবারে প্রক্রিয়া করা হয়, সুতরাং জটিলতাটি প্রান্তের সংখ্যা পাশাপাশি শীর্ষে সংখ্যাগুলির ধ্রুবক একাধিক হতে হবে।


আরও ব্যাখ্যা ব্যতিরেকে গণিতের স্বরলিপি চেয়ে বোঝা অনেক সহজ যদিও এটি গুগলের জন্য।
mLstudent33

11

সময় জটিলতার O(E+V)পরিবর্তে হয়O(2E+V) কারণ সময় সময় জটিলতা যদি ^ 2 + 2n + 7 হয় তবে এটি ও (এন ^ 2) হিসাবে লেখা হয়।

সুতরাং, ও (2 ই + ভি) ও (ই + ভি) হিসাবে লেখা হয়েছে

কারণ n ^ 2 এবং n এর মধ্যে পার্থক্য রয়েছে তবে n এবং 2n এর মধ্যে নয়।


@ আম_আই_হেল্পফুল কেউ উপরে 2 ই-এর জন্য বড়-ওহ শিরোনামে জিজ্ঞাসা করছেন .... যে কারণে 2 সময়কে জটিলতায় বিবেচনা করা হয় না।
ধ্রুব গুপ্ত

@ আম_আই_হেল্পফুল কেবল আমার উত্তরের পোস্টটি দেখুন .... সেখানে কেহে সিএআই নামের ব্যবহারকারী লিখেছেন "আমি মনে করি প্রতিটি প্রান্ত দু'বার বিবেচনা করা হয়েছে এবং প্রতিটি নোড একবার দেখা হয়েছে, সুতরাং মোট সময়ের জটিলতা ও (2E + V) হওয়া উচিত )। " তো আমি একরকম উত্তর দিয়েছি .... বুঝেছি !!!
ধ্রুবম গুপ্ত

আমি আমার downvote মুছে শুধুমাত্র কারণ আপনি আপনার উত্তর, সম্পাদিত
Am_I_Helpful

3

আমি মনে করি প্রতিটি প্রান্ত দু'বার বিবেচনা করা হয়েছে এবং প্রতিটি নোড একবার পরিদর্শন করা হয়েছে, সুতরাং মোট সময়ের জটিলতা ও (2E + V) হওয়া উচিত।


এমনকি আমিও একই অনুভব করি। কেউ কি এ সম্পর্কে আরও ব্যাখ্যা দিতে পারে?
চৈতন্য

12
বিগ হে বিশ্লেষণ ধ্রুবককে উপেক্ষা করে। ও (2 ই + ভি) হ'ল ও (ই + ভি)।
হেম

3

এটির একটি স্বজ্ঞাত ব্যাখ্যা কেবল একটি একক লুপকে বিশ্লেষণ করে:

  1. একটি শীর্ষবিন্দু দেখুন -> ও (1)
  2. সমস্ত ঘটনার প্রান্তে লুপের জন্য একটি -> ও (ই) যেখানে e একটি প্রদত্ত শীর্ষবিন্দুতে বহু সংখ্যক প্রান্তের ঘটনা v।

সুতরাং একক লুপের মোট সময় হ'ল ও (1) + ও (ই)। এখন প্রতিটি ভার্টেক্সের জন্য এটি যোগ করুন কারণ প্রতিটি শীর্ষবিন্দু একবার দেখা হয়েছে। এই দেয়

For every V
=> 

    O(1)
    +

    O(e)

=> O(V) + O(E)

2

সংক্ষিপ্ত তবে সাধারণ ব্যাখ্যা:

আমি সবচেয়ে খারাপ ক্ষেত্রে আপনাকে সমস্ত প্রান্তবিন্দু এবং প্রান্তটি পরিদর্শন করতে হবে তাই সবচেয়ে খারাপ ক্ষেত্রে সময় জটিলতা হ'ল (ভি + ই)

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