ตัวอย่างที่คำแลมบ์ดาปกติที่เล็กที่สุดนั้นไม่เร็วที่สุด


12

ให้ของλ -terms ถูกนิยามดังนี้:sizeλ

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

ปล่อยให้ความซับซ้อนของ -termถูกกำหนดเป็นจำนวนการลดเบต้าแบบขนานจากเป็นรูปแบบปกติ (ใช้ผู้ประเมินที่ดีที่สุดในแง่ความรู้สึกของ Levy)λttx

ฉันกำลังมองหาตัวอย่างของปกติ สองตัวสำหรับฟังก์ชั่นเดียวกันโดยที่คำที่ใหญ่กว่ามีความซับซ้อนต่ำกว่าλ

...

แก้ไขเพื่อความชัดเจน

เนื่องจากดูเหมือนว่ามันไม่ชัดเจนว่าฉันขออะไรฉันจะลองยกตัวอย่าง มักจะมีความเชื่อว่าคำจำกัดความ "ไร้เดียงสา" / "ง่ายที่สุด" ของฟังก์ชั่นนั้นช้าและไม่เหมาะสม ประสิทธิภาพที่ดีขึ้นจะเพิ่มความซับซ้อนของคำศัพท์เนื่องจากคุณต้องการเพิ่มโครงสร้างข้อมูลสูตร ฯลฯ ตัวอย่างที่ยอดเยี่ยมคือ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( คำจำกัดความตามปกติสำหรับการเพิ่มหมายเลขโบสถ์, pred, 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)))

และอยากรู้อยากเห็นก็คือ asymptotically O(N)ดีกว่าไร้เดียงสาคนหนึ่งที่ทำงานอยู่ใน คำจำกัดความของทั้งหมดที่ผมทราบนี้เป็นทั้งเร็วและง่าย ผลเช่นเดียวกันเกิดขึ้นกับการเรียงลำดับ คำจำกัดความ "ไร้เดียงสา" เช่นการเรียงลำดับฟองและการเรียงแทรกมักจะขยายไปสู่คำที่มีขนาดใหญ่ (ความยาว 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
ฉันค่อนข้างมั่นใจว่าคุณสามารถเขียนโค้ดการหารด้วย -term สั้นกว่าอัลกอริทึม AKS λ
Emil Jeřábek

2
ฉันเห็นด้วยกับ @ EmilJeřábekและจริง ๆ แล้วฉันไม่เห็นตัวอย่างที่ไม่ได้มาจากการดูขั้นตอนวิธีการเรียงลำดับตามที่คุณทำอยู่แล้ว: ไม่ใช่ -term ที่ใช้การเรียงลำดับฟองสั้นกว่า -term พูดว่ากองเรียง? หรือฉันไม่รู้การค้นหาแบบเดรัจฉานบังคับสั้นมากที่จะนำไปใช้ แต่เวลาแบบเอ็กซ์โพเนนเชียลเทียบกับอัลกอริทึม polytime ที่ชาญฉลาดซึ่งต้องการโค้ดเพิ่มเติม ... ฉันต้องคิดถึงบางสิ่งบางอย่างฉันกลัวว่าฉันจะไม่เข้าใจคำถามจริงๆ λλ
Damiano Mazza

1
ฉันพยายามที่จะเขียนจริงมันลงไม่ได้ แต่เป็นหลักการแก้ปัญหา, ความยาวความสัมพันธ์ของทั้งสองขั้นตอนวิธีการมักจะไม่ได้รับผลกระทบอย่างมากโดยทางเลือกของการเขียนโปรแกรมภาษาและผมเห็นอย่างไม่มีเหตุผลแคลคูลัสควรจะเป็นข้อยกเว้น . โดยเฉพาะอย่างยิ่งการฟื้นฟูเป็นปลาเฮอริ่งแดงที่นี่: วิธีธรรมชาติที่สุดในการแสดงอัลกอริทึมใน -calculus ให้เงื่อนไขปกติจาก get-go และ IIRC จากประสบการณ์ของฉันกับ Unlambda คุณสามารถแปลงคำใด ๆ ให้เป็น คำศัพท์ปกติที่มีความยาวเท่ากันให้ผลเหมือนกันเมื่อใช้ λλ
Emil Jeřábek

2
และใช่ดังที่ Damiano กล่าวถึง AKS เป็นเพียงตัวอย่าง สิ่งเดียวกันควรจะอยู่ในสถานการณ์ใด ๆ ที่เรามีอัลกอริทึมที่ไม่มีประสิทธิภาพเล็กน้อยและมีวิธีแก้ปัญหาที่มีประสิทธิภาพ แต่มีความซับซ้อนมากกว่าในปัญหาเดียวกัน
Emil Jeřábek

คำตอบ:


10

ทฤษฎีบทเร่งความเร็วของบลัมมักระบุไว้ในภาษาของฟังก์ชั่นวนซ้ำบางส่วน แต่ถึงความแตกต่างเล็กน้อยในสัญกรณ์มันทำงานได้เหมือนกันในภาษาของ -calculusλ

มันบอกว่าได้รับการวัดความซับซ้อนที่สมเหตุสมผล (ตัวอย่างเช่นจำนวนที่เหมาะสมที่สุดของการลดลงในคำถาม) และฟังก์ชั่นวนซ้ำ (ตัวอย่างเช่น ) เราสามารถหาคำกริยา recursiveเช่นนั้น:Mf(x,y)2yP(x)

สำหรับอัลกอริทึมทุกตัว (เช่น -term ในรูปแบบปกติที่นี่)คำนวณมีอัลกอริทึมสำหรับที่มี -speedup เหนือ : λgPhPfg

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

ที่หมายถึงความซับซ้อนของการคำนวณของกับการป้อนข้อมูลตามวัดMM(g,x)gxM

ดังนั้น:

  • Pไม่มีอัลกอริทึมที่เหมาะสมที่สุดในการวัดที่ให้มา

  • โดยเฉพาะอย่างยิ่งอัลกอริธึมที่สั้นที่สุดสำหรับนั้นไม่เหมาะสมที่สุดP

  • สำหรับอัลกอริทึมใด ๆ สำหรับมีอัลกอริธึมที่เร็วกว่า asymptotically ซึ่งรูปแบบปกติจะยาวกว่า (เนื่องจากการเปลี่ยนชื่อของตัวแปรมีเพียงข้อกำหนดปกติจำนวนมากที่มีความยาวที่กำหนด)P

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.