কোনও প্রোগ্রামের 'অনুকূল পারফরম্যান্স' এ বা 'অনুকূলতা পারফরম্যান্স' বি রয়েছে তা নির্ধারণের সমস্যাটি কেবল 'সর্বোত্তমতা কর্মক্ষমতা' এর কোনও সংজ্ঞার জন্য সাধারণভাবে অনস্বীকার্য (নীচে প্রমাণ)। এটি সূচিত করে যে এমন কোনও একক পদ্ধতি নেই যা সর্বদা আপনাকে বলতে পারে যে কোনও অ্যালগরিদম অনুকূল।
প্রায়শই অ্যালগরিদম বিশ্লেষণ করার সময় প্রায়শই এমন পদ্ধতি প্রয়োগ করা হয়। প্রায়শই, আনুমানিক অ্যালগরিদমগুলি এর সমাধানটি সর্বোত্তম সমাধান থেকে কতটা দূরে থাকে তার গ্যারান্টি দ্বারা মূল্যায়ন করা হয়। আমি একটি সমস্যা এবং আনুমানিক একটি উদাহরণ দেব, যা আমি 'লোয়ার বাউন্ড' পদ্ধতিটি ব্যবহার করে প্রমাণ করব, যা অনুপাত প্রমাণ করার জন্য খুব ব্যবহৃত একটি পদ্ধতি।
সমস্যার সমাধান হ'ল 'ট্রাক লোডিং' সমস্যা: আমাদের কাছে প্রচুর অভিন্ন ট্র্যাক রয়েছে (আমরা যত পছন্দ করি) প্রতিটি টি বেশিরভাগ টি-তে ভার বহন করতে সক্ষম। পরিবহন। প্রতিটি বস্তুর আমার ওজন w_i রয়েছে, যেখানে w_i <= T (সুতরাং এমন কোনও আইটেম নেই যা নিজেরাই এমনকি ট্রাকেও ফিট করতে পারে না)। আইটেমগুলি অংশগুলিতে বিভক্ত করা যায় না। আমরা ট্রাকগুলি পূরণ করতে চাই যাতে আমাদের যতটা সম্ভব কম ট্রাকের প্রয়োজন হয়। এই সমস্যাটি এনপি-সম্পূর্ণ।
এই সমস্যার জন্য খুব সহজেই একটি আনুমানিক অ্যালগরিদম রয়েছে। আমরা এতক্ষণ ট্রাকগুলি লোড করা শুরু করি যতক্ষণ না ট্রাকটি এতক্ষণ পূর্ণ না হয়ে যায় যে পরবর্তী আইটেমটি খাপ খায় না। এরপরে আমরা আর একটি ট্রাক নিয়ে যাই এবং এই ট্রাকটি এই আইটেমটি দিয়ে লোড করি যা আগের ট্রাকে ফিট করে না। আমরা এই ট্রাকটিতে আর কোনও আইটেম লোড করি না: পরিবর্তে, আমরা একটি নতুন ট্রাক নিই, যতক্ষণ না এটি ফিট না হয় ততক্ষণ আমরা এটিকে আবার প্রচুর আইটেম দিয়ে পূর্ণ করি, শেষ আইটেমটি তার নিজের ট্রাকে বারবার রেখে দেই।
এই অ্যালগরিদম সমস্যাটির জন্য তথাকথিত 2-আনুমানিকতা: এটি সর্বোত্তম সমাধানের চেয়ে দ্বিগুণ ট্রাক ব্যবহার করে। 'সর্বাধিক' গুরুত্বপূর্ণ: আমরা ভাগ্যবান এবং সর্বোত্তম সমাধানটি খুঁজে পেতে পারি, তবে কমপক্ষে আমরা খুব খারাপ করব না।
এটি প্রমাণ করার জন্য, আমরা প্রথমে আমাদের প্রয়োজনীয় ট্রাকগুলির সংখ্যার উপর একটি নিম্ন সীমাটি সংজ্ঞায়িত করি। এর জন্য, কল্পনা করুন যে আমাদের আইটেমগুলি অংশগুলিতে কাটতে দেওয়া হয়েছে: আমরা তখন সহজেই প্রতিটি ট্রাক পূরণ করতে পারি তবে শেষটি সম্পূর্ণরূপে। আমাদের যদি প্রয়োজন ট্রাকের সংখ্যাটি যদি আমরা করি তবে মূল প্রশ্নটির জন্য আমাদের প্রয়োজনীয় ট্রাকের সংখ্যার জন্য এটি একটি কম আবদ্ধ: 'সেরা' ক্ষেত্রে সর্বোত্তম সমাধান সর্বদা প্রতিটি ট্রাককে পুরোপুরি পূরণ করে, সেই ক্ষেত্রে ট্রাকের সংখ্যা সমান, তবে যদি সর্বোত্তম সমাধানগুলি ট্রাকগুলিকে ভরাট করে দেয় তবে তার জন্য আরও বেশি ট্রাকের প্রয়োজন হতে পারে।
এখন আমরা আমাদের প্রায় অ্যালগরিদম তাকান। নোট করুন যে প্রতি পদক্ষেপে আমরা (আংশিকভাবে) দুটি ট্রাক পূরণ করি। এছাড়াও মনে রাখবেন যে অ্যালগরিদম কীভাবে কাজ করে, প্রথম ট্রাকের আইটেম এবং দ্বিতীয় ট্রাকের আইটেম একসাথে প্রথম ট্রাকে ফিট করতে পারে না, সুতরাং তাদের যোগফল কমপক্ষে টি This এর অর্থ প্রতিটি পদক্ষেপে আমরা কমপক্ষে একটি সম্পূর্ণ লোড করি দুটি ট্রাকের পণ্য মূল্য । এখন আমাদের লোয়ার বাউন্ড এই তুলনা: যে ক্ষেত্রে, আমরা আইটেম একটি পূর্ণ ট্রাক মূল্য লোড এক ট্রাক। অন্য কথায়, আমাদের আনুমানিক অ্যালগরিদম গণনা (রৈখিক সময়ে) এমন একটি সমাধান যা দেখতে আমাদের নিচের দিকে আবদ্ধ 'সমাধান' এর মতো দেখতে লাগে তবে এটির পরিবর্তে দুটি ট্রাক ব্যবহার করে। অতএব, আমরা সর্বোত্তম অ্যালগরিদমের চেয়ে দ্বিগুণ ট্রাক ব্যবহার করি, কারণ আমরা সর্বোত্তম অ্যালগরিদমের উপর আমাদের নিম্ন বদ্ধের চেয়ে দ্বিগুণ ট্রাক ব্যবহার করি।
এই অ্যালগরিদম একটি ধ্রুবক-ফ্যাক্টর অনুমান দেয়: এটি সর্বোত্তম সমাধানের চেয়ে প্রায় 2 গুণ খারাপ bad অন্যান্য ব্যবস্থার কয়েকটি উদাহরণ: সর্বোত্তম সমাধানের চেয়ে সর্বাধিক সি বেশি (অ্যাডিটিভ ত্রুটি, বেশ অস্বাভাবিক), সর্বাধিক সি লগ এন বেস্ট হিসাবে অনুকূল সমাধান হিসাবে খারাপ হিসাবে সর্বাধিক সিএন সময়ে সর্বোত্তম সমাধান হিসাবে খারাপ হিসাবে সর্বাধিক সি 2 d (ডিএন) সময়ের অনুকূল সমাধান হিসাবে খুব খারাপ (খুব খারাপ; উদাহরণস্বরূপ, সাধারণ টিএসপি কেবল এই ধরণের গ্যারান্টি সহ অ্যালগরিদমকে স্বীকার করে)।
অবশ্যই, আপনি যদি নিশ্চিত হতে চান যে আপনি যে ফ্যাক্টরটি প্রমাণ করেছেন সেটিই আপনি প্রমাণ করতে পারেন যে সেরা ফ্যাক্টর, আপনার অ্যালগরিদম যে সমাধানটি দেয় তা সম্ভবত যতটা খারাপ হতে পারে তার উদাহরণ খুঁজে পাওয়ার চেষ্টা করা উচিত।
এছাড়াও মনে রাখবেন যে আমরা কখনও কখনও এনপি-হার্ড নয় এমন সমস্যায় প্রায় অ্যালগরিদম ব্যবহার করি।
আমি এটিকে (আরও অনেকের মধ্যে) আমার বিশ্ববিদ্যালয়ের আনুমানিক অ্যালগরিদম কোর্সে শিখেছি।
অনিবার্যতার প্রমাণ: পি যেন সমস্যা হয় এবং এ এবং বি পি এর সান্নিধ্যে অ্যালগরিদম হয় যেখানে A এবং B এর 'অনুকূলতা' এর কিছু বুদ্ধিমান সংজ্ঞার জন্য একই 'অনুকূলতা' থাকে না এবং যেখানে A এবং B চলমান সময় উভয়ই ওমেগা হয় (1) (ধ্রুবক সময়ের চেয়ে কঠোরভাবে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে তারা ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে থামে) এবং যেখানে এ এবং বি উভয় স্থির থাকে।
ডি এমন একটি প্রোগ্রাম হয়ে উঠুক যা এটির দাবি করে যে এটি নীচেরগুলি গণনা করতে পারে: কিছু প্রোগ্রাম সি প্রদান করে পি এর জন্য একটি অনুমানের পরিমাণ নির্ধারণ করুন, এটি যথেষ্ট পরিমাণে ইনপুটগুলির জন্য এ হিসাবে ভাল বা বি হিসাবে ভাল কিনা তা সিদ্ধান্ত নিন (আপনি অতএব প্রোগ্রামগুলি শ্রেণীবদ্ধ করতে এটি ব্যবহার করতে পারেন) তাদের অনুকূলতা অনুযায়ী)।
তারপরে আমরা থামার সমস্যা সমাধানের জন্য ডি ব্যবহার করতে পারি। E কে একটি প্রোগ্রাম হতে দিন এবং F এই প্রোগ্রামটির জন্য একটি ইনপুট হয়ে উঠুক। আমরা ইনপুট এফ বন্ধ করবে কিনা তা সিদ্ধান্ত নিতে আমরা ডি ব্যবহার করব।
আমরা একটি প্রোগ্রাম জি ডিজাইন করি যা নিম্নলিখিতগুলি করে: সমস্যা পি এর জন্য একটি ইনপুট এস দেওয়া, এটি সমানত্রে F এবং A এ এস চালায়: এটি E কে কিছুক্ষণের জন্য কার্যকর করে, তারপরে এ, তারপরে E আবার এবং আরও অনেক কিছু করে। যদি E এফ বন্ধ থাকে, তবে এটি A চালানো বন্ধ করে দেয় এবং পরিবর্তে এস তে বি চালায় এবং খ এর ফলাফল প্রদান করে। যদি E থামার আগে A থেমে যায় তবে এটি A এর ফলাফল প্রদান করে।
ডি তে জি ব্যবহার করা এখন সিদ্ধান্ত নিয়েছে যে এফ এ E টি থামবে কিনা: E যদি F এ থামে, তবে যথেষ্ট পরিমাণে বড় ইনপুট এস এর জন্য এস এ-এ থামার আগে F এ E টি থামবে (কারণ E টি থামাতে সময় লাগে তার আকারের উপর নির্ভর করে না ইনপুট, এ এর বিপরীতে)। ডি এর ফলে জি রিপোর্ট করেছেন যে বি এর সর্বোত্তম বৈশিষ্ট্য রয়েছে E যদি F এ থামায় না, ডি রিপোর্ট করবেন যে জি এর সর্বোত্তম বৈশিষ্ট্য রয়েছে।