हमें कौन सी विषम-विकास दर की परिभाषा सिखानी चाहिए?


35

जब हम मानक पाठ्यपुस्तकों, या परंपरा का पालन करते हैं, तो हम में से अधिकांश एल्गोरिथम वर्ग के पहले कुछ व्याख्यानों में बड़े-ओह संकेतन की निम्नलिखित परिभाषा सिखाते हैं: शायद हम पूरी सूची भी इसके सभी क्वांटिफायर के साथ दें:

f=O(g) iff (c>0)(n00)(nn0)(f(n)cg(n)).
  1. f=o(g) iff (c>0)(n00)(nn0)(f(n)cg(n))
  2. f=O(g) iff (c>0)(n00)(nn0)(f(n)cg(n))
  3. f=Θ(g) iff (c>0)(d>0)(n00)(nn0)(dg(n)f(n)cg(n))
  4. f=Ω(g) iff (d>0)(n00)(nn0)(f(n)dg(n))
  5. f=ω(g) iff (d>0)(n00)(nn0)(f(n)dg(n))

हालाँकि, इन परिभाषाओं के साथ काम करना इतना आसान नहीं है, जब यह जैसी सरल चीजों को साबित करने की बात आती है , हम में से अधिकांश "सीमा की चाल" को शुरू करने के लिए जल्दी से आगे बढ़ते हैं:5nlog4n+nlogn=o(n10/9)

  1. f=o(g) if limnf(n)/g(n) मौजूद है और 0 ,
  2. f=O(g) if limnf(n)/g(n) मौजूद है और + ,
  3. f=Θ(g) अगर limnf(n)/g(n) मौजूद है और न तो 0 और न ही + ,
  4. f=Ω(g) if limnf(n)/g(n) मौजूद है और 0 नहीं है 0,
  5. f=ω(g) if limnf(n)/g(n) मौजूद है और +

मेरा सवाल यह है कि:

यह एक स्नातक एल्गोरिदम के रूप में सीमा की स्थिति लेने के लिए कक्षा को पढ़ा के लिए एक बड़ा नुकसान नहीं होगा की परिभाषा , हे , \ थीटा , \ ओमेगा , और \ ओमेगा ? वैसे भी हम सभी का उपयोग करते हुए अंत है और यह मुझे बहुत स्पष्ट लगता है कि मात्रात्मक परिभाषाओं को छोड़ना हर किसी के जीवन को आसान बनाता है।oOΘΩω

मुझे यह जानने में दिलचस्पी होगी कि क्या आपने कुछ ठोस प्राकृतिक मामले का सामना किया है जहां मानक c,n0 वास्तव में आवश्यक हैं, और यदि नहीं, तो क्या आपके पास मानक c,n0 अपफ्रंट को वैसे भी रखने का कोई ठोस तर्क है ।


1
टैग वास्तव में "शिक्षण" होना चाहिए, लेकिन मुझे कोई संबंधित टैग नहीं मिला और मुझे नए टैग बनाने की अनुमति नहीं है।
स्लिमटन सेप

1
यह मूल रूप से मात्राओं को एप्सिलॉन-डेल्टा परिभाषा की सीमा में अवशोषित करता है। मेरी एकमात्र चिंता यह होगी कि कई सीएस छात्रों ने विश्लेषण नहीं किया है और इसलिए उनकी सीमाओं की समझ ज्यादातर यांत्रिक है। उन्हें जल्दी से गणना करने में सक्षम करने के लिए, हालांकि, यह एक नो-ब्रेनर है।
प्रति सोग्न

6
ध्यान दें कि ओ () की आपकी दो परिभाषाएं समान नहीं हैं (एक ही चेतावनी Θ () और Ω ()) पर लागू होती है। उस स्थिति पर विचार करें जहां विषम n के लिए f (n) = 2n भी n और f (n) = 1 के लिए। F (n) = O (n) है? मैं लाइम के बजाय लिम्सअप का उपयोग करना पसंद करता हूं ताकि मैं इस मामले में f (n) = n (n) कह सकूं (हालांकि आपकी कोई भी परिभाषा इसकी अनुमति नहीं देती है)। लेकिन यह मेरी व्यक्तिगत प्राथमिकता हो सकती है (और यहां तक ​​कि एक गैर-व्यावहारिक अभ्यास भी), और मैंने कभी भी कक्षा नहीं सिखाई है।
त्सुयोशी इतो

2
@ त्सुयोशी: मैंने सोचा कि "सीमा चाल" का बिंदु यह था कि यह लिए एक पर्याप्त लेकिन आवश्यक शर्त नहीं थी । ( लिए यह भी आवश्यक है।) ऑसिलेटिंग फ़ंक्शन काउंटरएक्सप्ले की सीमा नहीं है। ( )O()o()
आंद्र सलाम

1
आप प्रतीक जगह नहीं होनी चाहिए द्वारा प्रत्येक परिभाषा और संपत्ति में? मुझे एक छात्र के रूप में = बहुत परेशान करने का उपयोग मिला । ==
जेरेमी

जवाबों:


13

मैं क्वांटिफायर के साथ मूल परिभाषा को पढ़ाना पसंद करता हूं।

IMO, मनुष्यों को आम तौर पर सीधे क्वांटिफायर के दो से अधिक विकल्पों के साथ सूत्रों और परिभाषाओं को समझने में परेशानी होती है। नए क्वांटिफायर पेश करने से स्पष्ट हो सकता है कि परिभाषा का मतलब क्या है। यहां, अंतिम दो क्वांटिफायर का मतलब "सभी पर्याप्त रूप से बड़े एन के लिए" है, इस तरह की मात्रा का परिचय मदद कर सकता है।

इन अवधारणाओं को समझाने के लिए मैं जो तस्वीरें खींचता हूं, वे क्वांटिफायर संस्करणों के साथ बेहतर मेल खाते हैं।

मुझे लगता है कि सीमा सरलीकरण इंजीनियरिंग छात्र के लिए उपयोगी है जो केवल विकास दर की गणना करने में रुचि रखते हैं, लेकिन कंप्यूटर विज्ञान के छात्रों के लिए उतना उपयोगी नहीं होगा। वास्तव में, इस सरलीकरण का उपयोग करने से अच्छे से अधिक नुकसान हो सकता है।

यह विचार यह सुझाव देने के समान है कि हम कंप्यूटिंग व्युत्पन्न (बहुपद, एक्सप्लोरेशन, ..., चेन नियम, ...) के नियमों का उपयोग करते हैं, इसके लिए एप्सिलॉन-डेल्टा परिभाषा के स्थान पर, जो आईएमएचओ एक अच्छा विचार नहीं है।


अंतिम वर्चस्व धारणा भी है उपयोगी: iff \ esits मीटर n > मी ( एन ) < जी ( एन ) । अब हे ( जी ) iff है > 0 सेंट ( एक्स ) « सी जी ( x )f(x)g(x)\esitsmn>mf(n)<g(n)fO(g)c>0f(x)cg(x)
कावेह

9

संपादित करें: संशोधन 3 में प्रमुख संशोधन।

चूंकि मैंने कभी क्लास नहीं पढ़ाया है, इसलिए मुझे नहीं लगता कि मैं जो कुछ भी सिखाना चाहिए, उसके बारे में आश्वस्त होकर कुछ भी कह सकता हूं। फिर भी, यहाँ मैं इसके बारे में क्या सोचते हैं।

ऐसे प्राकृतिक उदाहरण हैं जहाँ "सीमा छल" जैसा कि लिखा गया है लागू नहीं किया जा सकता है। उदाहरण के लिए, मान लीजिए कि आप एक "वैरिएबल-लेंथ वेक्टर" (जैसे वेक्टर <T> C C में) लागू करते हैं, एक निश्चित-लंबाई सरणी का उपयोग करके आकार दोगुना करते हैं (अर्थात, हर बार जब आप सरणी के आकार को पार करने वाले होते हैं, तो आप सरणी को अब से दो बार बड़ा करें और सभी तत्वों को कॉपी करें)। आकार एस ( n सरणी के) जब हम की दुकान n वेक्टर में तत्वों की तुलना में 2 से अधिक की सबसे छोटी शक्ति है या इसके बराबर एन । हम यह कहना चाहते हैं कि S ( n ) = O ( n ), लेकिन परिभाषा के अनुसार "लिमिट ट्रिक" का उपयोग करने से हमें ऐसा करने की अनुमति नहीं मिलेगी क्योंकि S ( n)) / n रेंज में घनीभूत [1,2) है। वही same () और Θ () पर लागू होता है।

कुछ अलग बात के रूप में, जब हम एल्गोरिथम की जटिलता का वर्णन करने के लिए इन सूचनाओं का उपयोग करते हैं, तो मुझे लगता है कि आपकी sometimes () की परिभाषा कभी-कभी असुविधाजनक होती है (हालांकि मुझे लगता है कि यह परिभाषा आम है)। यह परिभाषित करना अधिक सुविधाजनक है कि f ( n ) = g ( g ( n )) यदि और केवल यदि limsup f ( n ) / g ( n )> 0. यह है क्योंकि कुछ समस्याएं असीम रूप से n के कई मानों के लिए तुच्छ हैं ( इस तरह के एक विषम संख्या n के साथ एक ग्राफ पर सही मशीन समस्या के रूप में )। वही same () और ω () पर लागू होता है।

इसलिए, मुझे व्यक्तिगत रूप से लगता है कि एक एल्गोरिथ्म की जटिलता का वर्णन करने के लिए उपयोग करने के लिए सबसे सुविधाजनक निम्नलिखित परिभाषाएं हैं: फ़ंक्शन के लिए एफ , जी : g → ℕ > 0 ,

  • f ( n ) = o ( g ( n )) यदि और केवल अगर limsup f ( n ) / g ( n ) = 0. (यह lim f ( n ) / g ( n ) = 0. के बराबर है )
  • f ( n ) = O ( g ( n )) यदि और केवल यदि limsup f ( n ) / g ( n ) < O ।
  • f ( n ) = Θ ( g ( n )) यदि और केवल अगर 0 <limsup f ( n ) / g ( n ) < Θ ।
  • f ( n ) = Ω ( g ( n )) यदि और केवल अगर limsup f ( n ) / g ( n )> 0. (यह उस f ( n के बराबर है ) o ( g ( n )) नहीं है।)
  • f ( n ) = ω ( g ( n )) यदि और केवल अगर लिमअप f ( n ) / g ( n ) = ω । (यह उस एफ के बराबर है ( एन ) ओ ( जी ( एन )) नहीं है।)

या समकक्ष,

  • ( एन ) = ओ ( जी ( एन )) तभी हर के लिए करता है, तो > 0, पर्याप्त रूप से बड़े के लिए n , ( एन ) ≤ सीजी ( एन )।
  • ( एन ) = हे ( जी ( एन )) यदि और केवल कुछ के लिए अगर > 0, पर्याप्त रूप से बड़े के लिए n , ( एन ) ≤ सीजी ( एन )।
  • f ( n ) = Θ ( g ( n )) यदि और केवल अगर f ( n ) = O ( g ( n )) और f ( n ) = Ω ( g ( n ))।
  • f ( n ) = Ω ( g ( n )) यदि और केवल अगर कुछ d > 0 के लिए, असीम रूप से कई n , f ( n ) ⋅ d ( g ( n ) के लिए।
  • f ( n ) = ω ( g ( n )) यदि और केवल यदि प्रत्येक d > 0 के लिए, असीम रूप से कई n , f ( n ) ⋅ d ( g ( n ) के लिए।

लेकिन मुझे नहीं पता कि यह एक आम बात है या नहीं। इसके अलावा मुझे नहीं पता कि यह शिक्षण के लिए उपयुक्त है या नहीं। समस्या यह है कि हम कभी-कभी इसके बजाय लिमिनफ द्वारा instead () को परिभाषित करना चाहते हैं (जैसा कि आपने पहली परिभाषा में किया था)। उदाहरण के लिए, जब हम कहते हैं कि "इस रैंडमाइज्ड एल्गोरिथ्म की त्रुटि की संभावना 2 do ( n ) है ," हमारा मतलब यह नहीं है कि त्रुटि संभावना केवल छोटे रूप से कई n के लिए घातीय रूप से छोटी है !


मैं लिम्सअप परिभाषाओं का भी उपयोग करता हूं, लेकिन उन छात्रों के लिए जिन्होंने लिमअप (लगभग सभी) नहीं देखा है, मुझे वैसे भी स्पष्ट मात्रा में विस्तार करना होगा।
जेफ़

@ जेफ: मैं मानता हूं कि अधिकांश छात्रों ने लिमअप नहीं देखा है, इसलिए यदि हम लिमअप परिभाषाओं का उपयोग करते हैं, तो हमें कक्षा के बजाय क्वांटिफायर का उपयोग करना होगा।
त्सुयोशी इतो

2
क्वांटिफायर संस्करणों के साथ समस्या यह है कि उन्हें याद रखना और कल्पना करना मुश्किल है। मैं पसंद , क्योंकि यह "के रूप में उच्चतम सीमा बिंदु" में वर्णित किया जा सकता है। एक संभावित व्याख्या है: "यह l i m की तरह है , सिवाय इसके कि l i m केवल तभी काम करता है जब अनुक्रम परिवर्तित हो जाता है। यदि अनुक्रम परिवर्तित नहीं होता है, उदाहरण के लिए क्योंकि एल्गोरिथ्म कुछ n के लिए बहुत तेज और दूसरे n के लिए धीमा के बीच दोलन करता है , फिर हम उच्चतम सीमा बिंदु लेते हैं। " limsuplimlimnn
हेनरिक एपेल्मस सिप

वास्तव में, क्या एल्गोरिदम के लिए कोई प्राकृतिक उदाहरण हैं जहां चलने का समय दोलन करता है?
हेनरिक एपेल्मस

2
@ हेनरिक: मैंने पहले से ही एन कोने पर ग्राफ के एक परिपूर्ण मिलान को खोजने के लिए एक एल्गोरिथ्म के चल रहे समय का उल्लेख किया है, लेकिन क्या यह एक प्राकृतिक उदाहरण के रूप में गिना जाता है? मैंने एक और उदाहरण जोड़ा जहां रनिंग टाइम ऑसिलेट नहीं करता है लेकिन f (n) / g (n) ऑसिलेट करता है। उदाहरण अंतरिक्ष जटिलता के बारे में बोलता है, लेकिन उसी उदाहरण की समय जटिलता में समान संपत्ति है।
त्सुयोशी इतो सेप

8

सीमाओं का उपयोग करना थोड़ा भ्रमित करने वाला है (1) इसकी अधिक जटिल धारणा (2) यह f = O (g) को अच्छी तरह से नहीं पकड़ती है (जैसा कि हम ऊपर चर्चा में देख सकते हैं)। मैं आमतौर पर प्राकृतिक से प्राकृतिक (सख्ती से सकारात्मक) संख्याओं के कार्यों के बारे में बात करता हूं (जो कि चलने वाले समय के लिए पर्याप्त है), थोड़ा-ओ सामान छोड़ें, और फिर परिभाषा संक्षिप्त है और 1 वर्ष के लिए उपयुक्त है:

Dfn: f = O (g) यदि कुछ C के लिए सभी n के लिए हमारे पास है कि f (n) <= C * g (n) है


1
पहले मुझे यह परिभाषा पसंद नहीं थी क्योंकि "सभी एन" बताते हुए महत्वपूर्ण तथ्य को अस्पष्ट करता है कि ओ () संकेतन केवल बड़े एन के कार्यों के व्यवहार के बारे में परवाह करता है। हालांकि, कोई फर्क नहीं पड़ता कि हम किस परिभाषा को चुनते हैं, मुझे लगता है कि हमें इस तथ्य को परिभाषा के साथ मिलकर स्पष्ट करना चाहिए। इस तरह से सोचना, इस सरल परिभाषा को बताते हुए काफी अच्छा लगता है।
Tsuyoshi Ito

हालांकि यह कैप्चर सार, मैं नापसंद है कि यदि सभी के लिए n , जी ( एन ) = 0 सभी के लिए n करने के लिए एन 0 , और जी ( एन ) = ( एन ) + 1 अन्यथा, तो = O ( g ) लेकिन यह परिभाषा इस रिश्ते को पकड़ने में विफल है। तो किसी को उन कार्यों के बारे में कुछ हाथ मिलाना होगा जो कुछ अर्थों में अच्छी तरह से व्यवहार करते हैं। f(n)=nng(n)=0nN0g(n)=f(n)+1f=O(g)
एंड्रस सलामन

2
उन कार्यों के बारे में बात करने का बिंदु जिनकी सीमा प्राकृतिक संख्या है (0 सहित नहीं) वास्तव में जी (n) = 0 के साथ समस्याओं में नहीं पड़ना है।
नोम

1
@Warren Victor Shoup ने कम्प्यूटेशनल नंबर थ्योरी पर अपनी पुस्तक में लॉग इन रनिंग टाइम एनालिसिस के बजाय नोटेशन उपयोग किया है , जो मुझे साफ-सुथरा लगा। len(a)loga
श्रीवत्स नारायणन

1
@Warren (जारी) यह वह यह कैसे बताते है: "एक इनपुट के मामले में एल्गोरिदम के चलने वाले समयों को व्यक्त करने में है, हम आम तौर पर करने के लिए लिखने को पसंद करते हैं एल एन ( एक ) के बजाय लोग इन एक एक कारण यह है esthetic है:। लेखन एल e n ( a ) इस तथ्य पर बल देता है कि दौड़ने का समय बिट की लंबाई का एक कार्य है । दूसरा कारण तकनीकी है: बड़े- O अनुमानों के लिए एक मनमाना डोमेन पर कार्य शामिल हैं, उपयुक्त असमानता पूरे डोमेन में होनी चाहिए, और इसके लिए इस कारण से, लॉग की तरह फ़ंक्शंस का उपयोग करना बहुत असुविधाजनक हैalen(a)logalen(a)aOlog, जो गायब हो गए हैं या कुछ इनपुट पर उपलब्ध नहीं हैं। "
श्रीवत्स नारायणन

5

जब मैं बुनियादी पाठ्यक्रम ले लिया है, हम दिए गए थे परिभाषा और प्रमेय के रूप में अन्य सामान के रूप में बात।c,n0

मुझे लगता है कि पहला व्यक्ति कई लोगों के लिए अधिक स्वाभाविक है जो निरंतर के बजाय असतत सोचते हैं, यह सबसे अधिक कंप्यूटर वैज्ञानिक (मेरे अनुभव में) है। यह भी जिस तरह से हम आम तौर पर उन चीजों के बारे में बात बेहतर फिट बैठता है: "डिग्री 3 की एक बहुपद समारोह है कि एक ऊपरी इस बात के लिए बाध्य नहीं है ऊपर एक निरंतर कारक है।"f

संपादित करें : यदि आप इस परिभाषा का उपयोग आप बोलने के इस तरह से करने के लिए भी करीब प्राप्त कर सकते हैं: (ध्यान दें कि d = f ( n 0 ) इस परिभाषा को आम तौर पर दिए गए एक से जोड़ता है)fO(g):⇔c,d>0n0:f(n)cg(n)+dd=f(n0)

जटिलता वर्ग की गणना के लिए सीमा सामान बहुत उपयोगी है, जो कलम और कागज के साथ है।

किसी भी मामले में, मुझे लगता है कि छात्रों के लिए यह सीखना बहुत उपयोगी है कि समतुल्य परिभाषाएँ (उम्मीद है) का खजाना है। उन्हें यह महसूस करने में सक्षम होना चाहिए कि कोई भी परिभाषा नहीं होने की स्थिति में मतभेदों को उठाएं।


4

केवल कुछ साल पहले इन अवधारणाओं का अध्ययन करने के बाद, वे मेरी कक्षा के लिए समझाना मुश्किल नहीं थे (जैसा कि प्रेरण या गर्भ निरोधकों जैसी अवधारणाओं के विपरीत)। मेरी राय में पथरी से परिचित लोगों के लिए सीमाएं और सीमाएं केवल "सहज" हैं। लेकिन ऐसे गणित ग्राउंडिंग वाले छात्रों के पास वैसे भी सेट-थ्योरिटिक बैकग्राउंड होगा, ताकि वे असतत क्वालिफायर प्रक्रिया कर सकें।

इसके अलावा, अधिक महत्वपूर्ण बात यह है कि याद रखें कि अंततः आपके छात्र अन्य सीबीएस सिद्धांत की पाठ्यपुस्तकों को पढ़ने के लिए (उम्मीद है) जाएंगे, और शायद एक दिन शोध पत्र भी। जैसे, उनके लिए यह बेहतर है कि वे क्षेत्र में मानक संकेतन के साथ सहज रहें, भले ही यह आदर्श रूप से शुरू में कल्पना नहीं की गई थी। एक बार उन्हें मानक परिभाषा देने के बाद कोई नुकसान नहीं होता है, क्योंकि उन्होंने मानक को आत्मसात कर लिया है।


3

इस मुद्दे पर एक दिलचस्प कदम के लिए, डॉन नथ के अच्छी तरह से लिखे गए पत्र "ओ नोटेशन के माध्यम से पथरी" को देखें । वह रिवर्स व्यू की वकालत करता है कि कैलकुलस को 'ए', 'ओ' और 'ओ' नोटेशन के जरिए पढ़ाया जाना चाहिए।

नोट: वह मानक "O" अंकन को परिभाषित करने में प्रारंभिक कदम के रूप में "ए" अंकन का उपयोग करता है। एक मात्रा , A की y (यानी, x = A ( y ) ) है, यदि | x | । विशेष रूप से, यह कहना समझ में आता है 100 है एक ( 200 )xAyx=A(y)|x|y100A(200)


1
  1. Tsuyoshi Ito की परिभाषाएँ बिलकुल सही नहीं लगती हैं। छोटे-ओमेगा और बड़े-ओमेगा के लिए परिभाषाओं में लिमिनाफ का उपयोग करना चाहिए, न कि लिमसअप का। बिग-थीटा की परिभाषा में लिमिनाफ पर एक निचली-सीमा और एक ऊपरी-सीमा दोनों की आवश्यकता होती है।

  2. F (n) = O (g (n)) की एक परिभाषा यह है कि वहाँ एक और फ़ंक्शन f '(n)> = f (n) मौजूद है, जैसे कि लिम f' (n) / g (n) <infinity।

  3. क्यों newbies को जवाब पोस्ट करने की अनुमति दी जाती है लेकिन टिप्पणी नहीं की जाती है?


1
आइटम 1 के रूप में, मेरा मतलब है कि सभी मामलों में सीमअप है, और इसका कारण मेरे उत्तर के दूसरे पैराग्राफ में बताया गया है।
त्सुयोशी इतो सेप

यह दुर्भाग्य से एक स्पैम अवरोधन तंत्र है।
सुरेश वेंकट

एसो, आप अपने उत्तरों में लेटेक्स का उपयोग कर सकते हैं।
सुरेश वेंकट

1

पहले , मैं छात्रों को समीकरण दिखाने से पहले कुछ अंतर्ज्ञान विकसित करने की कोशिश करता हूं ।

  • "मर्ज-सॉर्ट बनाम इंसर्शन-सॉर्ट" अच्छा शुरुआती बिंदु है।

फिर, बाद में ... मैं दोनों तरीके दिखाने की कोशिश करता हूं। छात्रों, कि अंतर्ज्ञान पर अधिक निर्भर करता है पसंद करते हैं

=हे(जी) iff (सी>0)(n00)(nn0)((n)सीजी(n))
जबकि जो लोग गणित, समीकरण, बीजगणित आदि पर अधिक भरोसा करते हैं, वे पसंद करते हैं "लिमn“परिभाषाएँ।

एक और पहलू यह है कि, यह ठोस अध्ययन के कार्यक्रम पर निर्भर करता है। IMHO पिछले विषयों के आधार पर परिभाषाओं में से एक अधिक उपयुक्त होगा - जबकि IMHO अभी भी दोनों को दिखाने और दोनों प्रकार के समाधानों को स्वीकार करने के लिए अच्छा है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.