টিএসপির জন্য হোল্ডড-কার্প অ্যালগরিদমের সময় জটিলতা


9

যখন আমি মাইকেল হেল্ড এবং রিচার্ড এম কার্পের " এ ডায়নামিক প্রোগ্রামিং অ্যাপ্রোচ টু সিকোয়েন্সিং প্রবলেমস " সন্ধান করেছি তখন আমি নীচের প্রশ্নটি নিয়ে এসেছি: টিএসপির জন্য তাদের অ্যালগোরিদমের জটিলতা কেন (পি। 199), আমি বলতে চাইছি যেখানে তারা ফ্যাক্টর গ্রহণ না করেন ? আমি যদি সঠিকভাবে বুঝতে পারি তবে মানে শহরের প্রতিটি উপসেটের জন্য সংযোজনের সংখ্যা। তাহলে কেন প্রতিটি সংযোজন ক্রিয়াকলাপটি আমার অজানা ক্রিয়াকলাপের সাথে যুক্ত? আমি মনে করি এটি কোনওভাবে ন্যূনতম গ্রহণের সাথে সংযুক্ত রয়েছে, তবে কমপক্ষে ন্যূনতম সংখ্যার জন্য এতগুলি ক্রিয়াকলাপের প্রয়োজন নেই বলে মনে হচ্ছে।(k=2n1k(k1)(n1k))+(n1)kk1k

অনুষ্ঠিত এবং Karp এবং স্বাধীনভাবে বেলম্যান রানে ডায়নামিক প্রোগ্রামিং আলগোরিদিম নিম্নরূপ: প্রতিটি জোড়া জন্য , একটি পাথ অর্থ দিয়ে যাচ্ছিলেন , সমস্ত উপাদান এবং সসীম কম্পিউট(S,ci)c1Sci

OPT[S,ci]=min{OPT[S{ci},cj]+d(cj,ci):cjS{ci}},

যেখানে d(cj,ci) অর্থ cj এবং সি_আই শহরগুলির মধ্যে দূরত্ব ci। তারপরে কাগজ থেকে সূত্রে k অর্থ এস এর আকার S

উত্তর:


5

নীচে সংযোজন, k(k1) পদগুলি স্পষ্ট করে :

সুতরাং, আপনি যদি অভিব্যক্তিটির শর্তাদি পরীক্ষা করেন, তবে আপনি পদটি 1 এর সমস্ত বাইনারি স্ট্রিংগুলির একটি গণনা যা প্রথম অবস্থানে 1 রয়েছে। অন্য কথায়, আমরা বাইনারি স্ট্রিংয়ের প্রতিটি অবস্থানের সমস্যার মধ্যে দেওয়া একটি শহরগুলির মধ্যে সেই সময়ে আমরা বিবেচনা করছি সেই সঠিক উপসেটে রয়েছে কিনা তা বাছাইয়ের প্রতিনিধিত্ব করি। সুতরাং, 5 টি শহরের জন্য, 10101 সাবসেটটির সাথে মিল 3 1,3,5}}(n1k)kn

সুতরাং, এর {1, ..., সব সাব-সেট নির্বাচন জুড়ে গনা }, কেবলমাত্র আমরা (অর্থাত বাইনারি স্ট্রিং মাধ্যমে গণনা) আকার প্রতিটি বাইনারি উপসেট মাধ্যমে গণনা = 2 (অর্থাত আকারের বাইনারি স্ট্রিং দুই 1 এর ধারণ), তারপর আকার = 3, তারপরে আকার = 4, ... তারপর আকার = এন। (নোট করুন যে আকার = 1 সাবসেটটিতে অবশ্যই প্রথম শহর থাকতে হবে এবং সুতরাং এটির আংশিক দূরত্ব গণনা অপ্রাসঙ্গিক, যেহেতু 1 -> সাবসেটের অন্যান্য শহরগুলি থেকে>> 1 ঠিক 0)nn

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


কতটা আকর্ষণীয় - আমি কয়েক মিনিট আগে C ++ এ এই সঠিক অ্যালগরিদমকে কোডিং শেষ করেছি। (সুতরাং খাঁটি তত্ত্ব থেকে স্পর্শককে কিছুটা ব্যবহারিক আলোচনায় ক্ষমা করুন :) :)

এটির জন্য সময় এবং স্থান ব্যয় হয় - কমপক্ষে আমার প্রয়োগের অধীনে। ব্যবহারিকভাবে বলতে গেলে, যখন আপনার স্থানের প্রয়োজনীয়তাগুলি দ্রুত বাড়তে থাকে তখন তারা সময়ের প্রয়োজনের চেয়ে আরও বেদনাদায়ক হয়ে ওঠে। উদাহরণস্বরূপ, আমার পিসিতে (4 গিগাবাইট র‌্যামের সাহায্যে), আমি 24 টিরও বেশি শহরগুলির সাথে দৃষ্টান্তগুলি সমাধান করতে পারি - এর চেয়ে বেশি আর আমার স্মৃতিশক্তি নেই।O(2nn2)O(2nn)

অবশ্যই, আমি কেবল খারাপ প্রোগ্রামার হতে পারি এবং আপনি অনুশীলনে আমার চেয়ে আরও ভাল করতে সক্ষম হতে পারেন। :)

সম্পাদনা: আপনার প্রশ্নের একটি বিশদ সম্পর্কে আরও কিছু নির্দিষ্টকরণ: পদটিটি আসল সত্য থেকে এসেছে যে আপনি সবচেয়ে খারাপ ক্ষেত্রে পূর্ববর্তী সাবসেটগুলি থেকে আংশিক, অনুকূল দূরত্ব গণনা করতে পারেন (সর্বাধিক রয়েছে তাদের; দয়া করে মনে রাখবেন উপর সংকলিত বর্তমান এক বিশ্লেষণে আপনি লিঙ্ক)। এটির জন্য, সবচেয়ে খারাপ ক্ষেত্রে আবার মোট এর জন্য আকারের উপসর্গগুলির সাথে তুলনা করা হয় ।k(k1)nknO(k)k1O(k2)

এছাড়াও, যদি আমার ব্যাখ্যাটি যথেষ্ট পরিমাণে পরিষ্কার না হত, তবে বজিরানীর ( পিডিএফ ) কয়েকটি চমৎকার বক্তৃতার নোট এখানে দেওয়া হল । টিএসপি-র আলোচনার জন্য হেলড-কার্প বিশ্লেষণ সহ পি 188 তে স্ক্রোল করুন।


ওহ অবশ্যই! আমি এখন সে সম্পর্কে নির্বোধ চিন্তা বোধ করি; আমি আমার উত্তর আপডেট করব। আমি প্রকৃতপক্ষে সেই সঠিক মন্তব্যটি আগে শুনেছিলাম এবং কেবল এটি সম্পর্কে চিন্তা না করেই তা পেরিয়েছি। এবং হ্যাঁ - একটি ফাইল লিখতে / একটি ফাইল থেকে পড়া আপনাকে কার্যকরভাবে শহরগুলির সংখ্যায় উচ্চতরভাবে যেতে দেয়। ... আপনি যদি টিএসপি দৃষ্টান্ত প্রকৃত উদ্দেশ্য সমাধানের চেষ্টা না করে থাকেন তবে এটিও উদ্বিগ্ন হওয়ার মতো ব্যথা নয়। আমার সিদ্ধান্তগতভাবে ব্যবহারিক উদ্দেশ্যে নয় was ;)
ড্যানিয়েল আপন

2
বজোরক্লুন্ড অ্যালগরিদম বাস্তবায়নের সময় :)
সুরেশ ভেঙ্কট

@ সুরেশ: ভাল ধারণা!
ড্যানিয়েল আপন

@ ড্যানিয়েল আপন আপনি কি দয়া করে, "আংশিক, অনুকূল দূরত্ব" গণনা করার সময় আমাদের তুলনা প্রয়োজন কেন তা সুনির্দিষ্ট করে তুলতে পারেন?
ওলেকসান্ডার বান্দারেঙ্কো

@ অলেকসান্ডার: অবশ্যই, আমি এটিকে আমার উত্তরের শীর্ষে যুক্ত করব।
ড্যানিয়েল আপন

0

প্রধান নোট

এটা খেয়াল করা জরুরী গুরুত্বপূর্ণ যে আমরা গনা এবং দোকান না
"এর জন্য অনুকূল পথের দূরত্ব combination of k cities"
কিন্তু
"জন্য অনুকূল পথের দূরত্ব combination of k cities এবং জন্য end-point city from this combination"।
এটি বোঝার ফলে নিম্নলিখিত সূত্রটিতে প্রথম দুটি গুণকটির অর্থ সাহায্য করবে।

প্রথম পর্ব

প্রথম পর্যায়ে ক্রিয়াকলাপগুলির সংখ্যা:

k>=2(n1k1)choose city combinationof size = k1(k1)choose city to be the lastfrom k1 citiesin chosen combination((n1)(k1))choose citythat is not in chosen combinationto add to path

মোটামুটিভাবে সুপারস্ক্রিপ্ট হারিয়েছে for all k>=2 that is valid for binomial coefficient। সুতরাং যোগফলের সর্বশেষ বৈধ নয় নাল মেয়াদটি হবে অর্থ আমাদের সমষ্টি শেষ পছন্দগুলি ক্যাপচার করে না প্রথম শহরের সাথে সংযোগ স্থাপনের শহর। প্রথম শহরের সাথে সংযোগ করার জন্য শহর রয়েছে। সুতরাং পরিশেষে আমরা এই পদটি যোগফল যোগ করব।k=n1

(n1n2)(n2)1
n1

আপনার দেওয়া সূত্রটিকে রূপান্তর করতে দিন যা হেলড-কার্প উইকিপিডিয়া পৃষ্ঠায় রয়েছে

k>=2(n1k1)(k1)((n1)(k1))=k>=2(n1)!(k1)!(nk)!(k1)(nk)=k>=2(n1)!k!(n1k)!k(k1)=k>=2(n1k)k(k1)
দ্বিপদী গুণাগুণগুলি পরিচালনা করে: সুতরাং প্রথমটিতে অপারেশন সংখ্যা পর্যায়টি হ'ল
k>=2(n1k)k(k1)=k>=2(n1)!k!(n1k)!k(k1)=k>=2(n3)!(k2)!(n3(k2))!(n1)(n2)=(n1)(n2)k>=2(n3k2)=(n1)(n2)2n3
(n1)(n2)2n3+(n1)

দ্বিতীয় পর্ব

দ্বিতীয় ধাপটি প্রথম পর্বে একযোগে কম্পিউটারের দূরত্বের সাথে চিহ্নিত চিহ্নগুলির দ্বারা সর্বোত্তম পথটি পুনরুদ্ধার করছে।

" combination of k cities এবং এর জন্য end-point city from this combination" প্রতিটি অনুকূল পথে আমরা দ্বিতীয় থেকে শেষ শহরটি সংরক্ষণ করেছি।

সর্বোত্তম পথে ব্যাকট্র্যাক করতে আমাদের কিছু ডেটা স্ট্রাকচারকে দ্বিতীয় combination of k cities শেষ শহরটিকে " এবং ফর end-point city from this combination" এর জন্য ফিরে আসতে বলা উচিত । সুতরাং এই তথ্য কাঠামো কিছু হতে হবে
Map<combination of k cities, Map<last city, second-to-last city>>। সূচক হিসাবে combination of k citiesআমরা ব্যবহার করতে পারি, উদাহরণস্বরূপ binary_string[city id]=1 if city id is in combination,। সুতরাং combination of k citiesআমাদের ডেটা কাঠামো সংমিশ্রণ এবং সূচীকরণের জন্য আমাদের সমস্ত উপাদানগুলির দিকে নজর দেওয়া দরকার । এটি আমাদের দ্বিতীয় পর্বের ক্রিয়াকলাপের সংখ্যা দেয়:

k>=2n1k=(n)(n1)21

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