Đặt của λ -terms được định nghĩa như sau:
- ,
- ,
- .
Đặt độ phức tạp của -term được định nghĩa là số lần giảm beta song song từ sang dạng bình thường (sử dụng công cụ đánh giá tối ưu theo nghĩa của Levy).
Tôi đang tìm một ví dụ về hai -terms bình thường cho cùng một hàm trong đó thuật ngữ lớn hơn có độ phức tạp thấp hơn.
...
Chỉnh sửa cho rõ ràng
vì dường như không rõ ràng những gì tôi đang hỏi, tôi sẽ cố gắng đưa ra một ví dụ chắc chắn. Thường có một niềm tin rằng định nghĩa "ngây thơ" / "đơn giản nhất" của một hàm là chậm và không tối ưu. Hiệu suất tốt hơn làm tăng độ phức tạp của thuật ngữ, vì bạn cần thêm cấu trúc dữ liệu, công thức, v.v. Một ví dụ tuyệt vời là fibonacci
, có thể được "ngây thơ" định nghĩa là:
-- 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
Đây thường được coi là định nghĩa "đơn giản nhất" của sợi và rất chậm (theo cấp số nhân). Nếu chúng tôi mở rộng sự phụ thuộc của fib
(các định nghĩa thông thường để thêm số nhà thờ, trước, is_zero) và bình thường hóa nó, chúng tôi sẽ nhận được thuật ngữ này:
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))
Các cải tiến như bảng ghi nhớ sẽ làm cho thuật ngữ này lớn hơn. Tuy nhiên, tồn tại một thuật ngữ khác nhỏ hơn nhiều ...
fib = (λa.(a(λb.(b(λcde.(e(λfg.(cf(dfg)))c))))
(λb.(b(λcd.(cd))(λcd.d)))(λbc.b)))
và, tò mò, cũng vượt trội so với người ngây thơ, chạy vào O(N)
. Trong tất cả các định nghĩa tôi biết, đây là cách nhanh nhất và đơn giản nhất . Hiệu ứng tương tự xảy ra với sắp xếp. Các định nghĩa "Ngây thơ" như sắp xếp bong bóng và sắp xếp chèn thường được mở rộng thành các thuật ngữ lớn (dài hơn 20 dòng), nhưng tồn tại một định nghĩa nhỏ:
-- 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
Điều này cũng xảy ra nhanh hơn, không có triệu chứng, hơn mọi định nghĩa khác mà tôi biết. Quan sát này khiến tôi tin rằng, trái ngược với niềm tin chung, thuật ngữ đơn giản nhất, với độ phức tạp Kolmogorov nhỏ nhất, thường là nhanh hơn. Câu hỏi của tôi về cơ bản là có bất kỳ bằng chứng nào ngược lại, mặc dù tôi có một thời gian khó khăn trong việc chính thức hóa nó.