ठीक है, शुरू करने के लिए, मान लें कि हम एक वर्ग का उपयोग कर रहे हैं।
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
इससे हमें 2 आयतें मिलती हैं:
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]]:?