ফিবোনাচি সিকোয়েন্সের গণ্য জটিলতা


330

আমি বিগ-ও স্বরলিপিটি বুঝতে পারি, তবে অনেকগুলি কার্যের জন্য কীভাবে এটি গণনা করতে হয় তা আমি জানি না। বিশেষত, আমি ফিবোনাচি অনুক্রমের নিষ্পাপ সংস্করণের গণ্য জটিলতা বের করার চেষ্টা করছিলাম:

int Fibonacci(int n)
{
    if (n <= 1)
        return n;
    else
        return Fibonacci(n - 1) + Fibonacci(n - 2);
}

ফিবোনাচি সিকোয়েন্সের গণ্য জটিলতা কী এবং এটি কীভাবে গণনা করা হয়?



3
এখানে ম্যাট্রিক্স ফর্ম বিভাগটি দেখুন: en.wikiki.org/wiki/Fibonacci_number । এই ম্যাট্রিক্স doing n করে (একটি চতুর উপায়ে) আপনি F (N) কে O (lg n) তে গণনা করতে পারবেন। কৌতুকটি পাওয়ার ফাংশনটি করে। এই সঠিক সমস্যা এবং কীভাবে ও (এলজি এন) এ সমাধান করবেন সে সম্পর্কে আইটিউনসুতে খুব ভাল বক্তৃতা রয়েছে। কোর্সটি এমআইটি লেকচার 3 এর অ্যালগরিদমগুলির অন্তর্ভুক্ত (এটির অ্যাবসোল্টলি ফ্রি তাই আপনার আগ্রহী কিনা তা পরীক্ষা করে দেখুন)
এলি

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

এখানে একটি খুব সুন্দর ভিডিও যা পুনরাবৃত্তিমূলক বাস্তবায়নের নিম্ন বাউন্ড জটিলতা (2 ^ n / 2) এবং উপরের আবদ্ধ জটিলতা (2 ^ n) উভয় সম্পর্কে আলোচনা করে।
আরবিটি

1
পার্শ্ব-নোটের ক্যোয়ারী: ফিবোনাচি সিরিজের নির্বিকার প্রয়োগটি কি পুনরাবৃত্ত বা পুনরাবৃত্ত হওয়া উচিত ?
আরবিটি

উত্তর:


374

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

T(n<=1) = O(1)

T(n) = T(n-1) + T(n-2) + O(1)

আপনি এই পুনরাবৃত্তি সম্পর্কটি সমাধান করুন (উদাহরণস্বরূপ, উত্পাদনকারী ফাংশনগুলি ব্যবহার করে) এবং আপনি উত্তরটি শেষ করবেন।

বিকল্পভাবে, আপনি পুনরাবৃত্তি গাছটি আঁকতে পারেন, যার গভীরতা থাকবে nএবং স্বজ্ঞাতভাবে নির্ধারণ করবে যে এই ফাংশনটি সংক্ষিপ্তভাবে । তারপরে আপনি আনয়ন দ্বারা নিজের অনুমানটি প্রমাণ করতে পারেন।O(2n)

বেস: n = 1সুস্পষ্ট

সুতরাং , ধরে নিনT(n-1) = O(2n-1)

T(n) = T(n-1) + T(n-2) + O(1) যা সমান

T(n) = O(2n-1) + O(2n-2) + O(1) = O(2n)

যাইহোক, একটি মন্তব্যে উল্লিখিত হিসাবে, এটি কড়া আবদ্ধ নয়। এই ফাংশন সম্পর্কে একটি মজার তথ্য হ'ল টি (এন) asympototically উভয় হিসাবে সংজ্ঞায়িত হিসাবে মান হিসাবে একইFib(n)

f(n) = f(n-1) + f(n-2)

পুনরাবৃত্তি গাছের পাতাগুলি সর্বদা ফিরে আসবে ১। পুনরাবৃত্ত গাছের পাতাগুলিতে যে Fib(n)সমস্ত মানের পাতার গণনা সমান হয় তার যোগফল। যেহেতু প্রতিটি পাতা গণনা করতে O (1) নেবে, T(n)সমান Fib(n) x O(1)। ফলস্বরূপ, এই ফাংশনটির জন্য আঁটসাঁট আবদ্ধতা হ'ল ফিবোনাচি ক্রম নিজেই (~ )। আমি উপরে উল্লিখিত হিসাবে উত্পন্ন ফাংশন ব্যবহার করে আপনি এই আঁটসাঁট আবদ্ধ খুঁজে পেতে পারেন।θ(1.6n)


29
প্রবর্তন দ্বারা প্রমাণ। খুশী হলাম। +1
অ্যান্ড্রু রোলিংস

যদিও আবদ্ধ না হয়।
ক্যাপ্টেন সেগফল্ট

@ ক্যাপিনে সেগফল্ট: হ্যাঁ। আমি উত্তরটি পরিষ্কার করে দিয়েছি। আমি উপরে লিখেছিলাম বলে আপনি জিএফ পদ্ধতিটি ব্যবহার করে আঁটসাঁট পোশাকটি পাবেন।
মেহরদাদ আফশারি

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

1
"বিকল্পভাবে, আপনি পুনরাবৃত্তি গাছটি আঁকতে পারেন, যার গভীরতা এন থাকবে এবং স্বজ্ঞাতভাবে নির্ধারণ করতে হবে যে এই ফাংশনটি asyptotically O (2n)।" - এটা সম্পূর্ণ মিথ্যা। সময়ের জটিলতা হ'ল ও (সুবর্ণ_আরটিও ^ n)। এটি কখনই ও (2 ^ n) এর কাছাকাছি আসে না। আপনি যদি অনন্তের দিকে এগিয়ে যেতে পারেন তবে এটি ও (সোনার_রেটিও ^ n) এর কাছাকাছি চলে যেতে পারে। এটিই একটি অ্যাসিপোটোট যা হয়, দুটি লাইনের মধ্যকার দূরত্বটি 0
বব

133

নিজেকে জিজ্ঞাসা করুন যে কত বিবৃতি F(n)সম্পূর্ণ করতে কার্যকর করতে হবে।

কারণ F(1), উত্তরটি 1(শর্তাধীন প্রথম অংশ)।

কারণ F(n), উত্তরটি হ'ল F(n-1) + F(n-2)

সুতরাং কোন ফাংশন এই নিয়ম সন্তুষ্ট? একটি এন (একটি> 1) চেষ্টা করুন :

a n == a (n-1) + a (n-2)

একটি (এন -২) এর মাধ্যমে ভাগ করুন :

a 2 == a + 1

সমাধান করুন aএবং আপনি পান (1+sqrt(5))/2 = 1.6180339887, অন্যথায় স্বর্ণের অনুপাত হিসাবে পরিচিত ।

সুতরাং এটি ক্ষতিকারক সময় লাগে।


8
প্রবর্তন দ্বারা প্রমাণ। খুশী হলাম। +1
অ্যান্ড্রু রোলিংস

2
30 টির জন্য একটি উত্তরের উত্তর? :-) এটি 1 = এফ (1) = (1 + বর্গ (5)) / 2 অনুসরণ করে? এবং অন্যান্য সমাধান সম্পর্কে কি, (1-sqrt (5)) / 2?
কার্স্টেন এস

1
না, 1 1 + 1 সমান নয় The এই বিধিগুলি পূরণ করে এমন ক্রিয়াকলাপটি প্রশ্নের মধ্যে উল্লেখ করা হয়েছে।
molbdnilo

6
উত্তরটি ভুল নয়। এটা ঠিক তাত্পর্যপূর্ণভাবে। অন্য সমাধানটি নেতিবাচক তাই শারীরিকভাবে বোঝায় না।
দা টেং

10
কেউ কীভাবে ব্যাখ্যা করতে পারে যে কীভাবে একটি ^ n == a ^ (n-1) + a ^ (n-2) এই নিয়মগুলি সন্তুষ্ট করে? এটি ঠিক কীভাবে সন্তুষ্ট, দয়া করে নির্দিষ্ট করুন।
স্পষ্ট

33

আমি পগৌর এবং রিকার্ভের সাথে একমত, পুনরাবৃত্ত-ফাইবোনাকির জটিলতা হ'ল (2 ^ n)।

আমি বরং একটি সরলবাদী দ্বারা একই সিদ্ধান্তে পৌঁছেছি তবে আমি এখনও বৈধ যুক্তি বিশ্বাস করি।

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

সুতরাং, যখন F () কে একটি সংখ্যার জন্য আহ্বান করা হয়, 0 এবং n-1 এর মধ্যে একটি প্রদত্ত সংখ্যার জন্য F () বার বলা হয় আমরা 0 এর নিকটবর্তী হওয়ার সাথে সাথে বৃদ্ধি পায়।

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

n              *
n-1            **
n-2           ****  
...
2           ***********
1       ******************
0    ***************************

এখন, প্রশ্নটি হল, এই পিরামিডের গোড়াটি এন বাড়ার সাথে সাথে কতটা দ্রুত বাড়ছে?

আসুন একটি আসল কেস নেওয়া যাক, উদাহরণস্বরূপ F (6)

F(6)                 *  <-- only once
F(5)                 *  <-- only once too
F(4)                 ** 
F(3)                ****
F(2)              ********
F(1)          ****************           <-- 16
F(0)  ********************************    <-- 32

আমরা দেখতে পাচ্ছি যে এফ (0) 32 বার কল হয়ে যায়, এটি 2 ^ 5, যা এই নমুনা ক্ষেত্রে 2 ^ (এন -1) হয়।

এখন, আমরা জানতে চাই যে F (x) কতবার কল হয় এবং আমরা দেখতে পাচ্ছি যে F (0) নাম্বারটি কতবার ডাকা হয় এটি কেবল তারই একটি অংশ।

যদি আমরা মানসিকভাবে F * (6) থেকে F (2) লাইনগুলিকে F (1) লাইনে স্থানান্তরিত করি তবে আমরা দেখতে পাচ্ছি যে F (1) এবং F (0) রেখা এখন দৈর্ঘ্যে সমান equal যার অর্থ, n = 6 2x32 = 64 = 2 ^ 6 হলে মোট বার F () কল হয়।

জটিলতার ক্ষেত্রে এখন:

O( F(6) ) = O(2^6)
O( F(n) ) = O(2^n)

3
এফ (3) 4 বার নয়, কেবল 3 বার কল হয়। দ্বিতীয় পিরামিডটি ভুল।
অবিক

2
এফ (3) = 3, এফ (2) = 5, এফ (1) = 8, এফ (0) = 5. আমি এটিকে ঠিক করব, তবে আমি মনে করি না যে আমি এই উত্তরটি সম্পাদনা করে উদ্ধার করতে পারি।
বার্নহার্ড বার্কার

31

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

ফলস্বরূপ, আপনি সরাসরি ফিবোনাচি সিরিজের খুব কাছাকাছি যেতে পারেন:

Fib(N) = (1/sqrt(5)) * 1.618^(N+1) (approximately)

এবং বলুন, অতএব, নিষ্পাপ অ্যালগরিদমের সবচেয়ে খারাপ ক্ষেত্রে পারফরম্যান্স

O((1/sqrt(5)) * 1.618^(N+1)) = O(1.618^(N+1))

পিএস: আপনি আরও তথ্য চাইলে উইকিপিডিয়ায় এনথ ফিবোনাচি নম্বরের বদ্ধ ফর্ম প্রকাশের আলোচনা রয়েছে is


কোর্সের লিঙ্কের জন্য ধন্যবাদ। খুব সুন্দর পর্যবেক্ষণও
SwimBikeRun

16

আপনি এটিকে প্রসারিত করতে পারেন এবং একটি ভিজ্যুয়ালাইজেশন করতে পারেন

     T(n) = T(n-1) + T(n-2) <
     T(n-1) + T(n-1) 

     = 2*T(n-1)   
     = 2*2*T(n-2)
     = 2*2*2*T(n-3)
     ....
     = 2^i*T(n-i)
     ...
     ==> O(2^n)

1
আমি প্রথম লাইন বুঝতে পারি। তবে <শেষে চরিত্রের চেয়ে কম কেন ? কীভাবে পেলেন T(n-1) + T(n-1)?
কাজী ইরফান

@ কোয়াজিআইরফান: ডি এটি একটি তীর। -> [(এর চেয়ে কম নয়) শেষ পংক্তি সম্পর্কে বিভ্রান্তির জন্য দুঃখিত]। প্রথম লাইনের জন্য, ভাল ... T(n-1) > T(n-2)তাই আমি পরিবর্তন করতে পারি T(n-2)এবং রাখতে পারি T(n-1)। আমি কেবলমাত্র একটি উচ্চতর বাউন্ড পাব যা এখনও এর জন্য বৈধT(n-1) + T(n-2)
টনি ট্যাননস

10

এটি নিম্ন প্রান্তে 2^(n/2)এবং উপরের প্রান্তে 2 by n দ্বারা আবদ্ধ (অন্যান্য মন্তব্যে উল্লিখিত)। এবং সেই পুনরাবৃত্তিমূলক বাস্তবায়নের একটি আকর্ষণীয় তথ্য হ'ল এটির নিজেরাই ফাইব (এন) এর একটি আঁটসাঁট অ্যাসিম্পটোটিক আবদ্ধ। এই তথ্যগুলির সংক্ষিপ্তসার করা যেতে পারে:

T(n) = Ω(2^(n/2))  (lower bound)
T(n) = O(2^n)   (upper bound)
T(n) = Θ(Fib(n)) (tight bound)

যদি আপনি চান তবে তার বন্ধ ফর্মটি ব্যবহার করে শক্ত বাঁধা আরও কমানো যেতে পারে ।


10

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

IN | OUT | TOT | LEAF | INT
 1 |   1 |   1 |   1  |   0
 2 |   1 |   1 |   1  |   0
 3 |   2 |   3 |   2  |   1
 4 |   3 |   5 |   3  |   2
 5 |   5 |   9 |   5  |   4
 6 |   8 |  15 |   8  |   7
 7 |  13 |  25 |  13  |  12
 8 |  21 |  41 |  21  |  20
 9 |  34 |  67 |  34  |  33
10 |  55 | 109 |  55  |  54

অবিলম্বে কী লাফিয়ে উঠবে তা হ'ল পাতার নোডের সংখ্যা fib(n)। আরও কয়েকটি পুনরাবৃত্তিটি লক্ষ্য করার জন্য কীটি অভ্যন্তরীণ নোডের সংখ্যা fib(n) - 1। সুতরাং নোডের মোট সংখ্যা 2 * fib(n) - 1

যেহেতু আপনি গুণাগুণগুলি শ্রেণিবদ্ধ করার সময় গুণাগুণগুলি বাদ দিন, চূড়ান্ত উত্তরটি θ(fib(n))


(না, আমি আমার হোয়াইটবোর্ডে একটি পূর্ণ 10-গভীর কল ট্রি
আঁকিনি

ভাল লাগল, আমি ভাবছিলাম ফিব কত অতিরিক্ত সংযোজন পুনরাবৃত্তি করবে। এটি কেবলমাত্র 1একক সঞ্চয়ের Fib(n)সময় যুক্ত করে না, তবে আকর্ষণীয় যে এটি এখনও ঠিক θ(Fib(n))
পিটার কর্ডেস

নোট করুন যে কয়েকটি (সর্বাধিক) পুনরাবৃত্তকরণ বাস্তবায়নগুলি যোগ করতে সময় ব্যয় করে 0, যদিও: পুনরাবৃত্তি বেস কেসগুলি হয় 0এবং 1কারণ তারা তা করে Fib(n-1) + Fib(n-2)। সুতরাং সম্ভবত এই লিঙ্কটি3 * Fib(n) - 2 থেকে পাওয়া উত্তর নোডের মোট সংখ্যার জন্য আরও নির্ভুল, না 2 * Fib(n) - 1
পিটার কর্ডেস

পাতার নোডগুলিতে আমি একই ফলাফল পেতে পারি না। 0 থেকে শুরু: এফ (0) -> 1 পাতা (নিজেই); এফ (1) -> 1 টি পাতা (নিজেই); এফ (2) -> 2 টি পাতা (এফ (1) এবং এফ (0)); এফ (3) -> 3 টি পাতা; এফ (5) -> 8 টি পাতা; ইত্যাদি
alexlomba87

9

পুনরাবৃত্ত অ্যালগরিদমের সময়ের জটিলতা পুনরাবৃত্তি গাছ আঁকার মাধ্যমে আরও ভালভাবে অনুমান করা যায়, এই ক্ষেত্রে অঙ্কন পুনরাবৃত্তি গাছের পুনরাবৃত্তির সম্পর্ক টি (এন) = টি (এন -1) + টি (এন -২) + ও (1) নোট করুন প্রতিটি পদক্ষেপে ও (1) অর্থ ধ্রুবক সময় নেয়, যেহেতু এটি যদি ব্লকের মধ্যে এন এর মান পরীক্ষা করার জন্য কেবল একটি তুলনা করে।

          n
   (n-1)      (n-2)
(n-2)(n-3) (n-3)(n-4) ...so on

এখানে বলা যাক উপরের গাছের প্রতিটি স্তরকে আমি তাই বোঝাতে চাইছি,

i
0                        n
1            (n-1)                 (n-2)
2        (n-2)    (n-3)      (n-3)     (n-4)
3   (n-3)(n-4) (n-4)(n-5) (n-4)(n-5) (n-5)(n-6)

আই এর নির্দিষ্ট মান বলতে পারি, গাছটি শেষ হয়, সেই ক্ষেত্রে যখন এনআই = 1 হবে, সুতরাং i = n-1, মানে গাছের উচ্চতা এন -1 হবে। এবার দেখতে দিন যে গাছের প্রতিটি এন স্তরগুলির জন্য কতটা কাজ করা হচ্ছে N দ্রষ্টব্য যে প্রতিটি পদক্ষেপে পুনরুক্তির সম্পর্কের ক্ষেত্রে বর্ণিত হিসাবে (1) সময় নেয়।

2^0=1                        n
2^1=2            (n-1)                 (n-2)
2^2=4        (n-2)    (n-3)      (n-3)     (n-4)
2^3=8   (n-3)(n-4) (n-4)(n-5) (n-4)(n-5) (n-5)(n-6)    ..so on
2^i for ith level

যেহেতু i = n-1 প্রতিটি স্তরে কাজ করা গাছের উচ্চতা হবে

i work
1 2^1
2 2^2
3 2^3..so on

সুতরাং সম্পূর্ণ করা প্রতিটি কাজ প্রতিটি স্তরে সম্পন্ন কাজের সমষ্টি হবে, তাই i = n-1 হওয়ার পরে এটি 2 ^ 0 + 2 ^ 1 + 2 ^ 2 + 2 ^ 3 ... + 2 ^ (এন -1) হবে। জ্যামিতিক সিরিজের দ্বারা এই যোগফল 2 ^ n, সুতরাং এখানে মোট সময়ের জটিলতা হ'ল (2 ^ n)


2

ঠিক আছে, আমার মতে এটি O(2^n)এই ফাংশনে যেমন পুনরাবৃত্তি যথেষ্ট সময় নিচ্ছে (বিভাজন এবং বিজয়)। আমরা দেখি যে, উপরের ফাংশন পর্যন্ত পাতার পন্থা যখন আমরা স্তর পৌঁছানোর হয় একটি গাছ চলতে থাকবে F(n-(n-1))অর্থাত F(1)। সুতরাং, এখানে যখন আমরা গাছের প্রতিটি গভীরতার সাথে যে সময় জটিলতার মুখোমুখি হই তা সন্ধান করি, সমষ্টি সিরিজটি হ'ল:

1+2+4+.......(n-1)
= 1((2^n)-1)/(2-1)
=2^n -1

যে আদেশ 2^n [ O(2^n) ]


1

গণনাতে পুনরাবৃত্তি হওয়ার কারণে ফিবোনাকির নিখুঁত পুনরাবৃত্তি সংস্করণটি নকশা দ্বারা উদ্ঘাটিত:

মূলে আপনি কম্পিউটিং করছেন:

F (n) F (n-1) এবং F (n-2) এর উপর নির্ভর করে

F (n-1) আবার F (n-2) এবং এফ (এন -3) এর উপর নির্ভর করে

F (n-2) আবার এফ (এন -3) এবং এফ (এন -4) এর উপর নির্ভর করে

তারপরে আপনার প্রতিটি স্তরে 2 পুনরাবৃত্ত কলগুলি রয়েছে যা গণনায় প্রচুর ডেটা নষ্ট করে দিচ্ছে, সময় ফাংশনটি এরকম দেখাবে:

টি (এন) = টি (এন -1) + টি (এন -2) + সি, সি ধ্রুবক সহ

টি (এন -1) = টি (এন -2) + টি (এন -3)> টি (এন -2) তখন

টি (এন)> ২ * টি (এন -২)

...

টি (এন)> 2 ^ (n / 2) * টি (1) = ও (2 ^ (এন / 2))

এটি কেবলমাত্র একটি নিম্ন সীমা যা আপনার বিশ্লেষণের উদ্দেশ্যে যথেষ্ট হওয়া উচিত তবে আসল সময় ফাংশন একই ফিবোনাচি সূত্রের দ্বারা ধ্রুবকের ফ্যাক্টর এবং বদ্ধ ফর্মটি সোনালি অনুপাতের ক্ষতিকারক হিসাবে পরিচিত।

এছাড়াও, আপনি ডায়নামিক প্রোগ্রামিং ব্যবহার করে ফিবোনাকির অনুকূলিত সংস্করণগুলি দেখতে পারেন:

static int fib(int n)
{
    /* memory */
    int f[] = new int[n+1];
    int i;

    /* Init */
    f[0] = 0;
    f[1] = 1;

    /* Fill */
    for (i = 2; i <= n; i++)
    {
        f[i] = f[i-1] + f[i-2];
    }

    return f[n];
}

এটি অপ্টিমাইজড এবং কেবলমাত্র এন পদক্ষেপগুলি করে তবে এটি ক্ষতিকারক।

সমস্যা সমাধানের জন্য लागत ফাংশনগুলি ইনপুট আকার থেকে ধাপের সংখ্যায় সংজ্ঞায়িত করা হয়। আপনি যখন ফিবোনাকির গতিশীল সংস্করণ দেখতে পাবেন ( টেবিলটি গণনা করার জন্য n পদক্ষেপ) বা কোনও সংখ্যাটি প্রাইম ( সিক্রিট (এন) সংখ্যার বৈধ বিভাজনগুলি বিশ্লেষণ করার জন্য ) কিনা তা জানা সবচেয়ে সহজ অ্যালগরিদম । আপনি ভাবতে পারেন যে এই অ্যালগোরিদমগুলি ও (এন) বা ও (স্ক্র্যাট (এন)) তবে এটি কেবল নিম্নলিখিত কারণে সঠিক নয়: আপনার অ্যালগরিদমের ইনপুটটি একটি সংখ্যা: এন , বাইনারি স্বরলিপি ব্যবহার করে কোনও জন্য ইনপুট আকার পূর্ণসংখ্যা n হল লগ 2 (এন) এর পরিবর্তিত পরিবর্তনশীল change

m = log2(n) // your real input size

ইনপুট আকারের ফাংশন হিসাবে পদক্ষেপের সংখ্যাটি খুঁজে বার করুন

m = log2(n)
2^m = 2^log2(n) = n

তারপরে ইনপুট আকারের ফাংশন হিসাবে আপনার অ্যালগরিদমের ব্যয় হ'ল:

T(m) = n steps = 2^m steps

আর এই কারণেই ব্যয়টি ব্যয়যুক্ত।


1

ডায়াগ্রামিং ফাংশন কল দ্বারা গণনা করা সহজ। কেবল এন এর প্রতিটি মানের জন্য ফাংশন কলগুলি যুক্ত করুন এবং সংখ্যাটি কীভাবে বাড়বে তা দেখুন।

বিগ হে হ'ল (জেড ^ n) যেখানে জেড স্বর্ণের অনুপাত বা প্রায় 1.62।

লিওনার্দো সংখ্যা এবং ফিবোনাচি সংখ্যা উভয়ই এই অনুপাতের দিকে এগিয়ে যায় যেমন আমরা এন।

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

একগুচ্ছ জটিল গণিতের দরকার নেই। কেবল ডায়াগ্রামটি নীচে ফাংশন কল করে এবং একটি ফাংশন নম্বরগুলিতে ফিট করে।

অথবা আপনি যদি সোনালি অনুপাতের সাথে পরিচিত হন তবে আপনি এটিকে স্বীকৃতি দেবেন।

এই উত্তরটি স্বীকৃত উত্তরের চেয়ে বেশি সঠিক যা দাবি করেছে যে এটি f (n) = 2 approach n এ পৌঁছাবে। এটা কখনও হবে না। এটি f (n) = সুবর্ণ_রটিও approach n এ পৌঁছাবে।

2 (2 -> 1, 0)

4 (3 -> 2, 1) (2 -> 1, 0)

8 (4 -> 3, 2) (3 -> 2, 1) (2 -> 1, 0)
            (2 -> 1, 0)


14 (5 -> 4, 3) (4 -> 3, 2) (3 -> 2, 1) (2 -> 1, 0)
            (2 -> 1, 0)

            (3 -> 2, 1) (2 -> 1, 0)

22 (6 -> 5, 4)
            (5 -> 4, 3) (4 -> 3, 2) (3 -> 2, 1) (2 -> 1, 0)
                        (2 -> 1, 0)

                        (3 -> 2, 1) (2 -> 1, 0)

            (4 -> 3, 2) (3 -> 2, 1) (2 -> 1, 0)
                        (2 -> 1, 0)

1
আপনি কি সোনার অনুপাত সম্পর্কে এই দাবির জন্য কোনও উত্স সরবরাহ করতে পারেন?
নিকো হাজেস

-1

http://www.ics.uci.edu/~eppstein/161/960109.html

সময় (এন) = 3 এফ (এন) - 2


4
আপনি কেবল একটি লিঙ্ক পোস্ট করার চেয়ে নিজের উত্তরটি ব্যাখ্যা করতে পারলে এটিও দুর্দান্ত।
ম্যাগনিলেেক্স

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