ঠিক আছে, শুরু করার জন্য, ধরে নেওয়া যাক আমরা একটি বর্গ ব্যবহার করছি।
1 2 3
2 3 4
3 4 5
1. একটি বর্গ অনুসন্ধান করা
আমি ত্রিভুজটিতে একটি বাইনারি অনুসন্ধান ব্যবহার করব। লক্ষ্যটি হ'ল ছোট সংখ্যাটি চিহ্নিত করুন যা লক্ষ্য সংখ্যার চেয়ে কম নয়।
আমি খোঁজ করছি বলুন 4
উদাহরণস্বরূপ, তারপর আমি লোকেটিং শেষ পর্যন্ত হবে 5
এ (2,2)
।
তারপরে, আমি আশ্বস্ত হয়েছি যে যদি 4
টেবিলে থাকে তবে এটি হয় (x,2)
বা ভিতরে (2,x)
থাকা x
অবস্থায় রয়েছে [0,2]
। ঠিক আছে, এটি কেবল 2 বাইনারি অনুসন্ধানগুলি।
জটিলতা হতাশ নয়: O(log(N))
(দৈর্ঘ্যের সীমাতে 3 বাইনারি অনুসন্ধান N
)
2. একটি আয়তক্ষেত্র, নিখুঁত পদ্ধতির সন্ধান করা
অবশ্যই, যখন এটি আলাদা হয় N
এবং M
একটি আয়তক্ষেত্রের সাথে আলাদা হয়, এই অধঃপতিত কেসটি বিবেচনা করুন:
1 2 3 4 5 6 7 8
2 3 4 5 6 7 8 9
10 11 12 13 14 15 16 17
এবং ধরা যাক আমি খুঁজছি 9
... তির্যক পদ্ধতিটি এখনও ভাল তবে তির্যক পরিবর্তনের সংজ্ঞা। এখানে আমার তির্যক [1, (5 or 6), 17]
। ধরা যাক আমি তুলেছি [1,5,17]
, তবে আমি জানি যে 9
টেবিলের মধ্যে থাকলে এটি হয় উপ-বিভাগে:
5 6 7 8
6 7 8 9
10 11 12 13 14 15 16
এটি আমাদেরকে দুটি আয়তক্ষেত্র দেয়:
5 6 7 8 10 11 12 13 14 15 16
6 7 8 9
সুতরাং আমরা পুনরাবৃত্তি করতে পারেন! সম্ভবত কম উপাদান দিয়ে এক দিয়ে শুরু করা (যদিও এই ক্ষেত্রে এটি আমাদের মেরে ফেলে)।
আমার উল্লেখ করা উচিত যে কোনও মাত্রা যদি এর চেয়ে কম হয় তবে 3
আমরা তির্যক পদ্ধতি প্রয়োগ করতে পারি না এবং অবশ্যই একটি বাইনারি অনুসন্ধান ব্যবহার করা উচিত। এখানে এর অর্থ হবে:
- বাইনারি অনুসন্ধান চালু করুন
10 11 12 13 14 15 16
, পাওয়া গেল না
- বাইনারি অনুসন্ধান চালু করুন
5 6 7 8
, পাওয়া গেল না
- বাইনারি অনুসন্ধান চালু করুন
6 7 8 9
, পাওয়া গেল না
এটি মুশকিল কারণ ভাল পারফরম্যান্স পাওয়ার জন্য আপনি সাধারণ আকারের উপর নির্ভর করে বেশ কয়েকটি ক্ষেত্রে পার্থক্য করতে চাইতে পারেন ....
3. একটি আয়তক্ষেত্র, নির্মম পদ্ধতির সন্ধান করা
যদি আমরা একটি বর্গক্ষেত্র নিয়ে কাজ করি তবে এটি অনেক সহজ হবে ... সুতরাং আসুন আমরা কেবল স্কোয়ারের জিনিসগুলি আপ করি।
1 2 3 4 5 6 7 8
2 3 4 5 6 7 8 9
10 11 12 13 14 15 16 17
17 . . . . . . 17
. .
. .
. .
17 . . . . . . 17
আমাদের এখন একটি স্কোয়ার আছে।
অবশ্যই, আমরা সম্ভবত এই সারিগুলি তৈরি করব না, আমরা কেবল তাদের অনুকরণ করতে পারি।
def get(x,y):
if x < N and y < M: return table[x][y]
else: return table[N-1][M-1] # the max
সুতরাং এটি আরও মেমরি দখল না করে একটি বর্গক্ষেত্রের মতো আচরণ করে (গতির দামে, সম্ভবত, ক্যাশের উপর নির্ভর করে ... ওহ ভাল: পি)
[[1 1][1 1]]
?