“ เหนี่ยวนำ” และ“ ซ้ำ ๆ ” มีความหมายคล้ายกันมากหรือไม่?


11

"เหนี่ยวนำ" และ "เรียกซ้ำ" หมายถึงคล้ายกันมากหรือไม่

ตัวอย่างเช่นหากมีอัลกอริทึมที่กำหนดเวกเตอร์ n-dim โดยพิจารณาส่วนประกอบ k + 1 แรกตามองค์ประกอบ k แรกที่ได้รับการพิจารณาและเริ่มต้นด้วยองค์ประกอบแรกคุณจะเรียกมันว่าทำงานซ้ำหรือเหนี่ยวนำได้หรือไม่? ฉันใช้คำว่า "ซ้ำซาก" แต่วันนี้มีคนบอกว่า "เหนี่ยวนำ"


บทความเกี่ยวกับการเหนี่ยวนำและการเรียกซ้ำสรุปนี้เป็นอย่างดี แต่ส่วนสำคัญคือพวกมันเกี่ยวข้องกันอย่างใกล้ชิด หลักฐานการเหนี่ยวนำทางคณิตศาสตร์สามารถเขียนเป็นอัลกอริทึมแบบเรียกซ้ำ
Merbs

โดยทั่วไปแล้วการเหนี่ยวนำหมายถึงการเรียกซ้ำจากถึงn + 1ดังนั้นคำวิเศษณ์ทั่วไปจึงเรียกซ้ำได้ nn+1
Yuval Filmus

@YuvalFilmus เป็นแบบเรียกซ้ำแบบใด
ทิม

@YuvalFilmus: นั่นเป็นความคิดที่ จำกัด มากเกี่ยวกับอุปนัย
Dave Clarke

สำหรับฉันพวกเขาหมายถึงสิ่งเดียวกันนอกบริบท ในบริบทเฉพาะพวกเขาอาจหมายถึงสิ่งที่แตกต่างกัน
Gilles 'หยุดความชั่วร้าย'

คำตอบ:


6

ไม่แต่ไม่ใช่เพราะเหตุผลที่คนอื่นให้ ความแตกต่างระหว่างการเรียกซ้ำและการเหนี่ยวนำไม่ใช่ว่าการเรียกซ้ำคือ "จากบนลงล่าง" และการเหนี่ยวนำคือ "จากล่างขึ้นบน" การเหนี่ยวนำการเป็น isomorphic กับสิ่งที่เรียกว่า "การเรียกซ้ำ primitve" แต่โดยทั่วไปเรียกซ้ำเป็นอย่างเคร่งครัดประสิทธิภาพมากขึ้นกว่าการเหนี่ยวนำ

ความแตกต่างระหว่างจากบนลงล่างและล่างขึ้นบนเป็นเรื่องเล็กน้อย - โปรแกรมเรียกซ้ำแบบดั้งเดิมจากบนลงล่างใด ๆ สามารถแปลงเป็นกลไกจากล่างขึ้นบนได้ ในความเป็นจริงหลักฐานใด ๆ โดยการเหนี่ยวนำสามารถกลายเป็นโปรแกรมซ้ำ ในกรอบของแคลคูลัสของการสร้างแบบอุปนัยหากคุณต้องการพิสูจน์ว่าจำนวนธรรมชาติทุกตัวเป็นจำนวนน้อยคุณจะต้องเขียนมันเป็นฟังก์ชันที่สร้างการพิสูจน์ว่า n นั้นมีความซับซ้อนโดยการโทรซ้ำเพื่อสร้างหลักฐานที่ n- 1 คือกบดาน

ปัจจัยสำคัญของการเหนี่ยวนำคือสิ่งที่กำหนดไว้ในแง่ของสิ่งเล็ก ๆ และพวกเขา "ก้น" หลังจากหลายขั้นตอนอย่างประณีต ตัวเลขธรรมชาติเป็นอุปนัยเพราะธรรมชาติทุกอย่างเป็น 0 หรือผู้สืบทอดของธรรมชาติที่เล็กกว่า รายการมีการเหนี่ยวนำเนื่องจากทุกรายการว่างเปล่าหรือสามารถแยกย่อย ("กางออก") ลงในองค์ประกอบและรายการขนาดเล็ก

บางครั้งโปรแกรมแบบเรียกซ้ำไม่ได้เขียนในแง่ของสิ่งเล็ก ๆ ตัวอย่างเช่นใช้ฟังก์ชัน Collatz นี้:

fun collatz(n) 
   if n <= 1
      return 0;
   else if n % 2 == 0
     return 1 + collatz(n / 2)
   else
     return 1 + collatz(3 * n + 1)
end

ฟังก์ชั่นนี้ไม่ได้ใช้จากบนลงล่างหรือจากล่างขึ้นบนดังนั้นจึงไม่เหนี่ยวนำจำนวนธรรมชาติ

อาจมีคำสั่งให้ปฏิบัติเช่นนั้น แต่โดยส่วนใหญ่แล้วก็ไม่มีทาง ฟังก์ชั่นเหนือสตรีมที่ไม่มีที่สิ้นสุดเป็นตัวอย่างที่ดี ในความเป็นจริงลำธารเป็นตัวอย่างต้นแบบของประเภท "coinductive"

"พื้นฐานเชิงปฏิบัติสำหรับการเขียนโปรแกรมภาษา" ของ Bob Harper มีให้บริการออนไลน์ฟรีมีการแนะนำที่ดีเกี่ยวกับประเภทอุปนัย, เหรียญ, และแบบเรียกซ้ำ


2

สำหรับฉันมันส่วนใหญ่เป็นคำถามของมุมมอง ถ้าฉันกำหนดวัตถุตามวัตถุที่เล็กกว่าฉันจะทำ inductively เพื่อให้ได้จากล่างขึ้นบน หากฉันแก้ปัญหาด้วยการแยกมันออกเป็นชิ้นเล็ก ๆ ที่ได้รับการแก้ไขในลักษณะเดียวกับที่ฉันเรียกมันว่าการเรียกซ้ำ

(แก้ไข) PS ดูคำถามที่คล้ายกันในแผนกน้องสาวของเราคณิตศาสตร์ซ้ำกับอุปนัยนิยาม ฉันพูดจากคำตอบของ Carl Mummert:

คำอธิบายที่ดีที่สุดของฉันคือ "คำนิยามอุปนัย" เป็นเรื่องธรรมดามากขึ้นเมื่อเรากำหนดชุดของวัตถุ "ไม่มีอะไร" ในขณะที่ "คำนิยามซ้ำ" เป็นเรื่องธรรมดามากเมื่อเรากำหนดฟังก์ชั่นในการรวบรวมวัตถุที่มีอยู่แล้ว

แต่ที่สำคัญกว่า:

มันไม่คุ้มค่าที่จะนอนไม่หลับ


ดังนั้น "recursion = หารและพิชิต" ซึ่งอันดับแรกจากบนลงล่างและจากล่างขึ้นบน
ทิม

1

ไม่พวกเขาไม่เหมือนกัน และคุณพูดถูก (ฉันสมมติว่าอัลกอริทึมที่คุณอธิบาย): มันซ้ำ

เหตุผลคือความหมายของคำทั้งสองซึ่งคุณสามารถอ่านในพจนานุกรมหรือวิกิพีเดีย

การเหนี่ยวนำ (สมมติว่า 'อุปนัยเชิงคณิตศาสตร์') เป็นเรื่องเกี่ยวกับการพิสูจน์ว่าทุกกรณีของการโต้แย้งเป็นจริง

การเรียกซ้ำเป็นการเฉพาะเกี่ยวกับกระบวนการที่อาจถูกทำซ้ำในบางวิธีภายในกระบวนการเดียวกัน

RE: คำตอบของคนอื่น:

หลังจากเห็นคำตอบของคนอื่นฉันสามารถเข้าใจว่าทำไมจึงมีความสับสน: เมื่อกำหนดโครงสร้างข้อมูลฟังก์ชั่นและภาษาที่นักทฤษฎีบางคนดูเหมือนจะใช้ 'อุปนัย' และ 'ซ้ำ' ในทางที่สับสน (ดูความคิดเห็นต่อคำถามนี้) ฉันไม่คิดว่าคำตอบของ Koppel (แม้จะมีคะแนนโหวตสูงสุดในปัจจุบัน) สะท้อนความสับสนนั้นจริงๆ เนื่องจากเรากำลังพูดถึงอัลกอริทึมฉันจะไม่พูดว่ามี 'อัลกอริทึมอุปนัย'; ฉันคิดว่านั่นเป็นหมวดหมู่ที่ไม่จำเป็น


การเหนี่ยวนำไม่เพียง แต่เกี่ยวกับการพิสูจน์ นอกจากนี้คุณยังใช้มันตลอดเวลาเพื่อกำหนดโครงสร้างแบบเรียกซ้ำ (โครงสร้างข้อมูลภาษาและอื่น ๆ )
inductively

@missingno โปรดระบุแหล่งที่มาสำหรับคำนิยามนั้น
Tom

ตัวอย่างหนึ่งที่ฉันคิดได้คือที่นี่ : "ภาษาของ \ mathcal {L} หรือที่รู้จักกันในชื่อชุดของformulæสูตรที่มีรูปแบบที่ดีหรือ wffs ถูกกำหนดโดย inductively กฎต่อไปนี้:"
hugomg

@missingno ซึ่งนำไปสู่หน้าวิกิพีเดียนี้ที่ฉันคิดว่ามีการใช้คำซ้ำซ้อนและสับสนของคำว่า 'อุปนัย' ซึ่งส่วนใหญ่ถูกใช้เป็น 'แบบเรียกซ้ำ'
Tom

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