Let arasında aşağıdaki gibi tanımlanabilir -terms:λ
- ,
- ,
- .
Bir -term t karmaşıklığı tx normal formuna paralel Lev indirgeme sayısı olarak tanımlanabilir olsun (Levy anlamda optimal bir değerlendirici kullanarak).
Daha büyük terimin daha düşük karmaşıklığa sahip olduğu aynı işlev için iki normal -terms örneği arıyorum .
...
Netlik için düzenleyin
Sorduğum şey belli olmadığı için sağlam bir örnek vermeye çalışacağım. Genellikle bir işlevin "naif" / "en basit" tanımının yavaş ve optimal olmadığı inancı vardır. Daha iyi performans, ek veri yapılarına, formüllere vb. İhtiyaç duyduğunuz için terimin karmaşıklığını artırır. Bunun harika bir örneği, fibonacci
"naif" olarak tanımlanabilir:
-- 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
Bu genellikle fiberin "en basit" tanımı olarak kabul edilir ve çok yavaştır (üstel). Bağımlılıklarını genişletirsek fib
( kilise-sayısı ilavesi için olağan tanımlar , pred, is_zero) ve normalleştirirsek, bu terimi alırız:
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))
Not tabloları gibi iyileştirmeler bu terimi daha büyük hale getirecektir. Oysa vardır çok daha küçük farklı bir terim ...
fib = (λa.(a(λb.(b(λcde.(e(λfg.(cf(dfg)))c))))
(λb.(b(λcd.(cd))(λcd.d)))(λbc.b)))
ve merakla, asimptotik olarak içeri giren saf olandan daha üstündür O(N)
. Tüm tanımların farkındayım, bu hem en hızlı hem de en basit olanı . Aynı etki sıralama için de geçerlidir. Örneğin kabarcık sıralaması ve sıralama genellikle ekleme gibi "Naif" tanımları (uzun 20 + çizgiler) büyük terimlere genişletilmeyecektir ama vardır küçük tanım:
-- 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
Bu da bildiğim diğer tüm tanımlardan daha hızlı, asimptotik olarak oluyor. Bu gözlem, ortak inanışın aksine, en küçük Kolmogorov karmaşıklığına sahip en basit terimin genellikle daha hızlı olduğuna inanmamı sağlıyor. Sorum temel olarak bunun tersini gösteren bir kanıt olup olmadığıdır, ancak resmileştirmekte zorlanıyordum.