কীভাবে এই বাছাই করা অ্যালগরিদম Θ (n³) এবং Θ (n²) নয়, সবচেয়ে খারাপ অবস্থা?


52

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

void F3() {
    for (int i = 1; i < n; i++) {
        if (A[i-1] > A[i]) {
            swap(i-1, i)
            i = 0
        }
    }
}

এটি পরিষ্কার নাও হতে পারে তবে এখানে অ্যারের আকার যা আমরা বাছাই করার চেষ্টা করছি।nA

যাই হোক না কেন, শিক্ষক সহকারী ক্লাসকে ব্যাখ্যা করেছিলেন যে এই অ্যালগরিদমটি সময়ে (সবচেয়ে খারাপ ক্ষেত্রে, আমি বিশ্বাস করি), কিন্তু আমি বিপরীতভাবে সাজানো অ্যারে দিয়ে যতবারই যাই না কেন, আমার কাছে মনে হয় এটি হওয়া উচিত and ।Θ ( n 2 ) Θ ( n 3 )Θ(n3)Θ(n2)Θ(n3)

কেউ আমাকে ব্যাখ্যা করতে সক্ষম হবেন কেন এটি Θ(n3) এবং Θ(n2) ?


আপনি বিশ্লেষণের জন্য একটি কাঠামোগত পদ্ধতির বিষয়ে আগ্রহী হতে পারেন ; একটি প্রমাণ নিজেই খোঁজার চেষ্টা করুন!
রাফেল

নিজেকে বাস্তবায়নের জন্য এটি প্রয়োগ করুন এবং পরিমাপ করুন। বিপরীত ক্রমে 10,000 টি উপাদান সহ একটি অ্যারে অনেক মিনিট সময় নেয় এবং বিপরীত ক্রমে 20,000 উপাদান সহ একটি অ্যারে প্রায় আট গুণ বেশি সময় নেয়।
gnasher729

@ gnasher729 আপনি ভুল নন, তবে আমার সমাধানটি আলাদা: আপনি যদি নিজের বাউন্ড প্রমাণ করার চেষ্টা করেন তবে আপনি অবশ্যই ব্যর্থ হয়ে যাবেন যা আপনাকে কিছুটা ভুল বলবে। (। অবশ্যই, এক উভয় ষড়যন্ত্র / ফিটিং স্পষ্টভাবে দ্রুত অনুমান প্রত্যাখ্যান জন্য করতে পারেন, কিন্তু কম নির্ভরযোগ্য ।। যতক্ষন পর্যন্ত আপনি আনুষ্ঠানিক / কাঠামোবদ্ধ বিশ্লেষণের জন্য কিছু ধরনের কাজ হিসেবে কাজ কোন ক্ষতি নির্ভর প্লটে যেখানে কষ্ট শুরু হয়।)O(n2)
রাফায়েল

1
i = 0বিবৃতিটির কারণে
njzk2

উত্তর:


60

এই অ্যালগরিদম আবার লিখতে পারেন

  1. Aআপনি কোনও বিপরীতমুখী না পাওয়া পর্যন্ত স্ক্যান করুন ।
  2. যদি আপনি একটি খুঁজে পান তবে অদলবদল করুন এবং আবার শুরু করুন।
  3. যদি কিছুই না থাকে তবে শেষ করুন।

এখন বিপরীতে সর্বাধিক প্রতিটি খুঁজে পেতে আপনার একটি লিনিয়ার-সময় স্ক্যান প্রয়োজন - সুতরাং সবচেয়ে খারাপ অবস্থায় চলমান সময়টি হ'ল । প্যাটার্ন-ম্যাচিং পদ্ধতির অনেকগুলি সাফল্যের সাথে সাথে ট্রিপ করার সাথে সাথে একটি সুন্দর শিক্ষণ উদাহরণ!Θ(এন3)(n2)Θ(n2)Θ(n3)

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

যেমন @ gnasher729 যথাযথভাবে মন্তব্য করেছে, ইনপুটটি বাছাই করার সময় চলমান সময়ের বিশ্লেষণ করে সবচেয়ে খারাপ-চলমান সময়টি দেখতে সহজ (যদিও এই ইনপুটটি সম্ভবত সবচেয়ে খারাপ পরিস্থিতি নয়)।[ 1 , 2 , , এন , 2 এন , 2 এন - 1 , , এন + 1 ]Ω(n3)[1,2,,n,2n,2n1,,n+1]

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


14
যদি আপনি এমন একটি অ্যারে নেন যেখানে প্রথম অর্ধেকটি 1 থেকে n / 2 উপরের ক্রমযুক্ত সংখ্যার সমন্বিত থাকে এবং দ্বিতীয়ার্ধটি বিপরীত ক্রমে n থেকে n / 2 + 1 পর্যন্ত হয় তবে স্পষ্টতই আপনার কমপক্ষে n / 2 প্রয়োজন প্রতিটি বিপর্যয় সন্ধান করার পদক্ষেপগুলি এবং সেগুলির মধ্যে প্রায় (n / 2) ^ 2/2 থাকবে। এবং এটি সম্ভবত সবচেয়ে খারাপ পরিস্থিতি নয়।
gnasher729

@ অ্যান্টনিরোসেলো এটির একটি স্ট্যান্ডার্ড ফলাফল (ক্রম সংযোজনে সংমিশ্রণে)। সংক্ষেপে, বিপরীতভাবে সাজানো অ্যারেগুলিতে বিপর্যয়ের সংখ্যা গণনা করুন (এটি কি সবচেয়ে খারাপ যে এটি স্পষ্টত স্পষ্ট?); এটি গাউসের যোগফল।
রাফেল

একটি মনে রাখতে হবে যে যাই হোক না কেন, এর আংশিক পরিমাণগুলি সর্বদা , এটি কেবলমাত্র সহগ যা দ্রুত নেমে যায়: (যথেষ্ট বড় সহগ note note নোট করুন )। সমস্যাটি হ'ল, সহগের বিষয়ে চিন্তা করে না। Θ ( n α + 1 ) n কে = 0 কে α1Θ(nα)Θ(nα+1)1k=0nkα1α+1nα+1 Θ1α+1Θ
yo '

2
@yo 'এবং এটি উত্তরটির সাথে সম্পর্কিত (বা প্রশ্ন) কীভাবে?
রাফেল

7

এটি সম্পর্কে ভাবার বিকল্প উপায় হ'ল iএটি পুনরায় সেট করার আগে সর্বাধিক মানটি কী হয়ে যায়। এটি, যেমন এটি দেখা যাচ্ছে, পূর্ববর্তী সাজানোর ক্রমটি কীভাবে Aঅ্যালগরিদমের সঞ্চালনের সময়কে প্রভাবিত করে সে সম্পর্কে যুক্তিযুক্ত কারণটিকে এটি আরও সোজা করে তোলে ।

বিশেষত, লক্ষ্য করুন যে যখন iএটির নতুন সর্বাধিক মান নির্ধারণ করা হয়, আসুন এটিকে এন বলুন, অ্যারেটি [A[0], ..., A[N-1]]আরোহী ক্রমে সাজানো হয়।

সুতরাং যখন আমরা A[N]মিশ্রণে উপাদান যুক্ত করব ?

গণিত:

ওয়েল, এটা অবস্থানে ফিট বলে দেয় । তারপর আমরা প্রয়োজন লুপ পুনরাবৃত্তিও (যা আমি বোঝাতে করব ) এটিকে সরাতে স্থাপন করতে , পুনরাবৃত্তিও এটিকে সরান স্থাপন করতে , এবং সাধারণভাবে: এন পদক্ষেপগুলি এন - 1 এন + ( এন - 1 ) এন - 2pNNstepsN1N+(N1)N2

stepsN(pN)=N+(N1)+(N2)++(pN+1)=12(N(N+1)pN(pN+1))

এলোমেলোভাবে সাজানো অ্যারের জন্য, প্রতিটি জন্য distribution , on এ অভিন্ন বিতরণ করে : { 0 , 1 , , এন } এনpN{0,1,,N}N

E(stepsN(pN))=a=1NP(pN=a)stepsN(a)=a=1N1N12(N(N+1)a(a+1))=12(N(N+1)13(N+1)(N+2))=13(N21)=Θ(N2)

ফলেরহবারের সূত্র বা নীচে ওল্ফ্রাম আলফা লিঙ্কটি ব্যবহার করে যোগফল দেখানো যেতে পারে।

বিপরীতভাবে সাজানো অ্যারের জন্য, সমস্ত জন্য এবং আমরা পাই:এনpN=0N

stepsN(pN)=12N(N+1)

ঠিক যেমন, অন্য কোনও মানের চেয়ে কঠোরভাবে বেশি সময় ।pN

ইতিমধ্যে সাজানো অ্যারের জন্য, এবং , নিম্ন-অর্ডার শর্তাদি প্রাসঙ্গিক হয়ে উঠবে।pN=NstepsN(pN)=0

মোট সময়:

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

এবং আবারও প্রত্যাশার লিনিয়ারিটি এবং ফাউলহাবরের সূত্র ব্যবহার করে:

প্রত্যাশিত মোট পদক্ষেপ=(Σএন=1এনধাপএন(পিএন))=Σএন=1এন(ধাপএন(পিএন))=Θ(এন3)

অবশ্যই, যদি জন্য কিছু কারণে করা হয় না সবসময় (যেমন অ্যারে আমরা ইতিমধ্যেই খুব সাজানো হচ্ছে কাছাকাছি এ বেরাচ্ছেন বিতরণের), তারপর এই প্রয়োজন না কেস হতে। তবে এটি অর্জনে এটি খুব নির্দিষ্ট বিতরণ নেয় !Θ ( এন 2 ) পি এনধাপএন(পিএন)Θ(এন2)পিএন

প্রাসঙ্গিক পড়া:


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

বিভিন্ন ; আমি ল্যান্ডাউকে বুঝিয়েছি। Ω
রাফেল

3

দাবি পরিত্যাগী:

এটি কোনও প্রমাণ নয় (মনে হয় কিছু লোক মনে করে আমি এটি পোস্ট করেছিলাম)। এটি কেবলমাত্র একটি সামান্য পরীক্ষা যা ওপেন এই কার্যভার সম্পর্কে তার সন্দেহগুলি সমাধান করার জন্য সম্পাদন করতে পারে:

বিপরীতভাবে সাজানো অ্যারে দিয়ে আমি যতবার এটি নিয়ে যাই না কেন, আমার কাছে মনে হয় এটি হওয়া উচিত and ।Θ ( n 3 )Θ(এন2)Θ(n3)

এই জাতীয় একটি সহজ কোডের সাথে, এবং মধ্যে পার্থক্যটি চিহ্নিত করা শক্ত হবে না এবং অনেকগুলি ব্যবহারিক ক্ষেত্রে এটি শিকারী যাচাই বা প্রত্যাশাগুলি সামঞ্জস্য করার জন্য একটি কার্যকর পন্থা।Θ ( n 3 )Θ(n2)Θ(এন3)


@ রাফেল ইতিমধ্যে আপনার প্রশ্নের উত্তর দিয়েছে, তবে কেবল কিক্সের জন্য, এই প্রোগ্রামটির আউটপুট এ জিনুপ্লট স্ক্রিপ্ট ব্যবহার করে এবং এর মানগুলি এবং নিম্নলিখিত প্লটগুলি উত্পাদিত করেছে ( প্রথমটি হল সাধারণ স্কেল এবং দ্বিতীয়টি লগ-লগ স্কেল):(এক্স)=একটিএক্সB ইংরেজী বর্ণমালার দ্বিতীয় অক্ষর+ +এক্স2.992237276923392,997961668332222,99223727692339

সাধারণ loglog

আমি আশা করি এটি সহায়তা করে¨


2
আপনি এই মানগুলির সাথে যে কোনও ফাংশন ফিট করতে পারেন। এখানেও দেখুন ।
রাফেল

3
@ রাফেল যদি আপনি এইভাবে নিটপিক করতে না চান তবে না, আপনি কোনও ফাংশন ফিট করতে পারবেন না (উদাহরণস্বরূপ আপনি কোনও যুক্তিসঙ্গত নির্ভুলতার সাথে ধ্রুবক ফাংশনটি ফিট করতে পারবেন না)। এটি কোনও প্রমাণ নয়, তবে ইতিমধ্যে একটি উত্তর রয়েছে যা স্কেচ সরবরাহ করে। দরকারীতার জন্য, আপনার নিজের লিঙ্কটি আমি উদ্ধৃত করতে পারি: "আমাকে একমত হতে হবে যে এটি একটি খুব দরকারী পদ্ধতির যা এমনকি কখনও কখনও অপ্রয়োজনীয়"। তদুপরি, ওপি বলেছিল যে সে ভেবেছিল এটি পরিবর্তে , তাই কেন পরীক্ষা-নিরীক্ষা করে দেখতে হবে না যে তার কুঁচকটি সঠিক ছিল কিনা? চলছে। Θ ( n 3 )Θ(এন2)Θ(এন3)
dtldarek

2
এটি প্রমাণ দেয় যে অ্যালগোরিদম তবে কেন প্রশ্নটি জিজ্ঞাসা করে । এটি ঘটনার ব্যাখ্যা চাইছে, এটির কোনও নিশ্চিতকরণ নয়। Θ(এন3)
ডেভিড রিচার্বি

2
@ ডেভিডরিচার্বি এর অর্থ কি এই উত্তরটি কার্যকর নয়?
dtldarek

3
@ ম্যাগিক্সসন এটি একটি প্রশ্নোত্তর সাইট, কোনও ফোরাম নয়। আমরা চারদিকে আলোচনা নয়, প্রশ্নের উত্তর খুঁজছি।
ডেভিড রিচার্বি

3

ধরুন আপনার অ্যারে আছে

array a[10] = {10,8,9,6,7,4,5,2,3,0,1}

আপনার অ্যালগরিদম নিম্নলিখিতটি করে

Scan(1) - Swap (10,8) => {8,10,9,6,7,4,5,2,3,0,1}  //keep looking at "10"
Scan(2) - Swap (10,9) => {8,9,10,6,7,4,5,2,3,0,1}
...
Scan(10) - Swap(10,1) => {8,9,6,7,4,5,2,3,0,1,10}

মূলত এটি অ্যারের শেষের দিকে সর্বাধিক উপাদানটিতে চলে যায় এবং এটি করে এটি প্রতিটি স্ক্যানের ওভার শুরু করে কার্যকরভাবে O(n^2)চালায় .. কেবলমাত্র একটি উপাদানটির জন্য। তবে, এন উপাদান রয়েছে তাই আমাদের এই nবার পুনরাবৃত্তি করতে হবে । এটি কোনও আনুষ্ঠানিক প্রমাণ নয়, তবে চলমান সময় কেন এটি "অপ্রাতিষ্ঠানিক" উপায়ে বুঝতে সহায়তা করে O(n^3)


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

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

যেহেতু আমি একটি পতাকায় আমার মন্তবীর জবাব পেয়েছি (এটি করবেন না!): "সবচেয়ে খারাপ ক্ষেত্রে লিনিয়ার আচরণ করে না!" - আমি বলতে চাইছি সবচেয়ে খারাপ অবস্থার অপারেটরের বীজগণিতীয় বৈশিষ্ট্য। মোটামুটিভাবে বলতে গেলে আপনি ওয়ারস্টকেস (1 + ... + n) ব্যবহার করছেন "" "ওয়ারস্টকেস (1) + ... + ওয়ারস্টকেস (এন) কিন্তু এই পরিচয়টি ধারণ করে না।
রাফেল

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

0

যুক্তি মনে হচ্ছে অ্যারেতে উপাদানগুলি একটি আরোহণ ক্রমানুসারে বাছাই করা হচ্ছে।

ধরুন ক্ষুদ্রতম সংখ্যাটি অ্যারের শেষে রয়েছে (এ [এন])। এটি সঠিক স্থানে আসার জন্য - (n + (n-1) + (n-2) + ... 3 + 2 + 1) অপারেশন প্রয়োজন। = ও (এন 2)

অ্যারেতে একটি একক উপাদানের জন্য ও (এন 2) অপস প্রয়োজন। সুতরাং, এন eements এর জন্য এটি ও (এন 3)।


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

দুর্দান্ত ব্যাখ্যা। এটি সমস্যার উপর একটি ভিন্ন, আরও স্বজ্ঞাত দৃষ্টিভঙ্গি সরবরাহ করে, অন্য উত্তরে ব্যাখ্যা করা হয়নি। (খুব সংক্ষিপ্ত এবং সহজে বোঝার জন্য উল্লেখ না করা to)
2501

1
@ 2501 না, এটি ভুল। ডিজকস্ট্রার অ্যালগরিদমে এই "স্বজ্ঞাত" ব্যবহার করার চেষ্টা করুন এবং আপনি চতুর্ভুজ রানটাইম পাবেন (নোডের সংখ্যায়), যা ভুল।
রাফায়েল

@ রাফেল না, ঠিক আছে, উত্তরে বর্ণিত হয়েছে। এই ব্যাখ্যাটি অন্যদের জন্য নয়, এই অ্যালগরিদমের পক্ষে কাজ করে। যদিও এটি তাদের পক্ষে ভুল হতে পারে, এই দাবিটি প্রমাণ দেয় না যে এটির জন্য এটি ভুল।
2501

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