দুটি অ্যালগরিদমের তুলনায় রানটাইমের পরিবর্তে তুলনা কেন ব্যবহার করবেন?


19

আমি লক্ষ করেছি যে কয়েকটি সিএস গবেষণা গবেষণাপত্রে দুটি অ্যালগরিদমের দক্ষতার তুলনা করতে, অ্যালগরিদমে মূল তুলনার সংখ্যাটি আসল কম্পিউটিং বারের পরিবর্তে ব্যবহৃত হয়। উভয় প্রোগ্রাম চালিয়ে এবং অ্যালগরিদমগুলি চালনার জন্য প্রয়োজনীয় মোট সময় গণনা করে আমরা কোনটি তুলনা করতে পারি না?


স্বাগত! আমি আশা করি যে এই জাতীয় বেশিরভাগ কাগজপত্র রানটাইম ব্যবহার করবে না। আমি কিছু জানি, যদিও, বিশেষত অধিক প্রয়োগ সম্প্রদায়ের এবং যখন বিবেচিত সিস্টেমগুলি খুব জটিল are
রাফেল

উত্তর:


14

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

রানটাইম ব্যবহার করা ভাল ধারণা না হওয়ার কারণ সম্পর্কে প্রথমে কিছু কারণ বলি।


  1. একটি মেশিনে একটি ভাষা এবং একটি সংকলক ব্যবহার করে পরিমাপ করা সাধারণ রানটাইমগুলির কোনও অর্থ নেই যদি আপনি কোনও উপাদান পরিবর্তন করেন। এমনকি একই অ্যালগরিদমের সামান্য পৃথক বাস্তবায়নও ভিন্নভাবে সম্পাদন করতে পারে কারণ আপনি কিছু সংকলক অপিমেশনকে ক্ষেত্রে ক্ষেত্রে ট্রিগার করেন তবে অন্যটিতে নয়।
  2. ভবিষ্যদ্বাণী
    সুতরাং আপনার কিছু ইনপুট জন্য কয়েক রানটাইম আছে। এটি অন্য কোনও ইনপুটটির রানটাইম সম্পর্কে কী বলে? সাধারণভাবে, কিছুই না।
  3. তাৎপর্য
    সাধারণত, আপনি সমস্ত ইনপুটগুলি (কোনও আকারের) মাপদণ্ড করবেন না , যাতে তাত্ক্ষণিকভাবে আপনার অ্যালগোরিদমগুলির তুলনা করার ক্ষমতা সীমাবদ্ধ করে: সম্ভবত আপনার পরীক্ষার সেটটি একের মধ্যে সবচেয়ে খারাপ ক্ষেত্রে এবং অন্য অ্যালগরিদমের সেরা ক্ষেত্রে ট্রিগার করেছিল? অথবা রানটাইম আচরণের জন্য আপনার ইনপুটগুলি খুব ছোট ছিল ।
  4. মিটারিং
    পরিমাপ রানটাইম ভাল তুচ্ছ নয়। জেআইটি আছে কি? কোন বিতর্ক হয়েছে, অর্থাৎ আপনি কি অ্যালগোরিদম এমনকি চালানোর সময় গণনা করছেন? আপনি কি অন্য একই রান (অন্য অ্যালগরিদমের) জন্য একই মেশিন অবস্থার নির্দিষ্ট পুনরুত্পাদন করতে পারেন, বিশেষ একত্রে একযোগে প্রক্রিয়া এবং ক্যাশে? মেমরি ল্যাটেন্সি কিভাবে মোকাবেলা করা হয়?

আমি আশা করি এগুলি আপনাকে নিশ্চিত করেছে যে রানটাইমগুলি অ্যালগরিদমের তুলনা করার জন্য একটি ভয়ঙ্কর পরিমাপ এবং অ্যালগরিদম রানটাইম তদন্তের জন্য কিছু সাধারণ, বিমূর্ত পদ্ধতি প্রয়োজন।

প্রশ্নের দ্বিতীয় অংশে। কেন আমরা তুলনা বা অনুরূপ প্রাথমিক ক্রিয়াকলাপ ব্যবহার করব?

  1. বিশ্লেষণযোগ্য ট্র্যাকটেবিলিটি
    ধরে নিলে আপনি আনুষ্ঠানিক বিশ্লেষণ করতে চান, আপনাকে এটি করতে সক্ষম হতে হবে। স্বতন্ত্র বিবৃতি গণনা খুব প্রযুক্তিগত, কখনও কখনও এমনকি কঠিন; কিছু লোক তবুও এটি করে (উদাঃ নুথ)। কেবলমাত্র কয়েকটি বিবৃতি গণনা করা - যা রানটাইমকে প্রাধান্য দেয় - এটি সহজ। একই কারণে, আমরা প্রায়শই "কেবল" তদন্ত করি (উপরের সীমাগুলি) সবচেয়ে খারাপ ক্ষেত্রে রানটাইম।

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

মনে রাখবেন যে একাধিক অপারেশন গণনা করা কার্যকর হতে পারে। উদাহরণস্বরূপ, কিছু কুইকসোর্ট ভেরিয়েন্টগুলি তুলনা বেশি করে তবে অন্যদের তুলনায় কম স্বাপ হয় (গড়)।

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


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

10

এটি কারণ অন্যান্য অ্যালগরিদমগুলি চালনার জন্য মোট সময়টির হার্ডওয়্যারটিতে নির্ভরতা থাকে যা এটি অন্যান্য কারণগুলির সাথে চালিত হয়। দু'টি অ্যালগরিদমের তুলনা করা নির্ভরযোগ্য নয় যদি একটি পেন্টিয়াম 4 এ চালিত হয় এবং অন্যটি চলমান হয়, আসুন ধরা যাক, একটি কোর i7। শুধু এটিই নয়, তবে আপনি উভয়কে একই কম্পিউটারে চালিয়েছেন বলেও ধরা যাক। কী বলবেন যে উভয়ের উভয়ই একই পরিমাণে প্রসেসরের সময় রয়েছে? অ্যালগরিদমের মধ্যে একটির প্রক্রিয়াটির চেয়ে যদি অন্য কোনও প্রক্রিয়াটির উচ্চ অগ্রাধিকার থাকে তবে কী ঘটে?

এটি অতীতে পেতে, আমরা সম্পূর্ণরূপে এই সামগ্রিক সময় থেকে ডিক্লোল করি এবং পরিবর্তে অ্যালগরিদম স্কেলগুলির উপর ভিত্তি করে তুলনা করি। আপনি গবেষণাপত্রে O (1) বা O (n ^ 2) এর মতো স্বরলিপি লক্ষ্য করেছেন। এর জন্য আরও কিছুটা পড়ার দরকার পড়তে পারে, আপনি যদি আগ্রহী হন তবে বিগ ও স্বরলিপিটি দেখুন


1
এছাড়াও আসল চলমান সময়টি অ্যালগরিদমগুলি চালানোর জন্য ব্যবহৃত প্রকৃত ইনপুটটির আকার এবং সামগ্রীর উপর নির্ভর করে!
সোসোশি ইতো

7

যেহেতু অন্যান্য উত্তরগুলি ব্যাখ্যা করে যে আমরা প্রাথমিক ক্রিয়াকলাপের সংখ্যার বিচারে রানটাইম বিশ্লেষণ করি কেন , অনেকগুলি (সমস্ত নয়) বাছাই করা অ্যালগরিদমগুলির সঠিক মেট্রিক কেন তুলনা করা যায় তার জন্য বেশ কয়েকটি কারণ আমাকে দেওয়া উচিত :

  • অনেকগুলি বাছাই করা অ্যালগরিদমের জন্য তুলনার সংখ্যা চলমান সময়কে প্রাধান্য দেয়, কমপক্ষে অন্যান্য তুলনামূলক অন্যান্য প্রাথমিক ক্রিয়াকলাপ হিসাবে কমপক্ষে তুলনা করা হয়
  • তুলনা হ'ল ব্যয়বহুল অপারেশন; লাইব্রেরিতে কীভাবে বাছাইয়ের রুটিন প্রয়োগ করা হয় সে সম্পর্কে চিন্তা করুন: বাছাই ফাংশনটি উপাদানগুলির একটি অ্যারে এবং একটি ফাংশনটিতে একটি পয়েন্টার যা দুটি উপাদানের সাথে তুলনা করে; সাধারণভাবে কল করা এবং তুলনা ফাংশনটি সম্পাদনের জন্য অপেক্ষা করা "অভ্যন্তরীণ" অপারেশনগুলির চেয়ে বেশি ব্যয়বহুল; যেহেতু এই ফাংশনটি ব্যবহারকারীর দ্বারা সরবরাহ করা হয়েছে, তাই এটির অনুকূলিতকরণ করা আরও শক্ত
  • (এটি কারও কারও জন্য ভাল কারণ হতে পারে বা নাও হতে পারে) আমরা তুলনার সংখ্যা সম্পর্কে আকর্ষণীয় কিছু বলতে পারি যা একটি ক্রম সাজানোর জন্য যথেষ্ট এবং প্রয়োজনীয়; আমরা জানি কীভাবে এটি সবচেয়ে খারাপ অবস্থায় এবং বিভিন্ন বিতরণের জন্য গড়ে তোলা যায়, এমনকি কোনও অ্যালগরিদমকে কীভাবে ডিজাইন করতে হয় যা এটি কোনও অজানা বিতরণ ( স্ব-উন্নতিকরণের অ্যালগরিদম ) থেকে নমুনা আইডিতে চালিত হওয়ার কারণে অনুকূলতে রূপান্তর করে ; যখন আমরা কিছু তুলনা নিখরচায় দেওয়া হয় তখন এটি কীভাবে করতে হয় তা আমরা জানি ( আংশিক তথ্যের সাথে বাছাই করা )

1) "অন্য যে কোনও প্রাথমিক ক্রিয়াকলাপ হিসাবে কমপক্ষে তুলনা করা হয়" - কেবলমাত্র একটি ধ্রুবক ফ্যাক্টর অবধি। 2) "তুলনাগুলি ব্যয়বহুল অপারেশন" - এটি একটি জেনেরিক সেটিং অনুমান করে। পূর্ণসংখ্যার বাছাইয়ের জন্য (যা সাধারণত বিশ্লেষণ করা হয়), সোয়াপগুলি সাধারণত আরও ব্যয়বহুল।
রাফেল

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

প্লাস ও যে কাগজপত্রগুলি দেখেছিল তারা অবশ্যই বিশেষায়িত পূর্ণসংখ্যার বাছাই করা অ্যালগরিদম সম্পর্কে নয়, কেউ তুলনা সংখ্যা গণনা করে না
সাশো নিকোলভ

@ রাফেল ছোট ইন্টিজার বাছাই করা বাস্তবে সাধারণ বিষয় নয়। আমি সর্বাধিক বাছাই করব যা বিশ্বে চলছে তার স্ট্রিংগুলিতে রয়েছে ( কিছু দৈর্ঘ্যের বা অন্য কোনও )। এমনকি পূর্ণসংখ্যার বাছাইয়ের জন্যও, আমি নিশ্চিত নই যে এটি অদলবদল আরও বেশি ব্যয়বহুল - ব্রাঞ্চিং একটি আধুনিক উচ্চ-প্রসেসরের উপর তুলনামূলকভাবে ব্যয়বহুল ক্রিয়াকলাপ seeing
গিলস 'অশুভ হওয়া বন্ধ করুন'

@ গিলিস নিজেই, অদলবদলগুলি আমি জানি যে কোনও প্ল্যাটফর্মের চেয়ে পূর্ণসংখ্যার তুলনায় তুলনামূলক বেশি ব্যয়বহুল। যেমন "শাখার ভুল" হিসাবে "মাধ্যমিক" ব্যয়গুলি অবশ্যই একটি কারণ, যার প্রভাব চলমান গবেষণার বিষয়। (অনুশীলনে ব্যবহার সম্পর্কে, আমি একটি যোগ্য বক্তব্য দিতে পারি না However তবে, আমি পর্যবেক্ষণ করেছি যে স্ট্যান্ডার্ড গ্রন্থাগার রক্ষণাবেক্ষণকারীরা আদিম ডেটাটাইপগুলির জন্য তারা যে ধরণের অ্যালগরিদমগুলি ব্যবহার করেন তা উন্নত করে রাখে তাই আমি ধরে নিই যে তারা প্রচুর পরিমাণে (আব) ব্যবহার দেখতে পাবে
রাফেল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.