मैंने अभी पढ़ा है कि क्या इस एल्गोरिथ्म को अभी भी एक द्विआधारी खोज एल्गोरिदम माना जा सकता है? और याद आया कि कुछ साल पहले मैंने डेट / टाइम विंडो द्वारा बड़े सादे टेक्स्ट फाइलों में लॉग एंट्री खोजने के लिए लॉग फाइल के लिए एक अनुक्रमणिका / खोज लिखी थी।
यह करते हुए, मैंने प्रक्षेप खोज की कोशिश करने का फैसला किया (मुझे नहीं पता था कि इसे क्या कहा जाता है, मैं अपने आप से इस विचार के पार ठोकर खा गया था)। तब किसी कारण से मैं बाइनरी स्प्लिट स्टेप्स के साथ वैकल्पिक प्रक्षेप चरणों के विचार के लिए जारी रहा: चरण 0 पर मैं परीक्षण बिंदु तय करने के लिए प्रक्षेपित करूंगा, फिर चरण 1 मैं सटीक मिडपॉइंट ले जाऊंगा आदि।
फिर मैंने शुद्ध प्रक्षेप खोज, शुद्ध द्विआधारी खोज और मेरे संयोजन प्रयास का उपयोग करके सिस्टम को बेंचमार्क किया। बारी-बारी से दृष्टिकोण एक स्पष्ट विजेता था, बेतरतीब ढंग से चुने गए समय का एक सेट खोजने से पहले आवश्यक समय और परीक्षणों की संख्या दोनों।
लिंक किए गए प्रश्न से प्रेरित होकर, मैंने "वैकल्पिक प्रक्षेप खोज और बाइनरी खोज" की त्वरित खोज की और कुछ भी नहीं पाया। मैंने उत्तर में से एक पर मेरी टिप्पणी के अनुसार "हेज इंटरपोलेशन सर्च" की कोशिश की।
क्या मैं किसी ज्ञात चीज से टकरा गया हूं? क्या इसके लिए कुछ प्रकार के डेटा के तेजी से होने का कोई सैद्धांतिक औचित्य है? लॉग फाइलें आम तौर पर समय के लिए बड़ी थीं (उदाहरण के लिए, खोज के लिए 10 मिलियन पंक्तियों के साथ 1-2 जीबी का पाठ), और उनमें तारीखों / समय का प्रसार गतिविधि के भारी फटने, सामान्य पीक समय और शांत समय के साथ जटिल था। मेरे बेंचमार्क परीक्षणों को खोजने के लिए लक्ष्य समय के समान वितरण से नमूना लिया गया है।