একটি গাছের জন্য লিনিয়ার সময় লেবেলিং অ্যালগরিদম?


12

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

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

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

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

আদর্শভাবে, লিনিয়ার সময় অ্যালগোরিদম ব্যাখ্যা এবং প্রয়োগ করাও সহজ হবে।

উত্তর:


8

আনরোটেড ট্রি

সমাধান করার জন্য আপনি একটি অগ্রাধিকারের সারিটি ব্যবহার করতে পারেন :হে(+ +ভীলগভী)

  • অগ্রাধিকারের সারিতে সমস্ত শীর্ষে রাখুন, তাদের অগ্রাধিকারটি তাদের ডিগ্রি রয়েছে being
  • যদিও সারিটি শূন্য নয়:
    • সর্বনিম্ন অগ্রাধিকারের একটি শীর্ষস্থানীয় ফেলুন , যা অবশ্যই 1 (বা একেবারে শেষে 0 ) হওয়া উচিত।বনাম10
    • σ(বনাম)=1+ +সর্বোচ্চσ(তোমার দর্শন লগ করা)তোমার দর্শন লগ করাবনাম
    • বিয়োগ অনন্য অবশিষ্ট প্রতিবেশী অগ্রাধিকার থেকে (যদি থাকে)।1তোমার দর্শন লগ করা

আসলে, আমাদের সত্যিকার অর্থে অগ্রাধিকারের সারির দরকার নেই এবং এই অ্যালগরিদমটি সময়ে একটি সাধারণ সারি ব্যবহার করে প্রয়োগ করা যেতে পারে :হে(+ +ভী)

  • দৈর্ঘ্যের একটি অ্যারের আরম্ভ সব ছেদচিহ্ন ডিগ্রী সঙ্গে।ভী
  • দৈর্ঘ্য আরেকটি অ্যারের আরম্ভ "জীবন্ত" সঙ্গে।ভী
  • প্রথম অ্যারে দিয়ে একবার যান, এবং ডিগ্রি এর সমস্ত শীর্ষে একটি কাতারে চাপ দিন।1
  • যদিও সারিটি শূন্য নয়:
    • একটি ভার্টেক্স পপ করুন ।বনাম
    • যাক , যেখানে সমস্ত আসল প্রতিবেশীদের উপরে চলে যান ।σ(বনাম)=1+ +সর্বোচ্চσ(তোমার দর্শন লগ করা)তোমার দর্শন লগ করাবনাম
    • "মৃত" হিসাবে কে চিহ্নিত করুন ।বনাম
    • তাহলে কিছু "জীবিত" প্রতিবেশী হয়েছে , বিয়োগ ডিগ্রী থেকে ।বনামতোমার দর্শন লগ করা1তোমার দর্শন লগ করা
    • তাহলে নতুন ডিগ্রী হল , ধাক্কা সারিতে।তোমার দর্শন লগ করা1তোমার দর্শন লগ করা

শিকড় গাছ

পরিবর্তে ডিএফএস ব্যবহার করুন। এখানে অ্যালগরিদমের স্কেচ দেওয়া আছে।

  • একটি নোড দেওয়া , যদি পাতা হয় তবে সেট করুন ।বনামবনাম(বনাম)=1
  • যদি পাতা হয় না, তবে তার সমস্ত বাচ্চার উপর অ্যালগরিদম চালান এবং তারপরে , যেখানে সমস্ত সন্তানের সেটকে ছাড়িয়ে যান।বনাম(বনাম)=1+ +সর্বোচ্চ(তোমার দর্শন লগ করা)তোমার দর্শন লগ করা

আপনি এই অ্যালগরিদমটি মূলটিতে চালান।


এটা কী ঠিক? গাছ 1-> 2-> 3-> 4-> 5 বিবেচনা করুন, যেখানে 1 মূল the 2 লেবেল 1 পাওয়া উচিত, কিন্তু আপনি 3 দিতে? বাচ্চাদের দ্বারা আপনি প্রতিবেশী বোঝাতে চান? এর পরে আমরা কোন নোডটি ডিএফএস শুরু করব?
নুথে

245432

আমি প্রশ্নটি জিজ্ঞাসা করিনি :-)। আমি প্রশ্নের ব্যাখ্যাটি হ'ল: একটি পুনর্নির্দেশিত গাছ। সমস্ত পাতা লেবেল। এগুলি মুছুন। ফলস্বরূপ গাছে পুনরাবৃত্তি করুন। সেক্ষেত্রে গাছটি আসলে ২-৩-৩-৪-৩, পদক্ষেপ 1, আপনি 1 এবং 5 মুছে ফেলেন, তারপরে 2 এবং 4 এবং তারপরে 3 "ক্রাউন গ্রাফ" সম্পর্কে অনুচ্ছেদ দেখুন। এটি একটি গাছের কেন্দ্র খুঁজে পাওয়ার জন্য অন্যতম ধ্রুপদী অ্যালগরিদম।
নুথে

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

2
1+ +মিএকটিএক্স{(তোমার দর্শন লগ করা)}12

2

একটি সরল উত্তর নিম্নরূপ:

  • (তোমার দর্শন লগ করা,বনাম)তোমার দর্শন লগ করাবনাম

  • টপোলজিকভাবে গ্রাফটি বাছাই করুন।

  • বনামবনাম

হে(এন+ +মি)হে(এন+ +মি)

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