एक उदाहरण जहां सबसे छोटा सामान्य लंबोदर शब्द सबसे तेज नहीं है


12

चलो size की λ इस प्रकार परिभाषित किया जा -नियम:

  • size(x)=1 ,
  • size(λx.t)=size(t)+1 ,
  • size(ts)=size(t)+size(s)+1

बता दें कि a λ -term t की जटिलता को tx से उसके सामान्य रूप tमें समानांतर बीटा कटौती की संख्या के रूप में परिभाषित किया गया है (लेवी के अर्थ में एक इष्टतम मूल्यांकनकर्ता का उपयोग करके)।tx

मैं एक ही फ़ंक्शन के लिए दो सामान्य λ -terms के उदाहरण की तलाश कर रहा हूं जहां बड़े शब्द की जटिलता कम है।

...

स्पष्टता के लिए संपादित करें

चूंकि ऐसा लगता है कि यह स्पष्ट नहीं है कि मैं क्या पूछ रहा हूं, मैं एक ठोस उदाहरण देने की कोशिश करूंगा। अक्सर एक धारणा है कि किसी फ़ंक्शन की "भोली" / "सबसे सरल" परिभाषा धीमी है और इष्टतम नहीं है। बेहतर प्रदर्शन शब्द की जटिलता को बढ़ाते हैं, क्योंकि आपको डेटा-संरचनाओं, सूत्रों आदि को जोड़ने की आवश्यकता होती है, एक महान उदाहरण है fibonacci, जिसे "भोले" के रूप में परिभाषित किया जा सकता है:

-- The fixed fibonacci definition
fib_rec fib n =
    if (is_zero x) 
        then 1 
        else fib (n - 1) + f (n - 2)

-- Using church numbers instead of the λ-combinator to get a normal form
fib n = n fib_rec 0 n 

इसे अक्सर फ़ाइब की "सबसे सरल" परिभाषा के रूप में माना जाता है, और यह बहुत धीमा (घातीय) है। यदि हम fib(की सामान्य परिभाषाएँ चर्च-संख्या जोड़, पूर्व, is_zero के लिए) का विस्तार करते हैं, और इसे सामान्य करते हैं, तो हमें यह पद मिलता है:

fib = (λa.(a(λbc.(c(λdef.f)(λde.d)(λde.(de))
      (λde.(b(λfg.(c(λhi.(i(hf)))(λh.g)(λh.h)))
      d(b(λfg.(c(λhi.(i(h(λjk.(k(jf))))))(λhi.g)
      (λh.h)(λh.h)))de)))))(λbc.c)a))

संस्मरण तालिकाओं जैसे सुधार इस शब्द को बड़ा बनाते हैं। फिर भी, एक अलग शब्द मौजूद है जो बहुत छोटा है ...

fib = (λa.(a(λb.(b(λcde.(e(λfg.(cf(dfg)))c))))
      (λb.(b(λcd.(cd))(λcd.d)))(λbc.b)))

और, जिज्ञासावश, भोलेपन से भी श्रेष्ठ है, अंदर चल रहा है O(N)। मुझे पता है कि सभी परिभाषाओं में, यह सबसे तेज और सरल दोनों है । समान प्रभाव सॉर्ट के साथ होता है। "Naive" की परिभाषाएँ जैसे बबल सॉर्ट और इंसर्शन सॉर्ट को अक्सर विशाल शब्दों में विस्तारित किया जाता है (20+ लाइनें लंबी), लेकिन एक छोटी सी परिभाषा मौजूद है:

-- sorts a church list (represented as the fold) of church numbers
sort = λabc.a(λdefg.f(d(λhij.j(λkl.k(λmn.mhi)l)(h(λkl.l)i))
       (λhi.i(λjk.bd(jhk))(bd(h(λjk.j(λlm.m)k)c))))e)(λde.e)
       (λde.d(λfg.g)e)c

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


3
कोई में sqrt (n) जटिलता है। n!=n.n1....2.1
टी ....

2
मुझे पूरा यकीन है कि आप AKS एल्गोरिथ्म की तुलना में एक छोटे -term द्वारा परीक्षण विभाजन को कोड कर सकते हैं । λ
एमिल जेकाबेक

2
मैं के साथ @ EmilJeřábek सहमत हैं और, वास्तव में, मैं देख नहीं कैसे एक उदाहरण है, छँटाई एल्गोरिदम को देखकर प्राप्त नहीं है के रूप में आप पहले से ही किया था: नहीं है से तरह कम अवधि को लागू बुलबुला अवधि implmenting , कहते हैं, ढेर तरह? या, मुझे नहीं पता, एक क्रूर-बल खोज, लागू करने के लिए सुपर शॉर्ट, लेकिन घातीय समय, बनाम कोड की अधिक पंक्तियों की आवश्यकता वाले एक चतुर पॉलीटाइम एल्गोरिथ्म ...? मुझे कुछ याद आ रहा है, मुझे डर है कि मैं वास्तव में सवाल नहीं समझता। λλλ
दामियानो माज़ा

1
मैंने वास्तव में इसे लिखने का कोई प्रयास नहीं किया, लेकिन एक सिद्धांतवादी सिद्धांत के रूप में, दो एल्गोरिदम की सापेक्ष लंबाई आमतौर पर प्रोग्रामिंग भाषा की पसंद से बहुत अधिक प्रभावित नहीं होती है, और मुझे पूरी तरह से कोई कारण नहीं दिखता है ldada -calculus एक अपवाद होना चाहिए । विशेष रूप से ध्यान दें कि सामान्यीकरण एक लाल हेरिंग है: सबसे प्राकृतिक तरीका है कि एल्गोरिथ्म को कैसे व्यक्त करें -calculus गेट-गो से सामान्य शब्द देता है, और वैसे भी, IIRC अनलैम्ब्डा के साथ मेरे अनुभव से, आप किसी भी शब्द को एक में बदल सकते हैं लागू होने पर समान परिणाम देने वाली समान लंबाई का सामान्य शब्द। λλλ
एमिल जेकाबेक

2
और हां, जैसा कि डैमियानो बताता है, एकेएस सिर्फ एक उदाहरण था। उसी को कम या ज्यादा किसी भी स्थिति में रखना चाहिए जहां हमारे पास एक तुच्छ अयोग्य एल्गोरिथ्म है, और एक ही समस्या का एक कुशल लेकिन बहुत अधिक परिष्कृत समाधान है।
एमिल जेकाबेक

जवाबों:


10

ब्लम के स्पीडअप प्रमेय को आम तौर पर आंशिक रूप से पुनरावर्ती कार्यों की भाषा में कहा जाता है, लेकिन अंकन में तुच्छ अंतर तक, यह -calculus की भाषा में समान काम करता है ।λ

इसमें कहा गया है कि किसी भी उचित जटिलता उपाय दिए गए (उदाहरण के लिए, प्रश्न में के रूप में कटौती की इष्टतम संख्या) और एक पुनरावर्ती समारोह (उदाहरण के लिए, ), हम एक पुनरावर्ती विधेय पा सकते हैं ऐसा है कि:f ( x , y ) 2 y P ( x )Mf(x,y)2yP(x)

हर एल्गोरिथ्म (यानी, के लिए यहाँ सामान्य रूप में अवधि) कंप्यूटिंग , वहाँ एक और कलन विधि है के लिए है कि -speedup से अधिक : जी पी एच पी ( एक्स , एम ( , एक्स ) ) एम ( जी , एक्स )  सभी बड़ा पर्याप्त इनपुट के लिए  x ,λgPhPfg

f(x,M(h,x))M(g,x) for all large enough inputs x,

जहां माप अनुसार इनपुट पर की गणना की जटिलता को दर्शाता है ।जी एक्स एमM(g,x)gएक्स

इसके फलस्वरूप:

  • पी में दिए गए माप में कोई asymptotically इष्टतम एल्गोरिदम नहीं है

  • विशेष रूप से, लिए सबसे छोटा एल्गोरिथ्म asymptotically इष्टतम नहीं हैपी

  • लिए किसी भी एल्गोरिथ्म के लिए , एक विषम रूप से तेज एल्गोरिथ्म है जिसका सामान्य रूप लंबा है (क्योंकि चर का नाम बदलने के लिए, दी गई लंबाई के केवल सामान्य रूप से कई सामान्य शब्द हैं)पी

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