ইউক্লিডের অ্যালগোরিদমের সময় জটিলতা


101

ইউক্লিডের সবচেয়ে বড় সাধারণ ডিনোমিনেটর অ্যালগরিদমের সময় জটিলতা কী তা সিদ্ধান্ত নিতে আমার অসুবিধা হচ্ছে। সিউডো-কোডের এই অ্যালগরিদমটি হ'ল:

function gcd(a, b)
    while b ≠ 0
       t := b
       b := a mod b
       a := t
    return a

এটি একটি এবং উপর নির্ভর করে বলে মনে হচ্ছে । আমার চিন্তাভাবনা হ'ল সময় জটিলতা হ'ল (একটি% বি)। এটা কি ঠিক? এটি লেখার আরও ভাল উপায় আছে কি?


14
নথ টিএওসিপি, খণ্ড 2 দেখুন - তিনি বিস্তৃত কভারেজ দেন। জাস্ট এফডাব্লুআইডাব্লু, কয়েকটি জোয়ার: এটি আনুপাতিক নয় a%b। সবচেয়ে খারাপ অবস্থা হ'ল যখন aএবং bপর পরের ফিবোনাচি সংখ্যাগুলি।
জেরি কফিন

4
@ জেরি কফিন নোট: আপনি যদি সবচেয়ে খারাপ পরিস্থিতিটি আরও আনুষ্ঠানিক পদ্ধতিতে প্রমাণ করতে চান, তবে সমাপ্তির আগে এন-ত্রিমূলক পদক্ষেপটি প্রমাণ করার বিষয়টি বিবেচনা করুন, গাণিতিক আবেগের সাথে কমপক্ষে জি-সিডি গুনের চেয়ে এনবি-ফাইওনাচি সংখ্যাটি বড় হওয়া উচিত।
মাইগড

উত্তর:


76

ইউক্লিডের অ্যালগরিদমের সময়ের জটিলতা বিশ্লেষণের জন্য একটি কৌশলটি দুটি পুনরাবৃত্তির উপর দিয়ে যা ঘটে তা অনুসরণ করা:

a', b' := a % b, b % (a % b)

এখন a এবং b উভয়ই হ্রাস পাবে, কেবল একটির পরিবর্তে, যা বিশ্লেষণকে সহজ করে তোলে। আপনি এটি কেসগুলিতে ভাগ করতে পারেন:

  • ক্ষুদ্র একটি: 2a <= b
  • ক্ষুদ্র বি: 2b <= a
  • ছোট এ: 2a > bতবেa < b
  • ছোট বি: 2b > aকিন্তুb < a
  • সমান: a == b

এখন আমরা দেখাব যে প্রতিটি একক ক্ষেত্রে a+bকমপক্ষে একটি চতুর্থাংশ কমেছে :

  • ক্ষুদ্র এ: b % (a % b) < aএবং 2a <= bতাই bকমপক্ষে a+bকমিয়ে অর্ধেক কমেছে , তাই কমপক্ষে হ্রাস পেয়েছে25%
  • ক্ষুদ্র বি: a % b < bএবং 2b <= a, তাই aকমপক্ষে a+bকমিয়ে অর্ধেক কমেছে , তাই কমপক্ষে হ্রাস পেয়েছে25%
  • ছোট এ: bহয়ে যাবে b-a, যা কম b/2, a+bকমপক্ষে হ্রাস পাবে 25%
  • ছোট বি: aহয়ে উঠবে a-b, যা কম a/2, a+bকমপক্ষে হ্রাস পাবে 25%
  • সমান: a+bড্রপস 0যা স্পষ্টত a+bকমপক্ষে হ্রাস পাচ্ছে 25%

সুতরাং, কেস বিশ্লেষণ করে, প্রতিটি দ্বি-পদক্ষেপ a+bকমপক্ষে হ্রাস পায় 25%a+bনীচে নামতে বাধ্য হওয়ার আগে এটি ঘটতে পারে এমন সর্বাধিক সংখ্যক বার 1Sআমরা 0 টি আঘাত না করা পর্যন্ত মোট পদক্ষেপের সংখ্যা ( ) অবশ্যই সন্তুষ্ট হবে (4/3)^S <= A+B। এখন শুধু এটি কাজ:

(4/3)^S <= A+B
S <= lg[4/3](A+B)
S is O(lg[4/3](A+B))
S is O(lg(A+B))
S is O(lg(A*B)) //because A*B asymptotically greater than A+B
S is O(lg(A)+lg(B))
//Input size N is lg(A) + lg(B)
S is O(N)

সুতরাং পুনরাবৃত্তির সংখ্যা ইনপুট ডিজিটের সংখ্যায় রৈখিক। সিপিইউ নিবন্ধগুলির সাথে খাপ খায় এমন সংখ্যার জন্য, ধ্রুবক সময় গ্রহণের হিসাবে পুনরাবৃত্তিগুলির মডেল করা এবং ভান করা যে জিসিডির মোট চলমান সময়টি রৈখিক।

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


"B% (a% b) <a" দয়া করে কেন আপনি ব্যাখ্যা করতে পারেন?
মাইকেল হাইডেলবার্গ

4
@ মিশেলহাইডালবার্গ এর x % yচেয়ে বেশি হতে পারে না xএবং এর চেয়ে কম হতে হবে y। তাই a % bসবচেয়ে হয় a, অত্যাচার b % (a%b)কিছু সর্বাধিক যে নিচে হতে aএবং সেইজন্য চেয়ে সামগ্রিক কম a
ক্রেগ গিডনি

@ চিয়ারসান্থ.-আলফ আপনি পছন্দের পরিভাষায় কিছুটা পার্থক্যকে "গুরুতর ভুল" হিসাবে বিবেচনা করছেন? অবশ্যই আমি সিএস পরিভাষা ব্যবহার করেছি; এটি কম্পিউটার বিজ্ঞানের প্রশ্ন নির্বিশেষে, আমি "অঙ্কের সংখ্যা" বলার উত্তরটি পরিষ্কার করে দিয়েছি।
ক্রেগ গিডনি

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

শেষ অনুচ্ছেদটি ভুল। আপনি যদি প্রাসঙ্গিক টেলিস্কোপিং সিরিজের যোগফলটি যোগ করেন তবে আপনি দেখতে পাবেন যে সময়ের জটিলতা কেবলমাত্র O (n ^ 2), এমনকি আপনি স্কুলবুক চতুর্ভুজ-সময় বিভাগ অ্যালগরিদম ব্যবহার করলেও।
এমিল জেবেক

28

অ্যালগরিদম বিশ্লেষণের উপযুক্ত উপায়টি এর নিকৃষ্টতম পরিস্থিতিগুলি নির্ধারণ করে। ইউক্লিডিয়ান জিসিডির সবচেয়ে খারাপ পরিস্থিতি তখন ঘটে যখন ফিবোনাচি জুটি জড়িত থাকে। void EGCD(fib[i], fib[i - 1]), যেখানে i> 0।

উদাহরণস্বরূপ, আসুন যে ক্ষেত্রে লভ্যাংশ 55, এবং বিভাজক 34 হয় সেই ক্ষেত্রে বেছে নিন (মনে রাখবেন যে আমরা এখনও ফিবোনাকির সংখ্যা নিয়ে কাজ করছি)।

এখানে চিত্র বর্ণনা লিখুন

আপনি লক্ষ্য করতে পারেন যে, এই অপারেশনটি 8 টি পুনরাবৃত্তি (বা পুনরাবৃত্তি কল) করেছিল ted

121393 এবং 75025 নামক বৃহত্তর ফিবোনাচি সংখ্যা চেষ্টা করি try

এখানে চিত্র বর্ণনা লিখুন

আপনি আরও খেয়াল করতে পারেন যে প্রতিটি পুনরাবৃত্তি একটি ফিবোনাচি নম্বর দেয়। সে কারণেই আমাদের এতগুলি অপারেশন রয়েছে। আমরা কেবল ফিবোনাচি সংখ্যার সাথে একই ফলাফল পেতে পারি না।

অতএব, সময়ের জটিলতাটি এবার ছোট ওহ (উপরের আবদ্ধ) দ্বারা প্রতিনিধিত্ব করা হবে। নিম্ন সীমাটি স্বজ্ঞাতভাবে ওমেগা (1): উদাহরণস্বরূপ, 500 এর ক্ষেত্রে 2 দ্বারা বিভক্ত।

আসুন পুনরাবৃত্তি সম্পর্কটি সমাধান করুন:

এখানে চিত্র বর্ণনা লিখুন

আমরা তখন বলতে পারি যে ইউক্লিডিয়ান জিসিডি সর্বাধিক লগ (এক্সওয়াই) অপারেশন করতে পারে ।


4
আমি মনে করি এই বিশ্লেষণটি ভুল, কারণ বেসটি ইনপুটটির উপর নির্ভরশীল।
আশা করি

আপনি কি প্রমাণ করতে পারবেন যে নির্ভরশীল বেস কোনও সমস্যার প্রতিনিধিত্ব করে?
মোহাম্মদ এন্নাহাদি এল ইদ্রিসি

4
বেসটি হ'ল সুবর্ণ অনুপাত। কেন? কারণ এটি নোড (13,8) বনাম নড (8,5) গণনা করতে ঠিক এক অতিরিক্ত পদক্ষেপ নেয়। একটি স্থির x এর জন্য যদি y <x সবচেয়ে খারাপ ক্ষেত্রে পারফরম্যান্স হয় এক্স = ফাইব (এন + 1), y = ফাইব (এন)। এখানে y এক্স উপর নির্ভর করে, তাই আমরা কেবল এক্সকে দেখতে পারি।
স্টেপান

17

উইকিপিডিয়া নিবন্ধে এটির দুর্দান্ত চেহারা আছে ।

এমনকি এটি মান জোড়ার জন্য জটিলতার একটি দুর্দান্ত প্লট রয়েছে।

এটা হয় না O(a%b)

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


কি nপ্রতিনিধিত্ব করে?
IVlad

@ আইভ্ল্যাড: সংখ্যার সংখ্যা। আমি উত্তরটি পরিষ্কার করে দিয়েছি, ধন্যবাদ।
জোশড

ওপির অ্যালগরিদমের জন্য (বড় পূর্ণসংখ্যার) বিভাগগুলি ব্যবহার করে (এবং সাবস্ট্রাকশন নয়) এটি ও (এন ^ 2 লগ ^ 2 এন) এর মতো আরও কিছু।
আলেকজান্দ্রি সি

@ আলেকজান্দ্রে সি: মনে রাখবেন n = ln b। বিগ ইন্টের জন্য মডিউলসের নিয়মিত জটিলতা কী? এটি কি ও (লগ এন লগ ^ 2 লগ এন)
জোশড

@ জোশডি: এটি এমনই কিছু, আমি মনে করি যে আমি একটি লগ এন শব্দটি মিস করেছি, চূড়ান্ত জটিলতা (বিভাগগুলির সাথে অ্যালগরিদমের জন্য) এই ক্ষেত্রে ও (এন ^ 2 লগ ^ 2 এন লগ এন)।
আলেকজান্দ্রি সি

13

এখানে দেখুন ।

বিশেষত এই অংশ:

লামা দেখিয়েছেন যে n এর চেয়ে কম দুটি সংখ্যার জন্য সর্বশ্রেষ্ঠ সাধারণ বিভাজকের কাছে পৌঁছানোর জন্য প্রয়োজনীয় পদক্ষেপের সংখ্যা

বিকল্প পাঠ

সুতরাং O(log min(a, b))একটি ভাল উপরের আবদ্ধ।


4
পদক্ষেপের সংখ্যার জন্য এটি সত্য, তবে এটি প্রতিটি পদক্ষেপের জটিলতার জন্য অ্যাকাউন্ট করে না, যা সংখ্যাগুলির সংখ্যার সাথে স্কেল করে (ln n)।
জোশড

9

ইউক্লিডের অ্যালগোরিদমের রানটাইম জটিলতার এখানে স্বজ্ঞাত জ্ঞান। আনুষ্ঠানিক প্রমাণগুলি আলগোরিদিমগুলির পরিচিতি এবং টিএওসিপি ভোল্ট 2 এর মতো বিভিন্ন গ্রন্থে আচ্ছাদিত।

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

আমরা ও (লগ এন) তৈরি করতে পারি যেখানে এন = সর্বাধিক (ক, খ) আরও শক্ততর আবদ্ধ। ধরে নিন যে b> = a যাতে আমরা হে (লগ বি) এ আবদ্ধ লিখতে পারি। প্রথমে জিসিডি (কা, কেবি) = জিসিডি (ক, খ) পর্যবেক্ষণ করুন। কে-এর বৃহত্তম মান হ'ল জিসিডি (এ, সি), আমরা আমাদের রানটাইমে খ-কে b / gcd (a, b) এর সাথে প্রতিস্থাপন করতে পারি যা হে এর আরও কঠোর বাউন্ডের দিকে যায় (লগ বি / জিসিডি (ক, বি))।


আপনি কি একটি আনুষ্ঠানিক প্রমাণ দিতে পারেন যে ফিবোনাকির সংখ্যা ইউক্লিডস অ্যালগোতে সবচেয়ে খারাপ পরিস্থিতি তৈরি করে?
আকাশ 18

4

ইউক্লিড অ্যালগরিদমের সবচেয়ে খারাপ পরিস্থিতি তখন হয় যখন প্রতিটি পদক্ষেপে অবশিষ্টরা সবচেয়ে বেশি সম্ভব হয়, অর্থাৎ। ফিবোনাচি সিকোয়েন্সের টানা দুটি পদগুলির জন্য।

যখন এন এবং মিটি এন এবং এম এর অঙ্কের সংখ্যা হয় তবে এন> = মি ধরে ধরে, অ্যালগরিদম ও (এম) বিভাজনগুলি ব্যবহার করে।

নোট করুন যে জটিলতাগুলি সর্বদা ইনপুটগুলির আকারের ক্ষেত্রে দেওয়া হয়, এক্ষেত্রে অঙ্কের সংখ্যা।


4

সবচেয়ে খারাপ ক্ষেত্রে দেখা দিতে পারে যখন এন এবং এম উভয়ই পর পরের ফিবোনাকির সংখ্যা হয়।

gcd (Fn, Fn − 1) = gcd (Fn − 1, Fn − 2) = ⋯ = gcd (F1, F0) = 1 এবং n তম ফিবোনাচি সংখ্যাটি 1.618 ^ n, যেখানে 1.618 স্বর্ণের অনুপাত।

সুতরাং, গিসিডি (এন, মি) খুঁজতে, পুনরাবৃত্ত কলগুলির সংখ্যা হবে Θ (লগইন)।


3

এখানে বইয়ে বিশ্লেষণ ডাটা স্ট্রাকচার এবং সি অ্যালগরিদম বিশ্লেষণ দ্বারা মার্ক অ্যালেন উইস (দ্বিতীয় সংস্করণ, 2.4.4):

ইউক্লিডের অ্যালগরিদম 0 অবধি পৌঁছা পর্যন্ত অব্যাহতভাবে অবশিষ্ট গণনা করে কাজ করে। সর্বশেষ ননজারো বাকীটি উত্তর is

কোডটি এখানে:

unsigned int Gcd(unsigned int M, unsigned int N)
{

    unsigned int Rem;
    while (N > 0) {
        Rem = M % N;
        M = N;
        N = Rem;
    }
    Return M;
}

এখানে আমরা একটি থিওরম ব্যবহার করছি যা:

যদি এম> এন হয়, তবে এম মোড এন <এম / 2।

প্রুফ:

দুটি মামলা আছে। যদি এন <= এম / 2 হয়, তবে যেহেতু বাকীটি এন এর চেয়ে ছোট, তাত্ত্বিক এই ক্ষেত্রে সত্য। অন্য কেসটি হল এন> এম / 2। কিন্তু তারপরে এন একবারে বাকী এম - এন <এম / 2 এর সাথে এমের মধ্যে চলে যায়, উপপাদ্যটি প্রমাণ করে।

সুতরাং, আমরা নিম্নলিখিত অনুগ্রহ করতে পারেন:

Variables    M      N      Rem

initial      M      N      M%N

1 iteration  N     M%N    N%(M%N)

2 iterations M%N  N%(M%N) (M%N)%(N%(M%N)) < (M%N)/2

সুতরাং, দুটি পুনরাবৃত্তির পরে, অবশিষ্টটি তার মূল মানের সর্বাধিক অর্ধেক। এটি দেখায় যে পুনরাবৃত্তির সংখ্যা সর্বাধিক 2logN = O(logN)

মনে রাখবেন, অ্যালগরিদম জিসিডি (এম, এন) গণনা করে, এম> = এন ধরে ধরেছেন (যদি এন> এম হয় তবে লুপের প্রথম পুনরাবৃত্তি এগুলিকে সরিয়ে দেয়))


2

গ্যাব্রিয়েল ল্যামের উপপাদ্য লগ দ্বারা পদক্ষেপের সংখ্যা (1 / sqrt (5) * (a + 1/2)) - 2, যেখানে লগের ভিত্তি (1 + sqrt (5)) / 2 রয়েছে। এটি অ্যালগরিদমের জন্য সবচেয়ে খারাপ ক্ষেত্রে দৃশ্যের জন্য এবং ইনপুটগুলি ক্রমাগত ফিবানোকি সংখ্যা হলে এটি ঘটে।

আরও কিছুটা উদার সীমানা হ'ল লগ এ, যেখানে লগের ভিত্তি (স্কয়ার্ট (2)) কোবলিটজ দ্বারা বোঝানো হয়।

ক্রিপ্টোগ্রাফিক উদ্দেশ্যে আমরা সাধারণত অ্যালগরিদমের বিটওয়াইজ জটিলতা বিবেচনা করি, বিট আকারটি প্রায় কে = লোগা দ্বারা দেওয়া হয় তা বিবেচনা করে।

ইউক্লিড অ্যালগরিদ এর বিটওয়াইজ জটিলতার বিশদ বিশ্লেষণ এখানে দেওয়া হল:

যদিও বেশিরভাগ রেফারেন্সে ইউক্লিড অ্যালগরিদমের বিটওয়াইজ জটিলতা ও (লোগা) দ্বারা দেওয়া হয়েছিল ^ 3 সেখানে একটি শক্ত বাউন্ড রয়েছে যা হে (লোগা)। 2।

বিবেচনা; r0 = a, r1 = b, r0 = q1.r1 + r2। । । , রি -১ = কিউ.রি + রি + ১,। । । , আরএম-2 = কিউএম-1.rm-1 + আরএম আরএম-1 = কিউএম.আরএম

এটি দেখুন: a = r0> = b = r1> r2> r3 ...> rm-1> rm> 0 .......... (1)

এবং rm হ'ল a এবং b এর সর্বশ্রেষ্ঠ সাধারণ বিভাজক।

কোবল্টিজের বইয়ের একটি দাবির দ্বারা (সংখ্যাটি থিওরি এবং ক্রিপ্টোগ্রাফির একটি কোর্স) প্রমাণিত হতে পারে যে: রি + 1 <(রি -1) / 2 ................. ( 2)

আবার কোবলিটজে একটি কে-বিট পজিটিভ পূর্ণসংখ্যকে এল-বিট পজিটিভ পূর্ণসংখ্যা (কে> = l) ধরে রেখে ভাগ করার জন্য প্রয়োজনীয় বিট ক্রিয়াকলাপগুলি নিম্নরূপ দেওয়া হয়েছে: (কে-এল + 1) .এল ...... ............. (3)

(1) এবং (2) দ্বারা বিভাজনের সংখ্যা ও (লোগা) এবং তাই (3) দ্বারা মোট জটিলতা হ'ল (লোগা) is 3।

কোবলিটজে একটি মন্তব্য দিয়ে এখন এটি (লোগা) to 2 এ কমতে পারে।

কি = লোগ্রি +1 বিবেচনা করুন

(1) এবং (2) আমাদের রয়েছে: কি + 1 <= কি = আই = 0,1, ..., এম -2, এম -1 এবং কি + 2 <= (কি) -1 i = 0 এর জন্য , 1, ..., মি -2

এবং (3) দ্বারা মি বিভক্তির মোট ব্যয় নির্ধারিত: এসইউএম [(কি -1) - ((কি) -1))] * কি-এর জন্য i = 0,1,2, .., মি

এটি পুনঃব্যবস্থাপনা: সুম [(কি -১) - ((কি) -১))] কি কি <= 4 * কে0 2

সুতরাং ইউক্লিডের অ্যালগরিদমের বিটওয়াইজ জটিলতা হ'ল হে (লোগা)। 2।


1

পুনরাবৃত্ত অ্যালগরিদমের জন্য তবে আমাদের কাছে রয়েছে:

int iterativeEGCD(long long n, long long m) {
    long long a;
    int numberOfIterations = 0;
    while ( n != 0 ) {
         a = m;
         m = n;
         n = a % n;
        numberOfIterations ++;
    }
    printf("\nIterative GCD iterated %d times.", numberOfIterations);
    return m;
}

ফিবানচি জোড়া দিয়ে, তার মাঝে কোন পার্থক্য নেই iterativeEGCD()এবং iterativeEGCDForWorstCase()যেখানে নিচের মত আধুনিক দেখায়:

int iterativeEGCDForWorstCase(long long n, long long m) {
    long long a;
    int numberOfIterations = 0;
    while ( n != 0 ) {
         a = m;
         m = n;
         n = a - n;
        numberOfIterations ++;
    }
    printf("\nIterative GCD iterated %d times.", numberOfIterations);
    return m;
}

হ্যাঁ, ফিবোনাচি পেয়ারগুলি সহ n = a % nএবং n = a - nএটি ঠিক একই জিনিস।

আমরা জানি যে, একই প্রশ্নের জন্য আগের প্রতিক্রিয়ায়, একটি নিয়ন্ত্রক কমে ফ্যাক্টর: factor = m / (n % m)

অতএব, ইউক্লিডিয়ান জিসিডির পুনরাবৃত্ত সংস্করণটিকে একটি সংজ্ঞায়িত আকারে আকার দিতে আমরা এই জাতীয় "সিমুলেটর" হিসাবে চিত্রিত করতে পারি:

void iterativeGCDSimulator(long long x, long long y) {
    long long i;
    double factor = x / (double)(x % y);
    int numberOfIterations = 0;
    for ( i = x * y ; i >= 1 ; i = i / factor) {
        numberOfIterations ++;
    }
    printf("\nIterative GCD Simulator iterated %d times.", numberOfIterations);
}

উপর ভিত্তি করে কাজ ডঃ জওহর আলী (শেষ স্লাইড), উপরোক্ত লুপ লগারিদমিক হয়।

এখানে চিত্র বর্ণনা লিখুন

হ্যাঁ, ছোট ওহ কারণ সিমুলেটর সর্বাধিক পুনরাবৃত্তির সংখ্যা বলে । ইউক্লিডিয়ান জিসিডিতে প্রোব করা হলে ফিবোনাকির তুলনায় ফিবোনাকির জুড়ি কম সংখ্যক পুনরাবৃত্তি গ্রহণ করতে পারে।


যেহেতু এই অধ্যয়নটি সি ভাষা ব্যবহার করে পরিচালিত হয়েছিল, যথার্থ সমস্যাগুলি ভ্রান্ত / অসম্পূর্ণ মান অর্জন করতে পারে। যে কেন দীর্ঘ দীর্ঘ , ব্যবহৃত হয় ভাল ফ্লোটিং পয়েন্ট পরিবর্তনশীল নামে মাপসই ফ্যাক্টর । ব্যবহৃত সংকলকটি MinGW 2.95।
মোহাম্মদ এন্নাহাদি এল ইদ্রিসি

1

প্রতিটি পদক্ষেপে দুটি মামলা রয়েছে

b> = a / 2, তারপরে a, b = b, a% b তার আগের মানের অর্ধেক অংশে খ তৈরি করবে

b <a / 2, তারপরে a, b = b, a% b তার পূর্ববর্তী মানের প্রায় অর্ধেক তৈরি করবে, যেহেতু খ a / 2 এর চেয়ে কম

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

সর্বাধিক ও (লগ এ) + ও (লগ বি) পদক্ষেপে এটি সাধারণ ক্ষেত্রে হ্রাস পাবে। যা একটি O (লগ এন) অ্যালগরিদম দেয়, যেখানে n a এবং b এর উপরের সীমা।

আমি এটি এখানে খুঁজে পেয়েছি

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