অ্যালগরিদম বিশ্লেষণের যাদুটির পিছনে কি কোনও সিস্টেম আছে?


159

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

অন্যদিকে, অন্য একটি সাধারণ প্রশ্নের উত্তরগুলি কয়েকটি উদাহরণ সহ বৃহত্তর চিত্রটি (বিশেষত অ্যাসিপোটোটিক বিশ্লেষণ সম্পর্কিত) ব্যাখ্যা করে, তবে কীভাবে আপনার হাতকে নোংরা করবেন not

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

এটি একটি রেফারেন্স প্রশ্ন হয়ে উঠবে বলে মনে করা হচ্ছে যা প্রাথমিকভাবে নির্দেশকারীদের নির্দেশ করতে ব্যবহার করা যেতে পারে; তাই এর বিস্তৃত স্বাভাবিকের চেয়ে বেশি সুযোগ। দয়া করে সাধারণ, সতর্কতার সাথে উপস্থাপিত উত্তরগুলি দেওয়ার বিষয়ে খেয়াল রাখুন যা কমপক্ষে একটি উদাহরণ দ্বারা চিত্রিত হয়েছে তবে তবুও অনেকগুলি পরিস্থিতি coverেকে রাখে। ধন্যবাদ!


3
এই জাতীয় দীর্ঘ পোস্ট লেখার পক্ষে সুবিধাজনক করার জন্য স্ট্যাকএডিটের লেখক (গুলি) এবং আমার বিটা পাঠকরা ফ্রাঙ্কডব্লু , জুহো , গিলস এবং সেবাস্তিয়ানকে আগের খসড়াগুলির বেশ কয়েকটি ত্রুটিগুলি খুঁজে বের করতে সাহায্য করার জন্য ধন্যবাদ।
রাফায়েল

1
আরে @ রাফেল, এটি দুর্দান্ত জিনিস। আমি ভেবেছিলাম আমি এটিকে চারদিকে ঘুরতে পিডিএফ হিসাবে এক সাথে রাখার পরামর্শ দেব? এই ধরণের জিনিসটি সত্যিই দরকারী রেফারেন্সে পরিণত হতে পারে।
4:25 এ পেয়েছি

1
@ ঝাঁকুনি: ধন্যবাদ, আমি আপনার পক্ষে খুশী! আপাতত, আমি পছন্দ করি যে এই পোস্টের একটি লিঙ্কটি চারদিকে প্রচারিত হবে। তবে এসই ব্যবহারকারীর বিষয়বস্তুটি "সিসি বাই-সা 3.0 এর অধীনে অ্যাট্রিবিউশনের সাথে লাইসেন্সযুক্ত" (পৃষ্ঠা পাদলেখ দেখুন) যাতে যে কোনও ব্যক্তি যতক্ষণ এট্রিবিউশন দেওয়া হয় ততক্ষণ এ থেকে পিডিএফ তৈরি করতে পারে।
রাফেল

2
আমি এ বিষয়ে বিশেষভাবে সক্ষম নই, তবে এটাই কি স্বাভাবিক যে কোনও অ্যাওভারে মাস্টার উপপাদ্যের কোনও উল্লেখ নেই ?
বাবু

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

উত্তর:


134

গণিতে কোড অনুবাদ করা

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

উদাহরণ: বুদবুর্গের তুলনা

প্রদত্ত অ্যারে বাছাই করে এমন এই অ্যালগরিদম বিবেচনা করুন A:

 bubblesort(A) do                   1
  n = A.length;                     2
  for ( i = 0 to n-2 ) do           3
    for ( j = 0 to n-i-2 ) do       4
      if ( A[j] > A[j+1] ) then     5
        tmp    = A[j];              6
        A[j]   = A[j+1];            7
        A[j+1] = tmp;               8
      end                           9
    end                             10
  end                               11
end                                 12

ধরা যাক আমরা সাধারণ বাছাই করা অ্যালগরিদম বিশ্লেষণ সম্পাদন করতে চাই, এটি উপাদান তুলনার সংখ্যা (লাইন 5) গণনা করা হয়। আমরা অবিলম্বে মনে রাখবেন যে এই পরিমাণ অ্যারের বিষয়বস্তু উপর নির্ভর করে না Aশুধুমাত্র তার দৈর্ঘ্যের উপর, । সুতরাং আমরা (নেস্টেড) -লুপগুলি বেশ আক্ষরিকভাবে (নেস্টেড) রাশিতে অনুবাদ করতে পারি ; লুপ ভেরিয়েবল যোগফল পরিবর্তনশীল হয় এবং পরিসীমা বহন করে। আমরা পেতে:nfor

Ccmp(n)=i=0n2j=0ni21==n(n1)2=(n2) ,

যেখানে লাইন 5 এর প্রতিটি সম্পাদনের জন্য ব্যয় হয় (যা আমরা গণনা করি)।1

উদাহরণ: বুদবুদে অদলবদল

আমি বোঝাতে করব subprogram যে লাইন নিয়ে গঠিত করার দ্বারা এই subprogram (একবার) নির্বাহ জন্য খরচ। সি আই , জেPi,jijCi,j

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

উপরের মতো অনুরূপ অনুবাদ সহ আমরা নিম্নলিখিত সূত্রে আসি:

Cswaps(A)=i=0n2j=0ni2C5,9(A(i,j))

( i , j ) পি 5 , 9A(i,j) অ্যারে রাষ্ট্রীয় সামনে উল্লেখ করে এর -th পুনরাবৃত্তির ।(i,j)P5,9

নোট করুন যে আমি প্যারামিটার হিসাবে পরিবর্তে ব্যবহার করি ; আমরা শীঘ্রই কেন তা দেখতে পাবেন। আমি ও প্যারামিটার হিসাবে এবং যোগ না যেহেতু ব্যয়গুলি এখানে তাদের উপর নির্ভর করে না ( ইউনিফর্ম ব্যয় মডেলটিতে , যা); সাধারণভাবে, তারা কেবল পারে।এন আই জে সি 5 , 9AnijC5,9

স্পষ্টতই, costs এর মূল্য এর সামগ্রীর উপর নির্ভর করে (মানগুলি এবং , বিশেষত) সুতরাং আমাদের তার জন্য অ্যাকাউন্ট করতে হবে। এখন আমরা একটি চ্যালেঞ্জের মুখোমুখি: আমরা কীভাবে "" " ? ঠিক আছে, আমরা স্পষ্টর লিখিত সামগ্রীর উপর নির্ভরতা তৈরি করতে পারি :সি 5 , 9P5,9AA[j]A[j+1]C5,9A

C5,9(A(i,j))=C5(A(i,j))+{1,A(i,j)[j]>A(i,j)[j+1]0,else

প্রদত্ত যে কোনও ইনপুট অ্যারের জন্য, এই ব্যয়গুলি যথাযথভাবে সংজ্ঞায়িত করা হয়েছে তবে আমরা আরও সাধারণ বিবৃতি চাই; আমাদের আরও দৃump় অনুমান করা দরকার। আসুন তিনটি সাধারণ মামলা তদন্ত করি।

  1. সবচেয়ে খারাপ অবস্থা

    কেবল সমষ্টিটি দেখে এবং , আমরা ব্যয়ের জন্য একটি তুচ্ছ ওপরের সীমাটি পেতে পারি:C5,9(A(i,j)){0,1}

    Cswaps(A)i=0n2j=0ni21=n(n1)2=(n2)

    কিন্তু এটি কি ঘটতে পারে , অর্থাত্ এই উপরের সীমাবদ্ধতার জন্য কোনও অর্জন করা যায়? যেমনটি দেখা যাচ্ছে, হ্যাঁ: আমরা যদি জোড়া বিযুক্ত পৃথক উপাদানগুলির একটি বিপরীতভাবে সাজানো অ্যারে ইনপুট করি তবে প্রতিটি পুনরাবৃত্তি অবশ্যই একটি সোয়াপ সম্পাদন করবে ¹ অতএব, আমরা বুব্বলসোর্টের অদলবদলের সঠিক নিকৃষ্টতম সংখ্যাটি পেয়েছি।A

  2. সেরা কেস

    বিপরীতে, একটি তুচ্ছ নিম্ন আবদ্ধ আছে:

    Cswaps(A)i=0n2j=0ni20=0

    এটিও ঘটতে পারে: ইতিমধ্যে বাছাই করা একটি অ্যারেতে বুদ্বোসোর্ট একক অদলবদল চালায় না।

  3. গড় কেস

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

    তারপরে, আমরা আমাদের ব্যয়গুলি এর মতো আবারও লিখতে পারি:

    E[Cswaps]=1n!Ai=0n2j=0ni2C5,9(A(i,j))

    এখন আমাদের অঙ্কের সাধারণ কারসাজির বাইরে যেতে হবে। অ্যালগরিদম দিকে তাকিয়ে মাধ্যমে আমরা লক্ষ করুন যে, প্রত্যেক swap 'র ঠিক একটি সরিয়ে ফেলা বিপর্যয় মধ্যে (আমরা শুধুমাত্র কখনও neighbours³ অদলবদল)। যে সঞ্চালিত অদলবদল সংখ্যা, হয় ঠিক inversions সংখ্যা এর । সুতরাং, আমরা অভ্যন্তর দুটি যোগফল প্রতিস্থাপন এবং পেতে পারেনAAinv(A)A

    E[Cswaps]=1n!Ainv(A)

    আমাদের জন্য ভাগ্যবান, গড় বিপর্যয়ের সংখ্যা নির্ধারিত হয়েছে

    E[Cswaps]=12(n2)

    যা আমাদের চূড়ান্ত ফলাফল। মনে রাখবেন যে এটি সবচেয়ে খারাপের জন্য প্রায় অর্ধেক খরচ।


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

সাধারণ পদ্ধতি

আমরা উদাহরণে দেখেছি যে আমাদের নিয়ন্ত্রণ কাঠামোটি গণিতে অনুবাদ করতে হবে; আমি অনুবাদ বিধিগুলির একটি সাধারণ উপহার উপস্থাপন করব will আমরা আরও দেখেছি যে প্রদত্ত যে কোনও উপ-প্রোগ্রামের দাম বর্তমান অবস্থার উপর নির্ভর করে , এটি (মোটামুটি) ভেরিয়েবলের বর্তমান মান। যেহেতু অ্যালগরিদম (সাধারণত) রাষ্ট্র পরিবর্তন করে, তাই সাধারণ পদ্ধতিটি উল্লেখ করার জন্য কিছুটা জটিল is আপনি যদি বিভ্রান্তি বোধ শুরু করেন তবে আমি আপনাকে উদাহরণটিতে ফিরে যেতে বা আপনার নিজের তৈরি করার পরামর্শ দিচ্ছি।

আমরা বর্তমান অবস্থা দিয়ে চিহ্নিত করি (এটিকে পরিবর্তনশীল কার্যভারের সেট হিসাবে কল্পনা করুন)। আমরা যখন রাষ্ট্র শুরু হওয়া কোনও প্রোগ্রাম করি, তখন আমরা (প্রদত্ত সমাপ্তি) অবস্থায় শেষ করি।ψ ψ / পিψPψψ/PP

  • স্বতন্ত্র বিবৃতি

    কেবল একটি একক বিবৃতি দেওয়া S;, আপনি এটির জন্য । এটি সাধারণত একটি ধ্রুবক ফাংশন হবে।CS(ψ)

  • প্রকাশ

    আপনার যদি Eফর্মটির একটি অভিব্যক্তি থাকে E1 ∘ E2(বলুন, একটি গাণিতিক এক্সপ্রেশন যেখানে সংযোজন বা গুণ হতে পারে, আপনি পুনরাবৃত্তভাবে ব্যয় যোগ করতে পারেন:

    CE(ψ)=c+CE1(ψ)+CE2(ψ)

    মনে রাখবেন যে

    • অপারেশন ব্যয় স্থির না হতে পারে তবে এবং এবং এর মানগুলির উপর নির্ভর করেcE1E2
    • ভাবের মূল্যায়ন রাষ্ট্রকে অনেক ভাষায় পরিবর্তন করতে পারে,

    সুতরাং আপনি এই নিয়ম সঙ্গে নমনীয় হতে পারে।

  • ক্রম

    প্রোগ্রামগুলির Pক্রম হিসাবে একটি প্রোগ্রাম দেওয়া Q;R, আপনি এতে ব্যয় যোগ করেন

    CP(ψ)=CQ(ψ)+CR(ψ/Q)

  • Conditionals কে

    Pফর্মের একটি প্রোগ্রাম দেওয়া if A then Q else R end, ব্যয়গুলি রাজ্যের উপর নির্ভর করে:

    CP(ψ)=CA(ψ)+{CQ(ψ/A),A evaluates to true under ψCR(ψ/A),else

    সাধারণভাবে, মূল্যায়ন Aরাষ্ট্রের খুব ভাল পরিবর্তন করতে পারে, তাই পৃথক শাখাগুলির ব্যয়ের জন্য আপডেট।

  • -Loops জন্য

    Pফর্ম একটি প্রোগ্রাম দেওয়া for x = [x1, ..., xk] do Q end, ব্যয় বরাদ্দ

    CP(ψ)=cinit_for+i=1kcstep_for+CQ(ψi{x:=xi})

    যেখানে প্রক্রিয়াকরণ সামনে রাষ্ট্র মান সঙ্গে পুনরাবৃত্তির পর অর্থাৎ সেট হচ্ছে , ..., ।ψiQxixx1xi-1

    লুপ রক্ষণাবেক্ষণের জন্য অতিরিক্ত ধ্রুবকগুলি নোট করুন; লুপ ভেরিয়েবলটি তৈরি করতে হবে ( ) এবং এর মানগুলি নির্ধারিত করতে হবে ( )। এটি যেহেতু প্রাসঙ্গিকcinit_forcstep_for

    • পরের কম্পিউটিং xiব্যয়বহুল হতে পারে এবং
    • forখালি শরীরের সাথে একটি- লুপ (যেমন একটি নির্দিষ্ট ব্যয়ের সাথে সেরা-কেস সেটিংকে সরল করার পরে) এর পুনরুক্তি সম্পাদন করে তবে শূন্যের দাম নেই।
  • যদিও-Loops

    Pফর্ম একটি প্রোগ্রাম দেওয়া while A do Q end, ব্যয় বরাদ্দ

    CP(ψ) =CA(ψ)+{0,A evaluates to false under ψCQ(ψ/A)+CP(ψ/A;Q), else

    অ্যালগরিদম পরিদর্শন করে, এই পুনরাবৃত্তিটি প্রায়শই ফর-লুপগুলির জন্য সমান পরিমাণ হিসাবে উপস্থাপিত হতে পারে।

    উদাহরণ: এই সংক্ষিপ্ত অ্যালগরিদম বিবেচনা করুন:

    while x > 0 do    1
      i += 1          2
      x = x/2         3
    end               4
    

    নিয়ম প্রয়োগ করে, আমরা পাই

    C1,4({i:=i0;x:=x0}) =c<+{0,x00c+=+c/+C1,4({i:=i0+1;x:=x0/2}), else

    স্বতন্ত্র বিবৃতিতে কিছু ধ্রুবক ব্যয় with সহ আমরা পরোক্ষভাবে অনুমান যে এই না না রাষ্ট্র উপর নির্ভর করে (মান এবং ); এটি "বাস্তবতায়" সত্য হতে পারে বা নাও পারে: ওভারফ্লো সম্পর্কে চিন্তা করুন!cix

    এখন আমরা এই পুনরাবৃত্তি সমাধান করতে হবে । আমরা নোট করি যে দু'টি পুনরাবৃত্তির সংখ্যা লুপের শরীরের দামের উপর নির্ভর করে না , তাই আমরা এটিকে ফেলে দিতে পারি। আমরা এই পুনরাবৃত্তি সঙ্গে বাকি:C1,4i

    C1,4(x)={c>,x0c>+c+=+c/+C1,4(x/2), else

    এটি প্রাথমিক উপায়গুলির সাথে সমাধান করে

    C1,4(ψ)=log2ψ(x)(c>+c+=+c/)+c> ,

    পুরো রাষ্ট্রকে প্রতীকীভাবে পুনঃপ্রণয়ন; যদি , তবে ।ψ={,x:=5,}ψ(x)=5

  • প্রক্রিয়া কল

    কিছু পরামিতি (গুলি) এর জন্য Pফর্মের একটি প্রোগ্রাম দেওয়া হয়েছে যেখানে (নামযুক্ত) প্যারামিটার সহ একটি পদ্ধতি রয়েছে , খরচ নির্ধারণ করুনM(x)xMp

    CP(ψ)=ccall+CM(ψglob{p:=x})

    অতিরিক্ত ধ্রুবক (আবার বাস্তবে উপর নির্ভর করে !) নোট করুন । প্রকৃত কলগুলি কীভাবে আসল মেশিনে প্রয়োগ করা হয়, এবং কখনও কখনও রানটাইমকেও প্রাধান্য দেয় (উদাহরণস্বরূপ ফিবোনাচি নম্বর পুনরাবৃত্তিটি নির্মোহভাবে মূল্যায়ন করে) এর কারণে প্রক্রিয়াগুলি ব্যয়বহুল।ccallψ

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

    উদাহরণ: পদ্ধতিটি বিবেচনা করুন

    fac(n) do                  
      if ( n <= 1 ) do         1
        return 1               2
      else                     3
        return n * fac(n-1)    4
      end                      5
    end                        
    

    বিধি (গুলি) অনুসারে আমরা পাই:

    Cfac({n:=n0})=C1,5({n:=n0})=c+{C2({n:=n0}),n01C4({n:=n0}), else=c+{creturn,n01creturn+c+ccall+Cfac({n:=n01}), else

    নোট করুন যে আমরা বৈশ্বিক রাষ্ট্রকে অবজ্ঞা করি, যেমন facস্পষ্টভাবে কোনও অ্যাক্সেস করে না। এই নির্দিষ্ট পুনরাবৃত্তিটি সমাধান করা সহজ

    Cfac(ψ)=ψ(n)(c+creturn)+(ψ(n)1)(c+ccall)

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

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

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

অ্যাসিম্পোটিক ব্যয়ের উপর একটি নোট

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

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

অ্যাসিম্পোটিক বিশ্লেষণ এই পদ্ধতির সাথে কীভাবে সম্পর্কিত তা এখানে রয়েছে।

  1. প্রভাবশালী ক্রিয়াকলাপগুলি চিহ্নিত করুন (যেগুলি ব্যয়কে উদ্বুদ্ধ করে), এটি বেশিরভাগ ক্ষেত্রে ঘটে এমন ক্রিয়াকলাপগুলি (ধ্রুবক কারণগুলি অবধি)। বুদবুর্গ্ট উদাহরণে, একটি সম্ভাব্য পছন্দ হ'ল লাইন 5 এর সাথে তুলনা করা।

    বিকল্পভাবে, প্রাথমিক ক্রিয়াকলাপের জন্য সমস্ত ধ্রুবককে তাদের সর্বোচ্চ (উপরে থেকে) শ্রদ্ধার সাথে আবদ্ধ করুন। তাদের সর্বনিম্ন (নীচে থেকে) এবং সাধারণ বিশ্লেষণ সম্পাদন করুন।

  2. ব্যয় হিসাবে এই ক্রিয়াকলাপের কার্যকর গণনা ব্যবহার করে বিশ্লেষণ সম্পাদন করুন।
  3. সরলকরণের সময় অনুমানের অনুমতি দিন। আপনার লক্ষ্য যদি উপরের দিকের ( ) শ্রদ্ধা হয় তবে কেবল উপরের থেকে অনুমানের অনুমতি দেওয়ার জন্য যত্ন নিন । নীচের থেকে যদি আপনি নিম্ন সীমা ( ) চান।ΩOΩ

আপনি ল্যান্ডাউ প্রতীকগুলির অর্থ বুঝতে পেরেছেন তা নিশ্চিত করুন । মনে রাখবেন যে তিনটি ক্ষেত্রেই এই ধরনের সীমানা বিদ্যমান ; ব্যবহার একটি খারাপ-কেস বিশ্লেষণ পরোক্ষভাবে না।O

আরও পড়া

অ্যালগরিদম বিশ্লেষণে আরও অনেক চ্যালেঞ্জ এবং কৌশল রয়েছে। এখানে কিছু প্রস্তাবিত পড়া হয়।

চারপাশে অনেকগুলি ট্যাগ ট্যাগ করা যা এই জাতীয় কৌশল ব্যবহার করে।


1
অ্যাসিপোটোটিক বিশ্লেষণের জন্য মাস্টার উপপাদকের (এবং এর এক্সটেনশনগুলি ) জন্য কিছু রেফারেন্স এবং উদাহরণ হতে পারে
নিকোস এম

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

@ নিকোস এম: আমার $ 0.02: যখন মাস্টার তত্ত্বটি বিভিন্ন পুনরাবৃত্তির জন্য কাজ করে, অন্য অনেকের পক্ষে তা হবে না; পুনরাবৃত্তিগুলি সমাধান করার জন্য মানক পদ্ধতি রয়েছে। এবং এখানে অ্যালগরিদম রয়েছে যার জন্য আমাদের চলমান সময় দেওয়ার একটি পুনরাবৃত্তিও হবে না; কিছু উন্নত গণনা কৌশল প্রয়োজন হতে পারে। ভাল গণিতের পটভূমির জন্য কারও জন্য আমি সেজউইক এবং ফ্লাজোলেটের এক্সেলেনস বই "অ্যালগরিদমের বিশ্লেষণ" পরামর্শ দিচ্ছি, যার "পুনরাবৃত্তি সম্পর্ক", "উত্পন্নকরণের কার্যাদি" এবং "অ্যাসিপোটোটিক আনুমানিকতা" এর মতো অধ্যায় রয়েছে। ডেটা স্ট্রাকচারগুলি মাঝে মধ্যে উদাহরণ হিসাবে প্রদর্শিত হয়, এবং ফোকাসগুলি পদ্ধতিগুলিতে থাকে!
জয়

@ রাফেল আমি অপারেশনাল সিনটিক্সের উপর ভিত্তি করে এই "গণিতে অনুবাদিত কোড" পদ্ধতির জন্য ওয়েবে কোনও উল্লেখ খুঁজে পাচ্ছি না। আপনি যে বই, কাগজ বা নিবন্ধের সাথে আরও আনুষ্ঠানিকভাবে এটি সম্পর্কিত কোনও রেফারেন্স সরবরাহ করতে পারেন? বা ক্ষেত্রে এটি আপনার দ্বারা বিকাশ করা হয়েছে, আপনি গভীরতা আরও কিছু আছে?
Wyvern666

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

29

বিবৃতি কার্যকর করার গণনা

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

পদ্ধতি

এটি নীতিগত দিক থেকে বেশ সহজ:

  1. প্রতিটি বিবৃতি একটি নাম / নম্বর বরাদ্দ করুন।
  2. প্রতিটি বিবৃতি কিছু ব্যয় ।SiCi
  3. প্রতিটি বিবৃতি এর নির্বাহের সংখ্যা নির্ধারণ করুন ।Siei
  4. মোট ব্যয় গণনা

    C=ieiCi

আপনি যে কোনও সময়ে অনুমান এবং / অথবা প্রতীকী পরিমাণ সন্নিবেশ করতে পারেন, শ্রমকে দুর্বল করে। সেই অনুযায়ী ফলাফল সাধারণীকরণ।

সচেতন থাকুন যে পদক্ষেপ 3 নির্বিচারে জটিল হতে পারে। পেতে সাধারণত আপনাকে ( ) অনুমান যেমন " " এর সাথে কাজ করতে হয়।e77O(nlogn)

উদাহরণ: গভীরতা-প্রথম অনুসন্ধান

নিম্নলিখিত গ্রাফ-ট্র্যাভারসাল অ্যালগরিদম বিবেচনা করুন:

dfs(G, s) do
  // assert G.nodes contains s
  visited = new Array[G.nodes.size]     1
  dfs_h(G, s, visited)                  2
end 

dfs_h(G, s, visited) do
  foo(s)                                3
  visited[s] = true                     4

  v = G.neighbours(s)                   5
  while ( v != nil ) do                 6
    if ( !visited[v] ) then             7
      dfs_h(G, v, visited)              8
    end
    v = v.next                          9
  end
end

আমরা ধরে নিই যে (undirected) গ্রাফ দেওয়া হয় অন্তিক তালিকা নোড উপর । যাক প্রান্ত সংখ্যা হতে হবে।{0,,n1}m

কেবলমাত্র অ্যালগরিদমটি দেখে আমরা দেখতে পাই যে কিছু বিবৃতি অন্যদের মতো সমানভাবে কার্যকর হয়। কার্যকর করার গণনার জন্য আমরা কিছু স্থানধারক , এবং প্রবর্তন :ABCei

i123456789eiAABBBB+CCB1C

বিশেষত, যেহেতু 8 লাইনে প্রতিটি পুনরাবৃত্তি কল কল লাইন 3 (এবং একটি আসল আসল কল দ্বারা সৃষ্ট ) এর কারণ ঘটায় । তদ্ব্যতীত, কারণ শর্তটি পুনরাবৃত্তি প্রতি একবার একবার পরীক্ষা করাতে হবে তবে এটি ছেড়ে যাওয়ার জন্য আরও একবার।e8=e31foodfse6=e5+e7while

এটি পরিষ্কার যে । এখন, একটি নির্ভুলতার প্রমাণের সময় আমরা দেখাব যে নোডের জন্য একবারে মৃত্যুদন্ড কার্যকর করা হয়; অর্থাৎ, । তবে তারপরে, আমরা প্রতিটি সংলগ্ন তালিকার ঠিক একবারে পুনরাবৃত্তি করি এবং প্রতিটি প্রান্তটি দুটি করে প্রবেশদ্বারকে বোঝায় (প্রতিটি ঘটনার নোডের জন্য একটি); আমরা মোট পুনরাবৃত্তি পাই । এটি ব্যবহার করে, আমরা নিম্নলিখিত টেবিলটি উত্পন্ন করি:A=1fooB=nC=2m

i123456789ei11nnn2m+n2mn12m

এটি আমাদের মোট ব্যয়ের দিকে নিয়ে যায়

C(n,m)=(C1+C2C8)+ n(C3+C4+C5+C6+C8)+ 2m(C6+C7+C9).

জন্য উপযুক্ত মানগুলি ইনস্ট্যান্ট করে আমরা আরও বেশি কংক্রিট ব্যয় করতে পারি। উদাহরণস্বরূপ, আমরা যদি মেমরি অ্যাক্সেসগুলি (প্রতি শব্দ) গণনা করতে চাই, আমরা ব্যবহার করবCi

i123456789Cin00110101

এবং পেতে

Cmem(n,m)=3n+4m

আরও পড়া

আমার অন্যান্য উত্তরের নীচে দেখুন ।


8

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

  1. বিদ্যমান বিশ্লেষণগুলি থেকে আমরা জানি এমন কৌশলগুলি ব্যবহার করুন যেমন আমরা যে পুনরাবৃত্তিগুলি বুঝি তার উপর ভিত্তি করে সীমা নির্ধারণ করি বা সংখ্যার / সংহতগুলি আমরা গণনা করতে পারি।
  2. অ্যালগরিদম এমন কিছুতে পরিবর্তন করুন যা আমরা বিশ্লেষণ করতে জানি।
  3. সম্পূর্ণ নতুন পদ্ধতির সাথে আসুন।

1
আমি অনুমান করি যে আমি এটি দেখতে পাচ্ছি না কীভাবে এটি দরকারী এবং নতুন, অন্যান্য উত্তরগুলির উপরে এবং উপরে যুক্ত করে। কৌশলগুলি ইতিমধ্যে অন্যান্য উত্তরে বর্ণিত হয়েছে। এটি আমার কাছে প্রশ্নের উত্তরের চেয়ে কমেন্টের মতো বেশি দেখাচ্ছে।
ডিডাব্লু

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

4
@ রাফেল অ্যারি "প্রোগ্রাম দ্বারা চালিত নির্দেশাবলীর সংখ্যা" (যা আপনার উত্তর ঠিকানাগুলি যা) এর পরিবর্তে বাউন্ড হিসাবে একটি স্বীকৃত ফাংশন নিয়ে আসার কথা বলছেন। সাধারণ ক্ষেত্রে হয় একটি শিল্প - কোন অ্যালগরিদম যে সব আলগোরিদিম একটি nontrivial বাউন্ড সঙ্গে আসা পর্যন্ত করতে পারেন। সাধারণ ক্ষেত্রে অবশ্য জানা কৌশলগুলির একটি সেট (যেমন মাস্টার উপপাদ্য)।
গিলস

@ গিলস যদি সমস্ত কিছু যার জন্য কোনও অ্যালগরিদম না থাকে তবে শিল্পকর্মীরা (বিশেষত প্রোগ্রামারগুলিতে) আরও খারাপ বেতন দেওয়া হত।
রাফেল

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