चलो की इस प्रकार परिभाषित किया जा -नियम:
- ,
- ,
- ।
बता दें कि a -term 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, हर अन्य परिभाषा से मुझे पता है। यह अवलोकन मुझे यह विश्वास करने के लिए प्रेरित करता है कि, आम धारणा के विपरीत, सबसे छोटा शब्द, कोलमोगोरोव जटिलता के साथ, आमतौर पर सबसे तेज है। मेरा प्रश्न मूल रूप से विकराल है, इसके विपरीत का कोई सबूत है, हालांकि मुझे इसे औपचारिक रूप देने में एक कठिन समय होगा।