পরিসীমা থেকে আঁকা প্রান্ত ওজনের জন্য ডিজকস্ট্রার অ্যালগরিদম পরিবর্তন করা


10

ধরুন আমার কাছে রেড রেঞ্জ থেকে আঁকা প্রান্তের ওজনযুক্ত একটি নির্দেশক গ্রাফ রয়েছে যেখানে ধ্রুবক। আমি যদি ডিজজস্ট্রার অ্যালগরিদম ব্যবহার করে সবচেয়ে সংক্ষিপ্ত পথটি খুঁজতে চেষ্টা করি, তবে আমি কীভাবে অ্যালগরিদম / ডেটা কাঠামোটি সংশোধন করে সময়ের জটিলতা উন্নত করতে পারি ?কে[1,,K]KO(|V|+|E|)


আপনার আরও নির্দিষ্ট করা উচিত, আপনার ডেটা স্ট্রাকচার কী? এবং আপনি কম পেতে পারেন না । বক্তৃতা পর্যালোচনা। O(V+E)
জোনাপ্রিয়তো

কেবলমাত্র স্বতন্ত্র প্রান্তের ওজনগুলির সম্ভাবনাগুলি ছোট হওয়ার অর্থ এই নয় যে দূরত্বের সংখ্যা কম।
জো

3
নীল সঙ্গে আপনার গ্রাফ প্রথম রঙ ছেদচিহ্ন, তারপর আকার প্রতিটি প্রান্ত বিভক্ত মধ্যে (যোগ করে প্রান্ত সাদামাটা ছেদচিহ্ন), তারপর এই নতুন গ্রাফে এই বি চালানো, নীল নোড শুরু নোড থেকে সবচেয়ে কম পাথ খোঁজার, এটা আপনার যদি অবিচ্ছিন্ন । t t - 1 O ( | V | + | E | ) কেttt1O(|V|+|E|)k

@ সাeedদআমিরি উত্তর হিসাবে এগুলি লিখছেন না কেন?
জো

@ জো যেহেতু এটি ডিজজস্ট্রাকে সংশোধন করছে না (কমপক্ষে সরাসরি ডিজকস্ট্রার সাথে সম্পর্কিত নয়)।

উত্তর:


16

প্রান্তের ওজন যদি পূর্ণসংখ্যা হয় তবে আপনি @ রেনাউডের পরামর্শ অনুসরণ করে ( কে | ভি | + || ) সময়ে চালানোর জন্য ডিজকস্ট্রার প্রয়োগ করতে পারেন । এখানে আরও সুস্পষ্ট ব্যাখ্যা দেওয়া হল।{0,1,,K}O(K|V|+|E|)

যে কোনও সময়ে, অগ্রাধিকার সারিতে (সসীম) কী কিছু সীমার মধ্যে হয় , যেখানে ডি অগ্রাধিকার সারি থেকে মুছে গত কী মান। (প্রতি কী অন্তত হয় ডি , কারণ কী অনুক্রম Dijkstra এর এলগরিদম দ্বারা সরানো অ হ্রাস, এবং প্রত্যেক কী সর্বাধিক হয় ডি + + কে , কারণ প্রতি কী মূল্য আছে [ তোমার দর্শন লগ করা ] + + W টি ( U , W ) জন্য কিছু প্রান্ত ( আপনি ,{D,D+1,,D+K}DDD+Kd[u]+wt(u,w) যেখানে ডি [ u ] হ'ল উত্স থেকে এমন কিছু ভার্টেক্স u এর দূরত্বযা ইতিমধ্যে সরানো হয়েছে, সুতরাং d [ u ] D। )(u,w)d[u]ud[u]D

এ কারণে, আপনি প্রতিটি কক্ষের সাথে একটি বালতিযুক্ত একটি বৃত্তাকার অ্যারে আকারের কে + 1 দিয়ে অগ্রাধিকার সারিটি প্রয়োগ করতে পারেন can কী দিয়ে প্রতিটি প্রান্তবিন্দু সঞ্চয় করুন কক্ষে বালতি মধ্যে একটি [ ( ) ] যেখানে । রাখুন । নিম্নলিখিত হিসাবে অপারেশন করুন:A[0..K]K+1kA[h(k)]ডিh(k)=kmod(K+1)D

  • মুছুন-মিনিট : খালি থাকাকালীন , ইনক্রিমেন্ট । তারপরে থেকে একটি শীর্ষবিন্দু মুছুন এবং ফিরে করুন ।ডি [ এইচ ( ডি ) ]A[h(D)]DA[h(D)]

  • সন্নিবেশ কী দিয়ে : এর বালতি শীর্ষক যোগ ।[ এইচ ( কে ) ]kA[h(k)]

  • হ্রাস-কি করার থেকে প্রান্তবিন্দু সরাতে থেকে ।কে [ এইচ ( কে ) ] [ এইচ ( কে ) ]kkA[h(k)]A[h(k)]

সন্নিবেশ এবং হ্রাস-কী হ'ল ধ্রুবক-সময় ক্রিয়াকলাপ, সুতরাং সেই ক্রিয়াকলাপগুলিতে মোট সময় ব্যয় করা হবে । মুছে ফেলতে-মিনিটে ব্যয় করা মোট সময় হবে সাথে চূড়ান্ত মান । এর চূড়ান্ত মান হ'ল উত্স থেকে যেকোন প্রান্তের সর্বোচ্চ (সসীম) দূরত্ব (কারণ একটি মুছা-মিনিট যা পুনরাবৃত্তি গ্রহণ করে তা দ্বারা বৃদ্ধি করে )। সর্বাধিক দূরত্ব সর্বাধিক কারণ প্রতিটি পাথের সর্বাধিক প্রান্ত রয়েছে। সুতরাং, অ্যালগরিদমের দ্বারা ব্যয় করা মোট সময় হ'ল ।( | ভি | ) ডি ডি আই ডি আই কে ( | ভি | - 1 ) | ভি | - 1 ( কে | ভি |)O(|V|+|E|)O(|V|)DDiDiK(|V|1)|V|1O(K|V|+|E|)


আমি বৃত্তাকার সারিটি পছন্দ করি, এটি মূলত কে * ভি আকারের অ্যারে রাখার বিষয়ে আমার ধারণার চেয়ে অনেক ভাল যেখানে কেবলমাত্র অ্যাভ সাইজের স্লাইস কোনও নির্দিষ্ট সময়ে ব্যবহৃত হয়।
রেনাড

আমি এটি একটি ডাবল লিঙ্কযুক্ত তালিকা ব্যবহার করে বাস্তবায়ন করেছি, তার অর্থ কি এখনও মিনিট কীটি সন্ধান করার জন্য এটি ও (1)?
ব্যবহারকারী 1675999

@ ব্যবহারকারী 1675999, আমি নিশ্চিত নই। যদি আপনার তালিকা কী অনুসারে বাছাই করা হয়, আপনি কীভাবে দক্ষতার সাথে সন্নিবেশ এবং হ্রাস কী করবেন? যদি আপনার তালিকাটি কী অনুসারে বাছাই করা না হয়, তবে কীভাবে আপনি মোছা-মিন কার্যকরভাবে করবেন?
নিল ইয়ং

5

আমি এখানে ধরে নিয়েছি যে একটি পূর্ণসংখ্যা এবং প্রান্তের ওজন অবিচ্ছেদ্য। অন্যথায় এটি সত্যিকার অর্থে আপনার কোনও জিনিস কিনে না, আপনি সর্বদা ওজন পুনরুদ্ধার করতে পারেন যাতে ন্যূনতম প্রান্তটির দাম হয় এবং সর্বাধিকের দাম , সুতরাং সমস্যাটি স্ট্যান্ডার্ড সংক্ষিপ্ততম পথ সমস্যার মতো।1 কেK1K

অ্যালগরিদম / প্রুফ স্কেচ: অ্যারে হিসাবে এই ধরণের পাগল পথে অগ্রাধিকারের সারিটি প্রয়োগ করুনব্যয় অনুসারে কীড তালিকাভুক্ত করে এবং অন্যথায় স্ট্যান্ডার্ড ডিজকস্ট্রার অ্যালগরিদম ব্যবহার করে। গাদা মধ্যে সর্বনিম্ন আইটেমের ব্যয় ট্র্যাক করে এমন কাউন্টার রাখুন। লিনিয়ার স্ক্যানিং দ্বারা আইটেমগুলি মোছার পরে ডিকিউ কলটি সমাধান করুন । হ্যাঁ, এই ধরণের শব্দগুলি উন্মাদ, তবে ধ্রুব আপনাকে লিনিয়ার স্ক্যানগুলির বিরুদ্ধে আপনার অ্যালগরিদমিক অন্তর্দৃষ্টি ঠকানো এবং বোকা বানান। আপনাকে কেবল সর্বশেষ ন্যূনতম চিহ্নিতকারী থেকে স্ক্যান করতে হবে কারণ ডিসকস্ট্রার অ্যালগোরিদম আপনার সারি প্রয়োগের জন্য দুর্দান্ত। এটি যখন কোনও শিরোনামের অনুরোধ করার সময় কাতারে প্রবেশ করা আইটেমগুলি সর্বদা সর্বনিম্নের চেয়ে বড় বা সমান হয়। সম্ভব সবচেয়ে দীর্ঘতম পথটির দৈর্ঘ্যকে কে × | ভি | কে × | ভি | = ( | ভি | )K×|V|KK×|V|, সুতরাং আপনার amorised স্ক্যানিং খরচ কে যদি স্থির থাকে।K×|V|=O(|V|)


-2

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


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