YiMatrix · วารสารสำนักวิชา
คัมภีร์อี้จิงซ่อนอัลกอริทึมไว้ ก่อนเครื่องทัวริงสามพันปี
“จำนวนแห่งการเปลี่ยนแปลงใหญ่คือห้าสิบ ใช้สี่สิบเก้า” — ประโยคใน ‘โจวอี้·ซี่ฉือ’ เมื่อแปลเป็นโค้ดคืออัลกอริทึมที่มีการเริ่มต้น การวนซ้ำ และเงื่อนไขสิ้นสุด ใช้สามมาตรวัดคือประวัติศาส

"จำนวนแห่งการเปลี่ยนแปลงใหญ่คือห้าสิบ ใช้สี่สิบเก้า"
ประโยคนี้เขียนไว้ใน 'โจวอี้·ซี่ฉือ'
คุณอาจไม่เข้าใจ ไม่เป็นไร ผมจะแปลให้เป็นโค้ดที่โปรแกรมเมอร์ยุคนี้เข้าใจได้ทันที — เริ่มจากห้าสิบ เก็บไว้หนึ่งอันไม่ใช้ ที่เหลือสี่สิบเก้าแบ่งเป็นสองกอง ดึงหนึ่งอันคั่นระหว่างนิ้ว นับทีละสี่กลุ่มแล้วดูเศษ ทำซ้ำสิบแปดครั้ง ได้หนึ่งเฮกซะแกรม
นี่ไม่ใช่ปรัชญา
นี่คืออัลกอริทึมที่เขียนไว้เมื่อนานมาแล้ว และยังทำงานได้ในวันนี้
ด้านล่างผมจะใช้สามมาตรวัด: ประวัติศาสตร์คณิตศาสตร์ ประวัติศาสตร์วิทยาการคอมพิวเตอร์ และการเข้ารหัสสารสนเทศ เมื่อวัดแล้วคุณจะพบว่าคนที่เขียนข้อความนี้ทำสิ่งเดียวกับคนที่ภายหลังอธิบายเรื่อง 'การคำนวณ' ได้ชัดเจน
หนึ่ง: ถอดรหัสทีละบรรทัด
ก่อนอื่นแยกข้อความต้นฉบับทีละประโยค แต่ละประโยคภาษาจีนโบราณ จับคู่กับภาษาพูด แล้วเทียบกับแนวคิดในโค้ด
「大衍之数五十,其用四十有九。」
ไม้ยาร์โรว์ห้าสิบต้น (ถือเป็นเครื่องมือคำนวณในมือคนโบราณ เปรียบได้กับลูกคิด) เก็บไว้หนึ่งต้นไม่ใช้ ที่เหลือสี่สิบเก้าต้นเข้าสู่การคำนวณ
— นี่คือ การเริ่มต้น: กำหนดค่าเริ่มต้น
「分而为二以象两。」
แบ่งสี่สิบเก้าต้นสุ่มเป็นสองกอง
— นี่คือการแบ่งสถานะออกเป็นสองส่วน สถานะของกระบวนการทั้งหมดเริ่มเปลี่ยนแปลงจากตรงนี้
「挂一以象三。」
ดึงหนึ่งต้นจากกองหนึ่ง คั่นระหว่างนิ้ว
— การกระทำที่แน่นอนในการหยิบตัวเลข
「揲之以四以象四时。」
นับสองกองทีละสี่ต้น
— ทำการมอดุโลด้วย 4 เพื่อดูเศษ
「归奇于扐以象闰。」
เศษที่เหลือจากการนับ — หนึ่ง สอง สาม หรือสี่ต้น — ก็คั่นระหว่างนิ้วเพื่อบันทึก
— เก็บเศษไว้ในตัวแปรชั่วคราว
「故再扐而后挂。」
รอบทั้งหมดนี้เรียกว่าหนึ่งการเปลี่ยนแปลง สามการเปลี่ยนแปลงได้หนึ่งเส้น หกเส้นได้หนึ่งเฮกซะแกรม
— นี่คือ การวนซ้ำ และ เงื่อนไขสิ้นสุด: วนซ้ำสิบแปดครั้ง สะสมหกเส้น แล้วหยุด
รวมห้าประโยคนี้เข้าด้วยกัน ได้เป็นสิ่งนี้ ถ้า看不懂โค้ดก็ไม่เป็นไร — ด้านซ้ายคือการกระทำ ด้านขวาหลังเครื่องหมาย # คือประโยคภาษาจีนโบราณที่ตรงกัน อ่านทีละบรรทัด
init ไม้ยาร์โรว์ = 50 # 大衍之数五十
use ไม้ยาร์โรว์ = 49 # 其用四十有九 (เก็บหนึ่งต้นไม่ใช้)
loop 18 ครั้ง: # 十八变
สุ่มแบ่งสองกอง # 分而为二以象两
ดึงหนึ่งต้นคั่นนิ้ว # 挂一以象三
นับทีละสี่กลุ่มหาเศษ # 揲之以四以象四时
เก็บเศษไว้ # 归奇于扐以象闰
return หกเส้นได้เฮกซะแกรม # 故再扐而后挂
คุณเห็นอะไรในสิ่งนี้
มันมีการเริ่มต้น (ห้าสิบ) มีตัวแปรสถานะ (จำนวนไม้ยาร์โรว์ในมือ เปลี่ยนแปลงในแต่ละรอบ) มีการวนซ้ำ (สิบแปดการเปลี่ยนแปลง) มีเงื่อนไขสิ้นสุด (ได้หกเส้นแล้วหยุด)
การเริ่มต้น ตัวแปรสถานะ การวนซ้ำ เงื่อนไขสิ้นสุด — สี่สิ่งนี้คือโครงกระดูกของโปรแกรมใดๆ
ข้อความนั้นมีโครงกระดูกครบถ้วน
สอง: นี่คือเครื่องทัวริง
ครั้งแรกที่ผมอ่านจบ ผมหยุดคิดอยู่นาน
นี่ไม่ใช่นักปรัชญาที่แสดงโลกทัศน์ นี่เป็นกระบวนการที่แน่นอน สามารถทำตามทีละขั้นได้ — ให้เงื่อนไขเริ่มต้นเดียวกัน ทำตามขั้นตอนเดียวกัน แต่ละขั้นมีกฎชัดเจน
ในปี 1936 อลัน ทัวริง นักคณิตศาสตร์ชาวอังกฤษ เขียนบทความชื่อ 'On Computable Numbers'
ในบทความนั้น เขาอธิบายอย่างเคร่งครัดเป็นครั้งแรกว่ากระบวนการแบบไหนที่เครื่องจักรสามารถทำทีละขั้นและได้ผลลัพธ์ — ต่อมาเรียกว่า 'คำนวณได้' มาตรฐานของเขาชัดเจน: กระบวนการต้องมีสถานะเริ่มต้น มีกฎการเปลี่ยนผ่านทีละข้อ มีเงื่อนไขสิ้นสุด ถ้าครบสามอย่างนี้ เครื่องจักรคำนวณได้
แบบจำลองนามธรรมที่เขาสร้างขึ้น ต่อมาเรียกว่า เครื่องทัวริง
คอมพิวเตอร์ทุกเครื่อง โทรศัพท์ทุกเครื่องที่คุณใช้ทุกวัน ล้วนเป็นการนำเครื่องทัวริงไปใช้ในทางวิศวกรรม สิ่งที่ CPU ทำ เมื่อถอดถึงชั้นต่ำสุด คือ 'อ่านสถานะปัจจุบัน ตามกฎไปยังสถานะถัดไป จนกว่าจะหยุด'
กลับมาที่ไม้ยาร์โรว์ห้าสิบต้น
สถานะเริ่มต้น — ห้าสิบเหลือสี่สิบเก้า กฎการเปลี่ยนผ่าน — แบ่งสอง ดึงหนึ่ง นับสี่ เก็บเศษ เงื่อนไขสิ้นสุด — หกเส้นได้เฮกซะแกรม
ครบทุกอย่าง
จำนวนแห่งการเปลี่ยนแปลงใหญ่ คืออัลกอริทึมที่ใช้ไม้ยาร์โรว์และมือมนุษย์ก็ทำงานได้ — และผู้ดำเนินการคือเครื่องทัวริงรุ่นแรกสุด
เส้นเวลายิ่งน่าสนใจ
ปี 1936 ทัวริงใช้บทความทั้งฉบับเพื่ออธิบายให้ชัดเจนเป็นครั้งแรกว่า 'กระบวนการแบบไหนที่คำนวณได้'
ส่วนคนโบราณที่เขียนข้อความ 'ซี่ฉือ' ไม่มีคำว่า 'อัลกอริทึม' ไม่มีแนวคิดนี้ ไม่มีแม้ภาษาคณิตศาสตร์นามธรรมเพื่ออธิบายสิ่งที่ตนทำ
ทัวริงใช้บทความหนึ่งเพื่ออธิบาย 'อัลกอริทึม' ให้ชัดเจน คนโบราณไม่ได้อธิบายให้ชัดเจน — พวกเขาทำให้มันทำงานได้เลย
สาม: จากไทเก๊กถึง 64 เฮกซะแกรม ต้นไม้ทวิภาคที่สมบูรณ์แบบ
อี้จิงยังมีโครงสร้างอื่นที่ตรงไปตรงมา มองเห็นได้ทันที
ใน 'ซี่ฉือซ่างจวน' บทที่สิบเอ็ด มีประโยค:
「易有太极,是生两仪,两仪生四象,四象生八卦。」
แปลเป็นภาษาปัจจุบัน:
ไทเก๊กคือหนึ่ง สองอีคือสอง สี่เซียงคือสี่ แปดกัวคือแปด
หนึ่งเป็นสอง สองเป็นสี่ สี่เป็นแปด แต่ละชั้นคูณด้วยสอง แปดกัวจับคู่กัน แปดคูณแปด ได้หกสิบสี่เฮกซะแกรม
เขียนลำดับตัวเลขนี้:
1 → 2 → 4 → 8 → 16 → 32 → 64
คือ 2 ยกกำลังศูนย์ ถึง 2 ยกกำลังหก หกยกกำลังสอดคล้องกับหกเส้นของหนึ่งเฮกซะแกรม
นี่คือต้นไม้ทวิภาคที่เคร่งครัด แต่ละโหนดแตกเป็นสองกิ่ง — หยินหรือหยาง 0 หรือ 1 ไม่มีทางเลือกที่สาม
ชื่อที่คุณเคยได้ยินในวิทยาการคอมพิวเตอร์ — การค้นหาแบบทวิภาค ฮีปทวิภาค การเข้ารหัสฮัฟฟ์แมน — ล้วนเป็นญาติห่างๆ ของต้นไม้นี้ วันนี้คุณปลดล็อกโทรศัพท์ด้วยใบหน้า เบื้องหลังคือ 0 และ 1 ที่แบ่งครึ่งทีละชั้น
หนึ่ง สอง สี่ แปด สิบหก สามสิบสอง หกสิบสี่ — นี่ไม่ใช่การนับเล่นๆ แต่เป็นต้นไม้ที่กำลังเติบโต

กลับมาที่ 'ห้าสิบ' มันไม่ใช่ตัวเลขที่สุ่มมา เบื้องหลังมีเลขคณิต
'ซี่ฉือ' บทที่เก้ากล่าวว่า จำนวนฟ้า (เลขคี่: หนึ่ง สาม ห้า เจ็ด เก้า) รวมกันได้ยี่สิบห้า จำนวนดิน (เลขคู่: สอง สี่ หก แปด สิบ) รวมกันได้สามสิบ รวมเป็นห้าสิบห้า
แต่การคำนวณใช้ห้าสิบ — ห้าสิบห้าลบห้า
ขั้นนี้ต้องบอกตามตรง: ทำไมลบห้า? คนโบราณให้เหตุผลว่าใช้ 'ห้าธาตุ' เป็นฐาน ห้าเลขนี้อยู่ภายนอกระบบไม่เข้าร่วมการคำนวณ ขั้นนี้เป็นข้อตกลง ไม่ได้推导จาก 'ห้าสิบห้า'
ส่วนจากห้าสิบถึงสี่สิบเก้า — ห้าสิบลบหนึ่ง — ขั้นนี้สะอาด: 'หนึ่ง' ที่ลบออกคือ 'ไทเก๊ก' ที่ไม่เคลื่อนที่ เป็นจุดเริ่มต้นที่ไม่เข้าการคำนวณ
ห้าสิบห้า ห้าสิบ สี่สิบเก้า — ตัวเลขเหล่านี้ไม่แยกกัน อย่างน้อยครึ่งหลังเชื่อมโยงกันเป็นลูกโซ่ มันเป็นโจทย์เลขคณิต ไม่ใช่ความลี้ลับ
สี่: แต่อี้จิงไม่ใช่ต้นกำเนิดของอัลกอริทึม
พูดมาถึงตรงนี้ ผมต้องหยุดและบอกสิ่งหนึ่งที่คนมักตื่นเต้นแล้วเข้าใจผิด
อี้จิงไม่ใช่ต้นกำเนิดของวิทยาการคอมพิวเตอร์ในปัจจุบัน
ไลบ์นิซ คนที่ถูกเล่าว่า 'คิดค้นเลขฐานสองจากแปดกัว' — เขาเขียนต้นฉบับเลขฐานสองด้วยตัวเองในปี 1679 ตอนนั้นเขาไม่เคยเห็นแผนภาพกัวของจีนเลย เขาไม่ได้เรียนรู้เลขฐานสองจากแปดกัว
เขามาเห็นแผนภาพหกสิบสี่เฮกซะแกรมของฝูซีในปี 1703 แล้วประหลาดใจ: คนจีนโบราณเขียนสิ่งนี้ไว้แล้ว ลำดับเหตุการณ์กลับกัน
ทัวริงก็เหมือนกัน เขาไม่ได้อ่าน 'ซี่ฉือ' แล้วคิดเครื่องทัวริงได้ เขาอยู่ที่เคมบริดจ์ ตามเส้นตรรกะคณิตศาสตร์ตะวันตก มาถึงคำถาม 'อะไรคือสิ่งที่คำนวณได้'
(กลับมาที่ 'นานมาแล้ว' — 'ซี่ฉือ' ที่ถอดรหัสทีละบรรทัด แต่งช้าลงหน่อย ส่วนใหญ่ระหว่างยุคจ้านกั๋วถึงต้นฮั่น แต่สิ่งที่บันทึกคือการคำนวณที่ใช้ก่อนหน้านั้น)
อารยธรรมสองแห่ง ต่างยุคกันหลายพันปี ไม่เคยเห็นกัน ต่างคนต่างค้นพบสิ่งเดียวกัน
สิ่งนี้ น่าทึ่งกว่า 'อี้จิงคือต้นกำเนิด' ร้อยเท่า
ไม่ใช่ใครลอกใคร แต่เมื่อมนุษย์เริ่มสังเกตธรรมชาติและสรุปเป็นกฎ ไม่ช้าก็จะพบโครงสร้างพื้นฐานเดียวกัน
โลกที่คำนวณได้ ไม่แบ่งตะวันออกตะวันตก ไม่แบ่งอดีตปัจจุบัน มันอยู่ตรงนั้น รอให้คนจากทิศทางต่างๆ เดินมาชนมัน
คนโบราณไม่มีคีย์บอร์ด ไม่มี CPU ไม่มีคำว่า 'อัลกอริทึม'
พวกเขาใช้ไม้ห้าสิบต้น เขียนการคำนวณที่ทำงานได้ลงในหนังสือที่สืบทอดมาหลายพันปี — นับโลกก่อน เข้ารหัสสถานะ แล้วค่อยๆ อนุมาน สุดท้าย还原เป็นภาพที่เห็น
วันนี้เราเรียกสิ่งนี้ว่าอัลกอริทึม พวกเขาแค่ มองโลกนี้อย่างจริงจัง