เหตุใดเราจึงคิดว่าอัลกอริทึมสามารถแสดงเป็นบิตสตริงได้


17

ฉันเริ่มอ่านหนังสือเกี่ยวกับความซับซ้อนในการคำนวณและเครื่องทัวริง นี่คือคำพูด:

อัลกอริทึม (เช่นเครื่อง) สามารถแสดงเป็นบิตสตริงเมื่อเราตัดสินใจเกี่ยวกับการเข้ารหัสแบบบัญญัติ

การยืนยันนี้มีให้ในความเป็นจริง แต่ฉันไม่สามารถเข้าใจได้

ตัวอย่างเช่นถ้าฉันมีอัลกอริทึมซึ่งใช้เป็นอินพุตและคำนวณ( x + 1 ) 2หรือ:x(x+1)2

int function (int x){
   x = x + 1; 
   return x**2; 
}

สิ่งนี้สามารถแสดงเป็นสตริงโดยใช้ตัวอักษรอย่างไร?{0,1}


38
คุณไม่ทราบความรู้ขั้นต่ำที่จำเป็นในการทำความเข้าใจวิธีการเข้ารหัสข้อความ วันนี้เป็นวันที่ดีในการเรียนรู้! joelonsoftware.com/2003/10/08/…
Eric Lippert

1
ฉันคิดว่า OP อาจมาจากจุดนี้ในมุมมองที่แตกต่างจากความคลุมเครือในข้อความที่ยกมา ฉันเดาว่า OP หมายถึง 'เครื่องจักรและอัลกอริธึมทั้งหมดสามารถสร้างเป็นบิตสตริงได้อย่างไร' ไม่ใช่อินพุตของเครื่องทัวริงเอง ข้อความที่ยกมาแสดงให้เห็นว่าอัลกอริทึมทั้งหมดสามารถดำเนินการด้วยตนเอง แต่ภาษา c บิตเข้ารหัส utf ไม่พูดอะไรเกี่ยวกับวิธีการที่เครื่องจะดำเนินการกับสตริงที่จริง
Sentinel

3
... ฉันคิดว่าทุกคนที่นี่เข้าใจผิดแหล่งข่าวและนำเรื่องตลกมาใช้มากเกินไปเพราะขาดประสบการณ์ของ Roma ความคิดเห็นและคำตอบส่วนใหญ่เหล่านี้กำลังพูดถึงการเข้ารหัสข้อความสำหรับการส่งข้อมูลโดยพลการขณะที่คำพูดกำลังพูดถึงการเข้ารหัสอัลกอริทึมสำหรับการบริโภคโดยเครื่องทัวริง คำตอบที่ตอบรับ (ปัจจุบัน) ยอมรับอย่างน้อยก็แตะกับมันในประโยคที่สอง
Izkata

2
@ อิซกาตะฉันไม่แน่ใจว่าคุณทราบหรือไม่ว่าเนื่องจากความเป็นสากลงบทั้งสองนี้จึงเทียบเท่ากัน
Konrad Rudolph

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

คำตอบ:


45

คำตอบที่ไร้เดียงสาและง่ายที่สุดสำหรับคำถามของคุณคือรหัสที่ให้ (และรหัสเครื่องที่คอมไพล์) นั้นเป็นจริงในรูปแบบสตริง syntax ของ {0,1} * นอกจากนี้เนื่องจากคุณกำลังพูดถึงเครื่องจักรทัวริงโปรแกรมที่รันเป็นรายการเชิงเส้นของการปฏิบัติงาน / คำแนะนำจึงไม่มีเหตุผลที่สิ่งเหล่านี้ไม่สามารถแสดงเป็นบิต / ไบต์


คุณเป็นตัวแทนของทัวริงในการแสดงรายการคำสั่งอย่างไร? ความหมายตามปกติคืออะไรเช่นนี้
svick

@svick ดังกล่าวในคำตอบของฉันด้านล่างคุณใช้ TM สากลซึ่งจะมีรายละเอียดของ TM เป็นอินพุท (การเข้ารหัสในแบบที่เหมาะสม)
dseuss

@svick ภาษาการเขียนโปรแกรมพร้อมคำแนะนำง่ายๆในการย้ายตัวชี้ไปยังเทป? ผมเชื่อว่าตัวอย่างของการดังกล่าวอาจจะเป็นความลับการเขียนโปรแกรมภาษาbrainfuck โค้ดตัวอย่าง
LukStorms

@ LukStorms ฉันไม่คิดว่าคุณสามารถเรียกได้ว่า "ทัวริงเครื่อง" อีกต่อไป
svick

52

คุณมีการแสดงฟังก์ชันนั้นเป็นข้อความอยู่แล้ว แปลงอักขระแต่ละตัวเป็นค่าหนึ่งไบต์โดยใช้การเข้ารหัส ASCII แล้วผลที่ได้คือลำดับของไบต์คือลำดับของบิตคือสตริงมากกว่าตัวอักษร * นั่นคือการเข้ารหัสตัวอย่างหนึ่ง{0,1}


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

@ PeterA.Schneider การใช้สื่อแอนะล็อกหรือตัวต่อตัวไม่จำเป็นต้องแปลว่าไม่มีการเข้ารหัสแบบฝังแยก การใช้ภาษาธรรมชาติอยู่ไม่ไกลจากการใช้การเข้ารหัสแบบแยกกันใช่ไหม?
Jean-Baptiste Yunès

32

ฉันไม่สามารถต้านทาน ...

⡂⡀⣀⢀⣄⡀⣰⡉⡀⠀⡀⡀⣀⠀⢀⣀⢀⣄⡀⡂⢀⣀⡀⢀⢀⡀⠀⡰⣀⠀⣀⠀⡂⡀⣀⢀⣄⡰⡀⢠⠂
⡇⡏⠀⡇⡇⠀⢸⠀⡇⢀⡇⡏⠀⡇⣏⠀⠀⡇⠀⡇⣏⠀⣹⢸⠁⢸⠀⡇⢈⠷⡁⠀⡇⡏⠀⡇⡇⠀⡇⢼⠀
⠁⠁⠀⠁⠈⠁⠈⠀⠈⠁⠁⠁⠀⠁⠈⠉⠀⠈⠁⠁⠈⠉⠁⠈⠀⠈⠀⠱⠉⠀⠉⠀⠁⠁⠀⠁⠈⠱⠁⠘⠄
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⢤⡀⡤⠀⣀⣀⣀⠀⢤⡀⡤⠀⠀⢰⠀⠀⢹⠠⠀
⠀⠀⠀⣠⠛⣄⠀⠒⠒⠒⠀⣠⠛⣄⠀⠉⢹⠉⠁⢸⢀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⠀
⠀⠀⠀⣄⢄⠤⢄⢴⠤⢠⠀⢠⢠⡠⢠⡠⢄⠀⢤⡀⡤⢺⡖⠐⣷⠂⠊⢉⡆
⠀⠀⠀⡇⠸⣍⣉⠸⣀⠸⣀⢼⢸⠀⢸⠀⢸⠀⣠⠛⣄⠀⠀⠀⠀⠀⣴⣋⡀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀

⢱⠀
⢸⠁
⠊

(จุดด้านบนแสดงถึงช่องว่างเป็นศูนย์)


5
น่าขบขัน (+1) แต่เป็นการเน้นย้ำถึงลักษณะการเข้ารหัสโดยพลการ
John Coleman

4
ขอให้สนุกกับการเขียนคอมไพเลอร์เพื่อสิ่งนี้ :)
Barmar

เตือนฉันถึงstackoverflow.com/questions/5508110/…
MSalters

1
@Barmar ฟังดูท้าทายสำหรับcodegolf.stackexchange.com
IMSoP

1
@RomaKarageorgievich นี่คือฟังก์ชั่นที่ใช้สร้างการแสดงผลกับตัวอักษรเบรลล์ นี่คือเสื้อคลุมเรียบง่ายที่ช่วยให้เรียกได้จากบรรทัดคำสั่ง
leftaroundabout

13

คอมพิวเตอร์ของคุณเก็บทุกอย่างเป็นลำดับ0และ1รวมถึงคำถามที่คุณพิมพ์เพื่อถามว่ามันทำอย่างไร ตัวอย่างเช่นตัวอักษรและสัญลักษณ์แต่ละตัวมี 8 บิต (ฉันกำลังพูดถึงสิ่งที่เคยเป็นในปัจจุบันมันเป็น 16 บิตและซับซ้อนมากขึ้น) ท่านสามารถเข้าดูได้ที่นี่ พวกมันไม่แสดงบิต แต่เป็นเลขฐานสิบหกและเลขฐานแปด คุณรู้วิธีการแปลงตัวเลขเป็นตัวแทนดิจิทัลหรือไม่?


6
มันมีขนาด 16 ไบต์เท่านั้นบน Windows และในห้องสมุดบางแห่งเช่น Qt หรือ ICU ซึ่งใช้ UTF-16 และไม่ใช่แม้แต่ตัวอักษรทั้งหมดที่ใช้หน่วยรหัสเดียวโดยทั่วไปแม้แต่ใน UTF-32 ดังนั้นจึงอาจยาวกว่านี้ ดังนั้นฉันคิดว่าการติดกับ ASCII ในการสนทนานี้ดีกว่าการนำ Unicode มาที่นี่จะทำให้เกิดความยุ่งยาก
Ruslan

8

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

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

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

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


9
วิทยานิพนธ์ของคริสตจักรทัวริงไม่ใช่ทฤษฎีและไม่เกี่ยวข้องกับคำจำกัดความใด ๆ สำหรับแนวคิดของอัลกอริทึมซึ่งเป็นแบบไม่เป็นทางการ ฉันยังไม่เห็นความจำเป็นที่จะต้องทำวิทยานิพนธ์เกี่ยวกับเรื่องนี้ในโบสถ์ เหตุผล "ลึก" ที่ทำให้วัตถุบางอย่างสามารถแสดงเป็นสตริง จำกัด และบางอย่างไม่สามารถเป็นได้ว่าบางชุดสามารถนับได้และบางชิ้นไม่
quicksort

ฉันเห็น "อัลกอริทึมสามารถเข้ารหัสเป็นสตริงถ้าเราระบุการฉีดระหว่างส่วนประกอบของข้อมูลจำเพาะของเครื่องและชุดของสตริงในภาษา" OP ทำสิ่งนี้ในตัวอย่างของเขาโดยนำเครื่องแทนด้วย " $ (x + 1) ^ 2 $ " และแสดงใหม่เป็นสตริงในภาษาของฟังก์ชัน C (หรือ BCPL, C ++, et al.) ที่มีรูปแบบที่ดี .
Eric Towers

1
@EricTowers ซึ่งต้องการวิทยานิพนธ์คริสตจักรทัวริง มิฉะนั้นจะไม่สามารถแน่ใจได้ว่ามีข้อมูลจำเพาะของเครื่องของอัลกอริทึมสำหรับอัลกอริธึมทั้งหมด
Cort Ammon - Reinstate Monica

1
ฉันยืนยันว่า "อัลกอริทึม [ที่] ต้องการจำนวนสัญลักษณ์ที่ไม่สิ้นสุดนับไม่ถ้วนเพื่อแสดง" ไม่สามารถแสดงออกได้ การแสดงออกดังกล่าวจะต้องใช้สัญลักษณ์มากมายนับไม่ถ้วนมิฉะนั้นจะสามารถแสดงในภาษาย่อยที่เล็กกว่า ยิ่งกว่านั้นการแสดงออกใด ๆ ที่ไม่ใช่ตัวอักษรไร้สาระนั้นมีจำนวนเอนโทรปีในสัญลักษณ์เกือบทั้งหมดดังนั้นท้าทายการแสดงออก (กล่าวคือไม่สามารถสื่อสารกับผู้รับได้) Logistic finitary ทั้งหมดปฏิเสธที่จะทำงานบนสายอักขระที่ไม่มีที่สิ้นสุดเช่นนี้และฉันไม่ได้ตระหนักถึงตรรกะของอนันต์ที่จะอนุญาตให้ทำงานกับสตริงที่ไม่สามารถนับได้
Eric Towers เมื่อ

1
ความคิดเห็นไม่ได้มีไว้สำหรับการอภิปรายเพิ่มเติม การสนทนานี้ได้รับการย้ายไปแชท
DW

4

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


1
@Discretelizard ฉันไม่ได้ติดตามคุณ อัลกอริธึมใด ๆ สามารถแสดงออกได้อย่างชัดเจนว่าเป็นอินพุตของ universal TM ภาษาสามารถคำนวณได้หรือไม่สามารถคำนวณได้ ฉันไม่คุ้นเคยกับความคิดมาตรฐานของการคำนวณสำหรับอัลกอริธึมดังนั้นฉันจึงไม่แน่ใจว่าคุณกำลังทำอะไรอยู่ การมีอัลกอริทึมที่ไม่สามารถคำนวณได้หมายความว่าอะไร บางทีคุณคิดว่าอัลกอริทึมที่ไม่จำเป็นต้องยุติ แต่ TM สากลยังคงสามารถเรียกใช้อัลกอริทึมดังกล่าวได้
DW

@Discretelizard ฉันไม่ได้ติดตามคุณเช่นกัน การเรียกใช้งานได้บนเครื่องทัวริงเป็นนิยามของอัลกอริทึม ฉันคิดว่าคุณสามารถพูดถึง "อัลกอริทึม" สำหรับพูดทัวริงเครื่องกับ oracle สำหรับปัญหาการหยุดชะงัก แต่ปกติ "อัลกอริทึม" หมายถึง "สิ่งที่คุณสามารถทำได้บนเครื่องทัวริง"
David Richerby

@ DavidRicherby True คำจำกัดความที่แท้จริงของอัลกอริทึมเข้มงวดมากขึ้นฉันคิดว่า แต่คำถามนี้เกี่ยวกับสาเหตุที่เรากำหนดข้อ จำกัด ที่ผ่อนปรนมากขึ้นและบอกว่ามีข้อ จำกัด ที่แข็งแกร่งยิ่งกว่านั้นก็ไม่ได้ให้คำแนะนำมากนักในความคิดของฉัน
จิ้งจกไม่ต่อเนื่อง

4

ทีนี้เรามาพูดถึงอัลกอริธึมที่ไม่สามารถแทนได้ว่าเป็นบิต - สตริงที่แน่นอนสำหรับการเข้ารหัสทุกชนิด

ขอผมพิมพ์อัลกอริธึมแบบนี้ให้คุณ ... อ้า แต่ถ้าฉันทำอย่างนั้นฉันสามารถแทนอัลกอริธึมนั้นด้วยการเข้ารหัสข้อความที่พิมพ์

วิธีการเกี่ยวกับอัลกอริทึมของฉันโดยใช้ 'หมายถึงแบบอะนาล็อก' พูดโดยตำแหน่งของเหรียญไม่กี่บนโต๊ะของฉัน แม้ว่าตำแหน่งของเหรียญเหล่านั้นสามารถถูกจำลองโดยตัวเลขจริงบางอย่าง (ซึ่งอาจมีในบางตำแหน่ง)การเข้ารหัสเป็นไปไม่ได้ที่จะขีดแทน) นี้รายละเอียดทั้งหมดอีกครั้งสามารถได้รับการพิจารณาเป็นตัวแทนของอัลกอริทึมของฉันและสามารถเข้ารหัสเพื่อบิตสตริงอีกครั้ง!

ฉันหวังว่าตัวอย่างเหล่านี้จะทำให้ชัดเจนว่าหากอัลกอริทึมบางอย่างไม่สามารถถูกแทนด้วย bit-bit จำกัด เราไม่มีวิธีการอธิบายอัลกอริทึมนี้เลย!

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


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


rAr

1
ArR


rอย่างรวดเร็ว
กราฟิลส์

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

2

อีกวิธีในการดูสิ่งนี้คือผ่านทฤษฎีข้อมูล การเข้ารหัสข้อมูล / คำถามที่เป็นประโยชน์ / คำถามทั้งหมดสามารถสร้างเป็น 'ลำดับ' ไบนารี

คำถามส่วนใหญ่จะเกิดขึ้นในเขตข้อมูล "วิธีการถามจำนวนคำถามเฉลี่ยน้อยที่สุดเพื่อสื่อสารข้อมูลที่มีความหมายคืออะไร" ในทางปฏิบัติสิ่งนี้เหมือนกับ "อะไรคือวิธีการที่ดีที่สุดในการถามคำถามที่ใช่ / ไม่ใช่อย่างน้อยเพื่อให้เข้าใจว่ามีการสื่อสารหรือพูดอะไร?"

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