इस स्क्वायर रूट बाउंड अल्गोरिद्म में लूप इन्वारिएंट कैसे प्राप्त किया जाता है?


10

मूल रूप से math.SE पर लेकिन वहां अनुत्तरित।

निम्नलिखित एल्गोरिथ्म पर विचार करें।

u := 0
v := n+1;
while ( (u + 1) is not equal to v) do
   x :=  (u + v) / 2;
   if ( x * x <= n) 
     u := x;
   else
     v := x;
   end_if
end_while 

जहाँ u, v, और n पूर्णांक हैं और विभाजन ऑपरेशन पूर्णांक विभाजन है।

  • बताएं कि एल्गोरिथ्म द्वारा क्या गणना की जाती है।
  • एल्गोरिथ्म के बाद की स्थिति के रूप में भाग I के लिए आपके उत्तर का उपयोग करते हुए, लूप इनवेरिएंट स्थापित करें और दिखाएं कि एल्गोरिथ्म समाप्त हो गया है और सही है।

कक्षा में, बाद के हालत हो पाया था और अपरिवर्तनीय है 0 यू 2n < वी 2 , यू + 1 वी । मैं वास्तव में यह नहीं समझ पा रहा हूं कि पोस्ट-कंडीशन और इन्वर्टर कैसे प्राप्त किए गए थे। मुझे पता है कि पोस्ट की स्थिति ... जो स्पष्ट रूप से ऐसा नहीं है। इसलिए मैं सोच रहा हूं कि पोस्ट-कंडीशन और इनवेरिएंट कैसे प्राप्त किया गया था। मैं यह भी सोच रहा हूं कि पूर्व स्थिति का उपयोग करके पूर्व शर्त कैसे प्राप्त की जा सकती है।0यू2n<(यू+1)20यू2n<v2,यू+1vयू+1=v


क्या आप होरे तर्क से परिचित हैं, और क्या आप इसे छूने के लिए जवाब की उम्मीद करते हैं?
राफेल

जवाबों:


8

गाइल्स सही है कि सामान्य तकनीक दिलचस्प टिप्पणियों के लिए मछली पकड़ने के लिए है।

इस स्थिति में, आप देख सकते हैं कि कार्यक्रम द्विआधारी खोज का एक उदाहरण है, क्योंकि इसमें निम्नलिखित आकृति है:

while i + 1 != k
  j := strictly_between(i, k)
  if f(j) <= X then i := j
  if f(j) > X then k := j

तो फिर आप अपने विशेष रूप से प्लग बस f, X... द्विआधारी खोज के लिए सामान्य अपरिवर्तनीय में। दिज्क्स्त्र में बाइनरी सर्च की अच्छी चर्चा है


7

वास्तव में लूप की पोस्ट-कंडीशन है (आपको ऐसा क्यों लगता है कि यह "स्पष्ट रूप से" नहीं है?)। यह हमेशा एक समय पाश है कि एक शामिल नहीं है के साथ मामला है: जब पाश बाहर निकलता है, यह केवल हो सकता है क्योंकि पाश हालत (यहाँ, यू + 1 v ) गलत है। यह एकमात्र चीज नहीं है जो तब सच होगी जब लूप यहां से बाहर निकलता है (यह एल्गोरिथम वास्तव में कुछ दिलचस्प गणना करता है, जैसा कि आपने अपनी कक्षा में देखा था, इसलिए यू = [यह दिलचस्प बात है] और v = [यह दिलचस्प बात] भी पोस्ट-स्थितियां हैं ), लेकिन यह सबसे स्पष्ट है।यू+1=vbreakयू+1vयू=[यह दिलचस्प बात]v=[यह दिलचस्प बात]

अब, अन्य दिलचस्प गुणों को खोजने के लिए, कोई सामान्य नुस्खा नहीं है। वास्तव में, कुछ औपचारिक समझदारी है जिसमें लूप इनवेरिएंट्स को खोजने के लिए कोई सामान्य नुस्खा नहीं है। सबसे अच्छा आप कुछ तकनीकों को लागू कर सकते हैं जो केवल कुछ मामलों में काम करते हैं, या आम तौर पर दिलचस्प टिप्पणियों के लिए मछली पकड़ने जाते हैं (जो बेहतर और बेहतर काम करता है क्योंकि आप अधिक अनुभवी हैं)।

यदि आप कुछ मान के साथ कुछ पुनरावृत्तियों के लिए लूप चलाते हैं , तो आप देखेंगे कि प्रत्येक पुनरावृत्ति पर:n

  • या तो ( यू + वी ) / 2 तक कूदता है ;यू(यू+v)/2
  • या करने के लिए नीचे कूदता ( यू + v ) / 2v(यू+v)/2

विशेष रूप से, से भी कम समय शुरू होता है वी , और यह आगे निकल कभी नहीं होगा। इसके अलावा, यू सकारात्मक शुरू होता है और बढ़ता है, जबकि v n + 1 से शुरू होता है और घटता है। तो 0 यू वी n + 1 इस कार्यक्रम के दौरान एक अपरिवर्तनीय है।यूvयूvn+10यूvn+1

एक बात जो इतनी स्पष्ट नहीं है कि क्या कभी भी v के बराबर हो सकता है । यह महत्वपूर्ण है: यदि u और v कभी बराबर हो जाते हैं, तो हमारे पास x = u = v होगा और लूप हमेशा के लिए चलता रहेगा। तो आपको यह साबित करने की आवश्यकता है कि एल्गोरिथम सही है (यानी हमेशा के लिए लूप नहीं करता) साबित करने के लिए यू और वी कभी भी बराबर नहीं बनते। एक बार इस आवश्यकता की पहचान हो जाने के बाद, यह साबित करना आसान है (मैं इसे एक अभ्यास के रूप में छोड़ रहा हूं) कि u < v एक लूप इनवेरिएंट है (ध्यान रखें कि u और v पूर्णांक हैं, इसलिए यह u के बराबर हैयूvयूvएक्स=यू=vयूvयू<vयूv )।u+1v

चूंकि कार्यक्रम के अंत में, के बाद हालत आप दिए गए थे भी लिखा जा सकता है यू 2n < वी 2 (भाग 0 यू 2 तुच्छ है)। हम इस तरह की पोस्ट-कंडीशन चाहते हैं, जिसमें n शामिल है , यह है कि हम इनपुट n के साथ प्रोग्राम के परिणाम को टाई करना चाहते हैं । यह सटीक स्थिति क्यों? हम उस चीज़ की तलाश कर रहे हैं जो यथासंभव सटीक है, और हम देखते हैं कि एन लूप के अंदर कहां दिखाई देता है:v=u+1u2n<v20u2nnn

  • हमारे पास ;uxv
  • जब , हम लेने के लिए अगले यू होने के लिए एक्स , ताकि यू 2n (और वी परिवर्तन नहीं करता है);x2nuxu2nv
  • जब , हम अगले v को x होने के लिए चुनते हैं , ताकि n < v 2 (और u परिवर्तित न हो)।x2>nvxn<v2u

यह विरोधाभास संकेत है कि शायद हर समय। दूसरे शब्दों में, हमें संदेह है कि यह एक पाश अपरिवर्तनीय है। इसे सत्यापित करना पाठक को एक अभ्यास के रूप में छोड़ दिया जाता है (यह जांचने के लिए याद रखें कि संपत्ति शुरू में सच है)।u2n<v2

और अब है कि हम यह सब किया है, हम देखते हैं कि और ( यू + 1 ) 2 > n : यू का वर्गमूल है n निकटतम पूर्णांक तक पूर्णांक।u2n(u+1)2>nun


"तो आपको यह साबित करने की आवश्यकता है कि एल्गोरिथ्म सही होने के लिए यू और वी बराबर हो गए हैं" मुझे लगता है कि यह वाक्य "नहीं" याद आ रहा है।
sepp2k

@KenLi चूंकि स्टैक एक्सचेंज के अर्थ में यह आपका प्रश्न है, क्या कोई विशेष सुधार है जो आप चाहते हैं?
गिल्स एसओ- बुराई को रोकें '
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.