অনুশীলন বিশ্লেষণ? (সবচেয়ে খারাপ ক্ষেত্রে পারফরম্যান্স গ্যারান্টি)


13

এমোরিটাইজড এনালাইসিস কী? এবং কীভাবে এটি আমাকে আমার প্রোগ্রামগুলিতে খারাপের পারফরম্যান্স গ্যারান্টি অর্জন করতে সহায়তা করতে পারে ?

আমি পড়ছিলাম যে নিম্নলিখিত কৌশলগুলি প্রোগ্রামারকে সবচেয়ে খারাপ ক্ষেত্রে পারফরম্যান্স গ্যারান্টি অর্জনে সহায়তা করতে পারে (যেমন আমার নিজের ভাষায়: গ্যারান্টি দিন যে কোনও প্রোগ্রামের চলমান সময়টি খারাপ সময়ের মধ্যে চলমান সময়ের চেয়ে বেশি হবে না):

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

লেখক কীভাবে amorised বিশ্লেষণ অর্জনের একটি উদাহরণ হিসাবে স্ট্যাকের জন্য অ্যারে ডেটা স্ট্রাকচারের ব্যবহারের উল্লেখ করেছেন তবে আমি এখনও বুঝতে পারি না amorised বিশ্লেষণ কী, এবং কীভাবে এটি বাস্তবায়িত করা যায় (ডেটা স্ট্রাকচার? অ্যালগরিদম?) কীভাবে খারাপ অর্জন করা যায়? কাস্টম পারফরম্যান্স গ্যারান্টি

উত্তর:


14

আপনি মোড়িত বিশ্লেষণ প্রয়োগ করেন না। এটি আরও সঠিক Oসীমানা পাওয়ার কৌশল

আপনার যে অপরিহার্য পর্যবেক্ষণ করতে হবে তা হ'ল, ব্যয়বহুল ক্রিয়াকলাপগুলি কোনও সময়েই ঘটতে পারে না।

অ্যারে-ব্যাকড ডেটা স্ট্রাকচারের ক্ষেত্রে অ্যারেটির এখনই এবং তারপরে পুনরায় আকার দেওয়া দরকার - যখন এটি পূর্ণ হয়। এটি সবচেয়ে ব্যয়বহুল অপারেশন এবং O(n)সময় নেয় । অ্যারেতে থাকা সমস্ত অন্যান্য প্রবেশদ্বারগুলি O(1)

ঢোকাতে জন্য রানটাইম নির্ধারণ nআইটেম, আপনি সংখ্যাবৃদ্ধি করতে পারেন nসবচেয়ে ব্যয়বহুল অপারেশন সঙ্গে O(n), যার মধ্যে একটি সামগ্রিক রানটাইম আচরণ ফলাফল O(n^2)

তবে এটি সঠিক নয় কারণ আকার পরিবর্তন খুব বেশি সময় ঘটতে পারে না।

অর্থের বিষয়ে কথা বলার সময়, আপনি যখন মূল্য একাধিক ছোট পেমেন্ট দিয়ে আপনার off পরিশোধ করেন তখন আপনি ব্যয়কে পরিমাণমতো করে তোলেন

অ্যালগরিদমগুলি সম্পর্কেও ভাবতে আমরা এই মডেলটি ব্যবহার করতে পারি। মানসিক মানচিত্র এড়ানোর জন্য আমরা কেবল "সময় "কে" অর্থ "দিয়ে প্রতিস্থাপন করি।

অ্যারের দৈর্ঘ্যে পূর্ণ হয়ে গেলে nআমরা এর আকার দ্বিগুণ করতে পারি। আমাদের নিম্নলিখিত ক্রিয়াকলাপগুলি করা দরকার:

  • 2nস্মৃতির অংশগুলি বরাদ্দ করুন
  • nআইটেম কপি

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

এটিতে নিম্নলিখিত নিদর্শন রয়েছে:

  • পরবর্তী nআইটেমগুলি সন্নিবেশ করাতে পুনরায় আকার এবং অনুলিপি ব্যয় করতে হবে (আমরা nস্লট এবং nঅব্যবহৃত স্লট ব্যবহার করেছি)

প্রতিটি সন্নিবেশ অপারেশনের জন্য কত মূল্য দিতে হবে তা আমরা এখন ভাবতে পারি:

  • .োকান
  • এক মাপের স্মৃতি বরাদ্দের ব্যয়
  • নতুন বরাদ্দ মেমোরিতে এটিকে সরানোর ব্যয়

আমরা এখন মেমরি বরাদ্দ করতে, পরবর্তী nউপাদানগুলিকে অনুলিপি এবং সন্নিবেশ করানোর জন্য ব্যয়গুলি আবরণ করেছি । তবে আমরা পুরানো nউপাদানগুলির অনুলিপি করার পাশাপাশি জায়গা বরাদ্দকে অবহেলা করেছি।

আমরা কেবল nআমাদের নতুন উপাদানগুলিতে আমাদের পুরানো উপাদানগুলির ব্যয়গুলি বিতরণ করি n:

  • এক মাপের স্মৃতি বরাদ্দের ব্যয়
  • নতুন বরাদ্দ মেমোরিতে এটিকে সরানোর ব্যয়

মোট, প্রতিটি, প্রতিটি সন্নিবেশ অপারেশনটির জন্য 5 ইউনিট লাগবে। এটি নিজের সন্নিবেশ এবং নিজের এবং পুরানো উপাদানগুলির মধ্যে একটির স্থান স্থানান্তর এবং বরাদ্দের জন্য অর্থ প্রদান করে।

প্রতিটি সন্নিবেশ-ক্রিয়াকলাপ এখনও স্থির পরিমাণ নেয়, তবে পুনরায় আকারটি নিখরচায় ঘটে: আমরা প্রতিটি সন্নিবেশের জন্য "আরও" সময় ব্যয় করে এটি সূক্ষ্ম করে তুলেছি।

ফলস্বরূপ, nউপাদানগুলি সন্নিবেশ করতে O(n)সময় লাগে ।

অনুশীলন বিশ্লেষণের জন্য অন্যান্য কৌশলগুলি এখানে ব্যাখ্যা করা হয়েছে


1

প্রথমত: এটি প্রোগ্রামের রানটাইম বিশ্লেষণ করার একটি কৌশল, অ্যালগরিদমের জন্য বাস্তবায়ন কৌশল নয়।

আপনার তালিকায় উল্লিখিত উদাহরণটি একটি ভাল: অ্যারে-ব্যাকড ডেটা স্ট্রাকচারে একটি আইটেম যুক্ত করা। প্রতিটি একক সংযোজন অপারেশনের জন্য সবচেয়ে খারাপ ক্ষেত্রে বিদ্যমান সমস্ত আইটেম অনুলিপি করতে হয়। এই ধরণের বিশ্লেষণটি খুব হতাশাব্যঞ্জক, কারণ আপনি যদি তা করতে না হন তবে যদি আপনি কোনও বুদ্ধিমান আকার পরিবর্তন করতে কৌশলটি ব্যবহার করেন (কিছুটা x> 1.0 দ্বারা আকারটি গুণমান)। বিশ্লেষণটি তখন বলেছে যে আপনার প্রতি ও (এন ^ 2) আবদ্ধ রয়েছে - প্রতি আইটেম টাইম এন আইটেমগুলিতে ও (এন) - যখন আসল রানটাইমটি কেবল ও (এন) থাকে।

যদি আপনি sertedোকানো সমস্ত আইটেমের তুলনায় পুনরায় আকারের ব্যয়কে গড় করেন (যার বেশিরভাগটির পুনরায় আকার দেওয়ার প্রয়োজন নেই) আপনি আনুষাঙ্গিক বিশ্লেষণ করছেন। এমোরিটাইজড বিশ্লেষণের ফলাফল ও (এন) বাউন্ডে আসে যা অ্যালগোরিদমের আসল আচরণের সাথে মেলে।

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