(हल किए गए डेटा के लिए कोई अलग प्रश्न के रूप में यहां उत्तर देना।)
यदि डेटा को सॉर्ट किया गया था, तो आप तर्क के VLOOKUP
साथ उपयोग कर सकते हैं (या चूक गए, क्योंकि यह डिफ़ॉल्ट है), जिसे आधिकारिक तौर पर एक्सेल के लिए "अनुमानित मैच की खोज" के रूप में वर्णित किया गया है।range_lookup
TRUE
दूसरे शब्दों में, सॉर्ट किए गए डेटा के लिए:
- पहला मान
FALSE
वापस करने के लिए अंतिम तर्क सेट करना , और
- अंतिम मान को
TRUE
वापस करने के लिए अंतिम तर्क सेट करना ।
यह काफी हद तक अनिर्दिष्ट और अस्पष्ट है, लेकिन VisiCalc (1979) से संबंधित है, और आज कम से कम Microsoft Excel, LibreOffice Calc और Google Sheets में मौजूद है। यह अंततः LOOKUP
VisiCalc (और थेंस VLOOKUP
और HLOOKUP
) के प्रारंभिक कार्यान्वयन के कारण है , जब कोई चौथा पैरामीटर नहीं था। मान बाइनरी खोज द्वारा पाया जाता है , जिसमें समावेशी बायीं बाउंड और अनन्य दाएं बाउंड (एक सामान्य और सुरुचिपूर्ण कार्यान्वयन) का उपयोग किया जाता है, जिसके परिणामस्वरूप यह व्यवहार होता है।
तकनीकी रूप से इसका मतलब है कि कोई उम्मीदवार अंतराल के साथ खोज शुरू करता है [0, n)
, जहां n
सरणी की लंबाई है, और लूप इनवेरियंट की स्थिति यह है कि A[imin] <= key && key < A[imax]
(बाएं बाउंड <= लक्ष्य है, दाएं बाउंड, जो अंत के बाद एक शुरू होता है, यह है) > लक्ष्य को मान्य करने के लिए, या तो पहले समापन बिंदुओं पर मानों की जांच करें, या उसके बाद परिणाम की जांच करें), और क्रमिक रूप से द्विभाजित करना और जो भी पक्ष चुनना है, वह इस अपरिवर्तनीय को संरक्षित करता है: एक पक्ष द्वारा, जब तक कि आप 1 कार्यकाल [k, k+1)
और एक अंतराल तक नहीं मिलेंगे, तब तक बहिष्करण करें। एल्गोरिथम फिर लौटता है k
। यह एक सटीक मैच नहीं होना चाहिए (!): यह नीचे से सिर्फ निकटतम मैच है। डुप्लिकेट मैचों के मामले में, अंतिम मैच वापस करने के परिणामस्वरूप , क्योंकि इसके लिए आवश्यक है कि अगला मूल्य अधिक होकुंजी (या सरणी के अंत) से। डुप्लिकेट के मामले में आपको कुछ व्यवहार की आवश्यकता होती है, और यह उचित और लागू करने में आसान है।
यह व्यवहार इस पुराने Microsoft ज्ञानकोष आलेख (जोर दिया गया) में स्पष्ट रूप से कहा गया है: "XL: कैसे एक ऐरे में पहला या आखिरी मैच वापस करें" ( Q214069 ):
आप LOOKUP () फ़ंक्शन का उपयोग सॉर्ट किए गए डेटा की एक सरणी के भीतर मान खोजने के लिए कर सकते हैं और उस स्थिति में शामिल संबंधित मान को दूसरे एरे के भीतर वापस कर सकते हैं। यदि लुकअप मान को सरणी के भीतर दोहराया जाता है, तो यह सामने आया अंतिम मैच लौटाता है । यह व्यवहार VLOOKUP (), HLOOKUP (), और LOOKUP () फ़ंक्शन के लिए सही है।
कुछ स्प्रेडशीट के लिए आधिकारिक प्रलेखन का पालन करें; न तो "अंतिम मैच" व्यवहार कहा गया है, लेकिन यह Google पत्रक दस्तावेज़ में निहित है:
माइक्रोसॉफ्ट एक्सेल
TRUE मानता है कि तालिका में पहला कॉलम या तो संख्यात्मक या वर्णानुक्रम में सॉर्ट किया गया है, और फिर निकटतम मान की खोज करेगा ।
Google पत्रक :
अगर is_sorted
है TRUE
या छोड़ा जाता है, निकटतम मैच ( कम से कम या बराबर खोज कुंजी करने के लिए) दिया जाता है