বাইনারি অনুসন্ধানের জন্য পদক্ষেপের সংখ্যা


12

ধনাত্মক পূর্ণসংখ্যার একটি ইনপুট দেওয়া হয়েছে, 1 থেকে শুরু করে বাইনারি অনুসন্ধানের মাধ্যমে ইনপুটটি সন্ধান করতে যে পদক্ষেপ নেয় তার সংখ্যা আউটপুট।

আমরা ইনপুট হিসাবে প্রদত্ত পূর্ণসংখ্যার জন্য বাইনারি অনুসন্ধান সিমুলেট করছি, যাতে সিমুলেটেড অনুসন্ধানকারী বারবার কোনও পূর্ণসংখ্যার অনুমান করতে পারে এবং বলা যায় যে এটি খুব বেশি, খুব কম বা সঠিক কিনা। পূর্ণসংখ্যার সন্ধানের কৌশলটি নিম্নরূপ:

  • আমরা যে ইনপুট হিসাবে সন্ধানের চেষ্টা করছি তাতে পূর্ণসংখ্যা হিসাবে ধরা যাক।

  • ১. অনুমান দিয়ে শুরু করুন (প্রতিটি অনুমানের জন্য, পদক্ষেপের সংখ্যা বৃদ্ধি করুন (এটি সঠিক ছিল কি না নির্বিশেষে)) এবং তাত্ক্ষণিকভাবে থামান এবং অনুমানটি সঠিক হলে মোট পদক্ষেপের সংখ্যা নির্ধারণ করুন))

  • অনুমানটি এন (লক্ষ্য সংখ্যা) এর চেয়ে বড় না হওয়া পর্যন্ত বারবার অনুমান দ্বিগুণ করুন। (বা যদি এটি সঠিক হয় তবে এটি ইতিমধ্যে উপরে উল্লিখিত আমাদের সঠিক অনুমানের বিধি দ্বারা আবৃত)

  • এখন, 2 এর প্রথম শক্তির উপরের সীমাটি সেট করুন যা n এর চেয়ে বড় (যেমনটি কেবল অনুমান করা সংখ্যা) এবং তার নীচে 2 পাওয়ারের নীচের সীমানা নির্ধারণ করে।

  • বারবার উপরের বাউন্ড এবং নিম্ন সীমাটির গড় (বৃত্তাকার নিচে) অনুমান করুন। যদি এটি খুব বেশি হয় তবে এটি উপরের সীমানা হিসাবে সেট করুন। যদি এটি খুব কম হয় তবে এটি নিম্ন সীমা হিসাবে সেট করুন। এই পদ্ধতিটি শেষ পর্যন্ত সঠিক অনুমানের পরিণতিতে গ্যারান্টিযুক্ত।

এন = 21 এর ইনপুটটির জন্য এখানে একটি উদাহরণ রয়েছে:

1 -> 2 -> 4 -> 8 -> 16 -> 32 -> 24 -> 20 -> 22 -> 21
\__________________________/
   repeated doubling      \________________________/
                             repeated averaging

যেহেতু এটি , তাই বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জিতবে।

এখানে এন = 1 থেকে এন = 100 পর্যন্ত সমস্ত আউটপুট রয়েছে:

1
2
4
3
6
5
6
4
8
7
8
6
8
7
8
5
10
9
10
8
10
9
10
7
10
9
10
8
10
9
10
6
12
11
12
10
12
11
12
9
12
11
12
10
12
11
12
8
12
11
12
10
12
11
12
9
12
11
12
10
12
11
12
7
14
13
14
12
14
13
14
11
14
13
14
12
14
13
14
10
14
13
14
12
14
13
14
11
14
13
14
12
14
13
14
9
14
13
14
12

এবং এখানে আরও কিছু বড় পরীক্ষার মামলা রয়েছে:

1234 -> 21
1337 -> 22
3808 -> 19
12345 -> 28
32768 -> 16
32769 -> 32
50000 -> 28

উত্তর:


10

জাপট, 13 12 বাইট

ওহ আমার গোশ আমি জেলি এবং পাইথ উভয়কেই এক সময়ের জন্য মারছিলাম: ডি

¢a1 ªJ +1+¢l

এটি অনলাইন পরীক্ষা!

এখানে কৌশল আমি ব্যবহারের আছে: যাক এক্স ইনপুট পূর্ণসংখ্যা হতে, এবং দিন হতে এক্স এর বাইনারি উপস্থাপনা। সঠিক আউটপুট 1 + এর দৈর্ঘ্য + একটি শেষ সূচক 1 মধ্যে , বিয়োগ 1 এই সূচক 0।


2
আমি আপনাকে বলেছিলাম যে ডেনিস জিতবে।
lirtosiast

7

জেলি, 18 15 10 9 বাইট

B>WU;BḄBL

এটি অনলাইন চেষ্টা করুন! বা ছোট পরীক্ষার কেস এবং বড় পরীক্ষার কেস যাচাই করুন ।

পটভূমি

যাক এন একটি ধনাত্মক পূর্ণসংখ্যা হতে হবে এবং মি ক্ষুদ্রতম ক্ষমতা 2 যে বড় বা বেশি সমান বা সমান এন

  • দ্বিগুন পর্যায়ের বাইনারি উপস্থাপনা প্রতিটি অঙ্ক জন্য এক ধাপ লাগে মি

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

গণক এড়াতে মি , আমরা যে পালন, যদি এন <মি , এর বাইনারি ডিজিটের সংখ্যা এন ঠিক এক বাইনারি ডিজিট সংখ্যার চেয়ে কম হয় মি

আমরা যদি 0 এর সাথে এন এর প্রথম বাইনারি অঙ্কটি প্রতিস্থাপন করি , ফলাফলটি বিপরীত করুন, মূল বাইনারি অঙ্কগুলি সংযোজন করুন এবং সমস্ত নেতৃস্থানীয় শূন্যগুলি অপসারণ করুন, তবে নিম্নলিখিতটি ঘটে:

  • তাহলে এন একটি শক্তি 2 , সব প্রথম (সংশোধিত) এর সংখ্যা অর্ধেক সরানো, মূল বাইনারি প্রতিনিধিত্ব শুধুমাত্র সংখ্যা যাব এন = মি

  • তাহলে এন হয় না একটি ক্ষমতা 2 , প্রথমার্ধে যে সবচেয়ে গুরুত্বপূর্ণ অঙ্ক সাথে সঙ্গতিপূর্ণ করে এ অঙ্ক না সরানো, আসলে যে জন্য পুষিয়ে এন একটি বাইনারি অঙ্ক কম হয়েছে মি

কিভাবে এটা কাজ করে

B>WU;BḄBL  Main link. Input: n

B          Compute the binary representation of n.
 >W        Compare it with [n].
           n is positive, so it is not less than the first binary digit and the
           comparison yields zero. When comparing lists of different length, the
           elements in the longer list that do not have a pair remain untouched.
           Therefore, this will just zero out the first binary digit.
   U       Reverse the modified binary representation.
    ;B     Concatenate it with the unmodified binary representation of n.
      ḄB   Convert from binary to integer, and back to binary.
           This removes leading zeroes.
        L  Get the length of the resulting array.

’B;Bt0L(By বাইট) আমার জুলিয়া উত্তরের মতো একই পদ্ধতির ব্যবহার করে জেলির সর্বশেষ সংস্করণে কাজ করে ।
ডেনিস

4

ES6, 38 বাইট

x=>33-(g=Math.clz32)(x-1)+g(x&-x)-g(x)

অন্যান্য উত্তরের দ্বারা ইঙ্গিত হিসাবে, আপনি প্রথম এবং শেষ বিটগুলির অবস্থান থেকে পদক্ষেপের সংখ্যা গণনা করতে পারেন।

দ্বিগুণ পর্যায়ে পদক্ষেপের সংখ্যা n=33-Math.clz32(x-1)। আমরা 2ⁿ ≥ x চাই n=33-Math.clz32(x)তবে আমাদের 2ⁿ> x দেয় তাই ক্ষতিপূরণ দেওয়ার জন্য আমরা এক্স থেকে 1 টি বিয়োগ করি।

গড় পর্বে পদক্ষেপের সংখ্যা সহজ, এটি সহজ n=Math.clz32(x&-x)-Math.clz32(x)x&-xহ'ল একটি সহজ অভিব্যক্তি যা সর্বনিম্ন বিট x(2 এর শক্তি হিসাবে) এর মূল্যায়ন করে ।


কিভাবে x&-xকাজ করে? আমি ভাবতাম যে এটি এক্স এর নিরঙ্কুশ মানটির মূল্যায়ন করবে।
ETH প্রোডাকশনগুলি

2
আমি এই পৃষ্ঠায় একটি ভাল ব্যাখ্যা পেয়েছি (বিট হ্যাক # 7 দেখুন)।
ETH প্রোডাকশনগুলি

2

পাইথ, 15 13 বাইট

h-y.ElQ/PPyQ2

আমি খুঁজে পেয়েছি যে গণনা করা হবে নম্বর 1 + 2*ceil(log_2(x)) - [number of 2s in x's prime factorization, minus 1 if x is a power of 2 greater than 1].

এখানে চেষ্টা করুন


2

জুলিয়া, 37 35 বাইট

n->endof(strip(bin(n-1)bin(n),'0'))

@ অ্যালেক্সা ধন্যবাদ। 2 বাইট সংরক্ষণের জন্য!

এটি আমার জেলি উত্তর থেকে পর্যবেক্ষণগুলি অনুসরণ করে , তবে প্রান্তের মামলাগুলির সাথে আলাদাভাবে ডিল করে।

তাহলে এন> 1 , বাইনারি উপস্থাপনা এন - 1 একটি ডিজিট পরবর্তী ক্ষমতার এক কম হয়েছে 2 , যা বাইনারি উপস্থাপনা প্রথম অঙ্ক সরানোর না ক্ষতিপূরণ পায় এন

সব শূণ্যসমূহ সরানোর মাধ্যমে উভয় পক্ষের , আমরা প্রান্ত কেস সাথে মোকাবিলা 1 হিসাবে ভাল।


0

হাস্কেল, 82 বাইট

এটি হাস্কেলের একটি দুর্দান্ত সরল বাস্তবায়ন:

f x=[j|j<-[1..],let g i|i<2=1|x>g(i-1)=2*g(i-1)|1<2=div(g(i-1)+g(i-2))2,g j==x]!!0

কম গল্ফড:

f x = head [ stepNum | stepNum <- [1..], step stepNum == x]
  where
    prevStep i = step (i-1)
    step i | i == 1         = 1
           | x > prevStep i = 2 * prevStep i
           | otherwise      = div (prevStep i + step (i-2)) 2
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.