Biarkan dari -terms didefinisikan sebagai berikut:
- ,
- ,
- .
Biarkan kompleksitas -term didefinisikan sebagai jumlah reduksi beta paralel dari ke bentuk normalnya (menggunakan evaluator optimal dalam pengertian Levy).t t x
Saya mencari contoh dua normal- -terms untuk fungsi yang sama di mana istilah yang lebih besar memiliki kompleksitas yang lebih rendah.
...
Edit untuk kejelasan
karena tampaknya tidak jelas apa yang saya minta, saya akan mencoba memberikan contoh yang solid. Seringkali ada kepercayaan bahwa definisi "naif" / "paling sederhana" dari suatu fungsi adalah lambat dan tidak optimal. Kinerja yang lebih baik meningkatkan kompleksitas istilah, karena Anda perlu menambahkan struktur data, formula, dll. Contoh yang bagus adalah fibonacci
, yang dapat "naif" didefinisikan sebagai:
-- 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
Ini sering dianggap sebagai definisi "paling sederhana" dari fib, dan sangat lambat (eksponensial). Jika kita memperluas dependensi fib
( definisi yang biasa untuk penambahan nomor gereja, pred, is_zero), dan menormalkannya, kita mendapatkan istilah ini:
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))
Perbaikan seperti tabel memoisasi akan membuat istilah ini lebih besar. Namun, ada istilah berbeda yang jauh lebih kecil ...
fib = (λa.(a(λb.(b(λcde.(e(λfg.(cf(dfg)))c))))
(λb.(b(λcd.(cd))(λcd.d)))(λbc.b)))
dan, anehnya, juga asimtotik unggul satu naif, berjalan di O(N)
. Dari semua definisi yang saya ketahui, ini adalah yang tercepat dan paling sederhana . Efek yang sama terjadi dengan sort. Definisi "Naif" seperti jenis gelembung dan jenis sisipan sering diperluas menjadi istilah besar (panjang 20+ baris), tetapi ada definisi kecil:
-- 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
Yang juga terjadi lebih cepat, tanpa gejala, dari setiap definisi lain yang saya tahu. Pengamatan ini membuat saya percaya bahwa, berbeda dengan kepercayaan umum, istilah paling sederhana, dengan kompleksitas Kolmogorov terkecil, biasanya lebih cepat. Pertanyaan saya pada dasarnya adalah apakah ada bukti yang berlawanan, walaupun saya mengalami kesulitan dalam memformalkannya.
Jawaban:
Teorema speedup Blum biasanya dinyatakan dalam bahasa fungsi rekursif sebagian, tetapi hingga perbedaan sepele dalam notasi, ia bekerja sama saja dalam bahasa -calculus.λ
Dikatakan bahwa dengan diberikan ukuran kompleksitas yang masuk akal (misalnya, jumlah reduksi optimal seperti dalam pertanyaan) dan fungsi rekursif (misalnya, ), kita dapat menemukan predikat rekursif sedemikian rupa sehingga:f ( x , y ) 2 y P ( x )M f(x,y) 2y P(x)
di mana menunjukkan kompleksitas perhitungan pada input sesuai untuk mengukur .g x MM(g,x) g x M
Karena itu:
khususnya, algoritma terpendek untuk tidak optimal asimptotikP
untuk algoritme apa pun untuk , ada algoritme yang lebih cepat secara asimptotik yang bentuk normalnya lebih panjang (karena hingga penggantian nama variabel, hanya ada banyak istilah normal dengan panjang tertentu)P
sumber