วิทยาศาสตร์คอมพิวเตอร์

ถาม - ตอบสำหรับนักเรียนนักวิจัยและผู้ปฏิบัติงานด้านวิทยาการคอมพิวเตอร์

5
แคลคูลัสกับการสะท้อน
ฉันกำลังมองหาแคลคูลัสง่ายๆที่สนับสนุนการให้เหตุผลเกี่ยวกับการสะท้อนกลับคือการวิปัสสนาและการจัดการโปรแกรมที่กำลังทำงานอยู่ คือมี untyped ขยายแคลคูลัสที่ช่วยให้หนึ่งในการแปลงλ -terms ลงในแบบฟอร์มที่สามารถจัดการ syntactically แล้วประเมินผลภายหลังหรือไม่?λλ\lambdaλλ\lambda ฉันจินตนาการว่าแคลคูลัสมีสองคำหลักเพิ่มเติม : ใช้เวลาวีและผลิตตัวแทนของโวลต์ทำให้ถูกต้องในการจัดการประโยคreflect vreflect v\mathtt{reflect}\ vvvvvvv : ใช้การแทนประโยคของคำศัพท์และประเมินมันeval veval v\mathtt{eval}\ v เพื่อสนับสนุนการสะท้อนจำเป็นต้องมีการแสดงคำศัพท์ทางวากยสัมพันธ์ มันจะมีลักษณะเช่น: จะแสดงเป็นระยะ ( L M R ( E ) )ที่ R ( E )เป็นรุ่นที่สะท้อนให้เห็นของอี ,λx.eλx.e\lambda x.e(LAM R(e))(LAM R(e))(\mathsf{LAM}\ R(e))R(e)R(e)R(e)eee จะแสดงเป็นคำ ( A P P R ( e ) R ( …

5
P-ครบถ้วนและการคำนวณแบบขนาน
ผมเพิ่งอ่านเกี่ยวกับขั้นตอนวิธีการในการตรวจสอบและอ่าน bisimilarity ว่าปัญหาคือP-สมบูรณ์ นอกจากนี้ผลที่ตามมาก็คือปัญหานี้หรือปัญหา P-Complete ใด ๆ ไม่น่าจะมีอัลกอริทึมแบบขนานที่มีประสิทธิภาพ สัญชาตญาณที่อยู่เบื้องหลังคำพูดสุดท้ายนี้คืออะไร?

1
มีขั้นตอนวิธีการแยก CFG nongeneral ที่รับรู้ EPAL หรือไม่
EPAL ภาษาของ palindromes คู่ถูกกำหนดเป็นภาษาที่สร้างขึ้นโดยไวยากรณ์บริบทที่ไม่มีความชัดเจนต่อไปนี้: S→aaS→aaS \rightarrow a a S→bbS→bbS \rightarrow b b S→aSaS→aSaS \rightarrow a S a S→bSbS→bSbS \rightarrow b S b EPAL เป็น 'bane' ของอัลกอริทึมการแยกวิเคราะห์หลายอย่าง: ฉันยังไม่เคยพบอัลกอริทึมการแยกวิเคราะห์สำหรับ CFG ที่ไม่คลุมเครือซึ่งสามารถแยกไวยากรณ์ใด ๆ ที่อธิบายภาษา มักใช้เพื่อแสดงว่ามี CFG ที่ไม่คลุมเครือซึ่งไม่สามารถแยกวิเคราะห์โดยตัวแยกวิเคราะห์เฉพาะได้ นี่เป็นแรงบันดาลใจให้กับคำถามของฉัน: มีอัลกอริธึมการแยกวิเคราะห์ที่ยอมรับเฉพาะ CFG ที่ชัดเจนซึ่งใช้งานได้กับ EPAL หรือไม่ แน่นอนหนึ่งสามารถออกแบบ ad-hoc parser สอง pass- สำหรับไวยากรณ์ที่แยกวิเคราะห์ภาษาในเวลาเชิงเส้น ฉันสนใจวิธีการวิเคราะห์คำที่ไม่ได้ออกแบบมาเป็นพิเศษโดยคำนึงถึง EPAL

5
วิธีการเข้าหา Vertical Sticks ที่ท้าทาย
คำถามนี้ถูกย้ายจาก Theoretical Computer Science Exchange Exchange เนื่องจากสามารถตอบได้ใน Computer Science Stack Exchange อพยพ 7 ปีที่ผ่านมา ปัญหานี้มาจากinterviewstreet.com เราจะได้รับอาร์เรย์ของจำนวนเต็มY={y1,...,yn}Y={y1,...,yn}Y=\{y_1,...,y_n\}ที่แสดงถึงnnnกลุ่มสายดังกล่าวที่จุดปลายของส่วนiiiเป็น(i,0)(i,0)(i, 0)และ(i,yi)(i,yi)(i, y_i) ) ลองจินตนาการว่าจากด้านบนของแต่ละส่วนรังสีแนวนอนจะถูกยิงไปทางซ้ายและรังสีนี้จะหยุดเมื่อสัมผัสกับส่วนอื่นหรือกระทบกับแกน y เราสร้างอาร์เรย์ของจำนวนเต็ม n เป็นv1,...,vnv1,...,vnv_1, ..., v_nที่viviv_iเท่ากับความยาวของการยิงเรย์จากด้านบนของส่วนที่ฉันiiiเรากำหนดV(y1,...,yn)=v1+...+vnV(y1,...,yn)=v1+...+vnV(y_1, ..., y_n) = v_1 + ... + v_n n ตัวอย่างเช่นถ้าเรามีY=[3,2,5,3,3,4,1,2]Y=[3,2,5,3,3,4,1,2]Y=[3,2,5,3,3,4,1,2]แล้ว[v1,...,v8]=[1,1,3,1,1,3,1,2][v1,...,v8]=[1,1,3,1,1,3,1,2][v_1, ..., v_8] = [1,1,3,1,1,3,1,2] , ดังที่แสดงในภาพด้านล่าง: สำหรับการเปลี่ยนแปลงแต่ละpppของ[1,...,n][1,...,n][1,...,n]เราสามารถคำนวณV(yp1,...,ypn)V(yp1,...,ypn)V(y_{p_1}, ..., y_{p_n}) ) ถ้าเราเลือกการเปลี่ยนแปลงสุ่มสม่ำเสมอพีppของ[ 1 , . …

4
วิธีการที่จะหลอกการตรวจสอบพล็อตการเรียนรู้?
กว่าที่นี่เดฟคล๊าร์คเสนอว่าในการสั่งซื้อเพื่อเปรียบเทียบการเจริญเติบโต asymptotic พล็อตที่คุณควรฟังก์ชั่นที่อยู่ในมือ ในฐานะที่เป็นนักวิทยาศาสตร์คอมพิวเตอร์ที่มีความโน้มเอียงทางทฤษฎีฉันเรียก (v) vodoo นี้ว่าพล็อตไม่สามารถพิสูจน์ได้ ในความคิดที่สองฉันต้องยอมรับว่านี่เป็นวิธีที่มีประโยชน์มากซึ่งบางครั้งก็ใช้น้อยเกินไป พล็อตเป็นวิธีที่มีประสิทธิภาพในการรับแนวคิดแรกและบางครั้งก็เป็นสิ่งที่คุณต้องการ เมื่อสอน TCS มักจะมีนักเรียนที่ถามว่า: "ฉันต้องมีหลักฐานอะไรบ้างถ้าฉันสามารถทำ X ซึ่งใช้งานได้ตลอด?" มันขึ้นอยู่กับครูของเขาเพื่อชี้ให้เห็นและแสดงให้เห็นถึงการเข้าใจผิด มีตัวอย่างที่ยอดเยี่ยมของรูปแบบที่ปรากฏชัดเจนซึ่งในที่สุดก็ล้มเหลวที่ math.SE แต่สิ่งเหล่านี้เป็นสถานการณ์ทางคณิตศาสตร์ที่ค่อนข้างยุติธรรม ดังนั้นคุณจะหลอกการวิเคราะห์การตรวจสอบพล็อตได้อย่างไร มีบางกรณีที่ความแตกต่างยากที่จะบอก appart เช่น [ แหล่งที่มา ] คาดเดาจากนั้นตรวจสอบแหล่งที่มาสำหรับฟังก์ชั่นจริง แต่สิ่งเหล่านี้ไม่น่าตื่นเต้นอย่างที่ฉันคาดหวังโดยเฉพาะอย่างยิ่งเพราะความสัมพันธ์ที่แท้จริงนั้นง่ายต่อการสังเกตจากฟังก์ชั่นเพียงอย่างเดียวแม้แต่สำหรับมือใหม่ มีตัวอย่างของการเติบโตแบบเชิงสัมพัทธ์ (สัมพัทธ์) ที่ความจริงไม่ชัดเจนจากฟังก์ชั่นการกำหนดและการตรวจสอบพล็อตสำหรับขนาดใหญ่พอสมควรnnnให้ความคิดที่ผิดอย่างสมบูรณ์หรือไม่? ฟังก์ชั่นทางคณิตศาสตร์และชุดข้อมูลจริง (เช่นรันไทม์ของอัลกอริทึมเฉพาะ) ยินดีต้อนรับทั้งคู่; โปรดหลีกเลี่ยงการใช้ฟังก์ชั่นที่กำหนดเป็นชิ้น ๆ

6
อัลกอริทึมในการแก้ปัญหา“ การหยุดชะงัก” ของทัวริง
คำถามนี้ถูกย้ายจาก Theoretical Computer Science Exchange Exchange เนื่องจากสามารถตอบได้ใน Computer Science Stack Exchange อพยพ 7 ปีที่ผ่านมา "Alan Turing พิสูจน์แล้วในปี 1936 ว่าอัลกอริทึมทั่วไปเพื่อแก้ปัญหาการหยุดชะงักสำหรับคู่อินพุตโปรแกรมที่เป็นไปได้ทั้งหมดไม่มีอยู่" ฉันสามารถหาอัลกอริทึมทั่วไปเพื่อแก้ปัญหาการหยุดพักสำหรับบางคู่ที่เป็นไปได้ของโปรแกรมหรือไม่ ฉันสามารถหาภาษาโปรแกรม (หรือภาษา) ที่ฉันใช้กับโปรแกรมทุกประเภทในภาษานี้ได้หรือไม่มันสามารถตัดสินใจได้ว่าโปรแกรมจะหยุดทำงานหรือรันตลอดไปหรือไม่?

1
มีอัลกอริทึมที่มีประสิทธิภาพสำหรับปัญหาการครอบรอบจุดสุดยอดนี้หรือไม่?
คำถามนี้ถูกย้ายจาก Mathematics Stack Exchange เพราะสามารถตอบได้ใน Computer Science Stack Exchange อพยพ 3 ปีที่แล้ว ฉันพยายามค้นหาอัลกอริธึมเพื่อหาจุดสุดยอดวงรอบสูงสุดของกราฟกำกับ - นั่นคือชุดของวงรอบที่แยกจากกันซึ่งมีจุดยอดทั้งหมดในกับรอบที่มากที่สุดเท่าที่จะเป็นไปได้ (เราไม่พิจารณา จุดยอดบุคคลรอบที่นี่) ฉันรู้ว่าปัญหาในการค้นหาจุดสุดยอดวงรอบขั้นต่ำเช่นเดียวกับการค้นหาจุดสุดยอดวงรอบที่มีรอบคือ NP-complete แต่กรณีสูงสุดคืออะไร?G kGGGGGGkkk ในขณะที่ฉันจะหาคำตอบสำหรับสิ่งที่น่าสนใจนี้โดยทั่วไปกราฟที่ฉันต้องการใช้สำหรับสิ่งนี้ถูก จำกัด โดยการก่อสร้างของพวกเขาดังนั้นแม้ว่าปัญหานั้นจะเกิดจากปัญหา NP-complete อาจจะมีคำตอบพหุนามสำหรับอินสแตนซ์เหล่านี้ เรามีรายการจำนวนเต็ม , องค์ประกอบและเราจะใช้ , องค์ประกอบเพื่ออ้างถึงหลังจากเรียงลำดับแล้ว ตัวอย่างเช่น:ลิตรฉัน S s ฉัน LLLLล.ผมlil_iSSSsผมsis_iLLL L = ( 1 , 3 , 2 , 5 , 0 , 7 …

1
นาฬิการะบบและนาฬิกา CPU คืออะไร และหน้าที่ของพวกเขาคืออะไร?
ในขณะที่อ่านหนังสือฉันเจอย่อหน้าที่ระบุด้านล่าง: เพื่อที่จะซิงโครไนซ์การทำงานทั้งหมดของคอมพิวเตอร์จะใช้นาฬิการะบบซึ่งเป็นควอตซ์คริสตัลขนาดเล็กที่อยู่บนมาเธอร์บอร์ด นาฬิการะบบส่งสัญญาณเป็นประจำไปยังส่วนประกอบคอมพิวเตอร์อื่น ๆ ทั้งหมด และอีกย่อหน้า: คอมพิวเตอร์ส่วนบุคคลจำนวนมากในปัจจุบันมีนาฬิการะบบที่ทำงานที่ 200 MHz และอุปกรณ์ทั้งหมด (เช่น CPU) ที่ซิงโครไนซ์กับนาฬิการะบบเหล่านี้จะทำงานที่ความเร็วสัญญาณนาฬิการะบบหรือที่ความเร็วสัญญาณนาฬิกาหลายเท่าหรือเศษส่วน ใครก็ได้กรุณาบอก: ฟังก์ชั่นของนาฬิการะบบคืออะไร? และ "การซิงโครไนซ์" ในย่อหน้าแรกมีความหมายอย่างไร มี "ความแตกต่างระหว่างนาฬิการะบบ" และ "นาฬิกา CPU" หรือไม่? ถ้าใช่แล้วฟังก์ชั่นของนาฬิกา CPU คืออะไร?

1
ปัญหา k-clique NP-complete หรือไม่
คำถามนี้ถูกย้ายจาก Theoretical Computer Science Exchange Exchange เนื่องจากสามารถตอบได้ใน Computer Science Stack Exchange อพยพ 7 ปีที่ผ่านมา ในบทความ Wikipedia เกี่ยวกับปัญหา Clique ในทฤษฎีกราฟนั้นระบุไว้ในตอนต้นว่าปัญหาในการค้นหากลุ่มขนาด K ในกราฟ G คือ NP-complete: กลุ่มวิชายังได้รับการศึกษาในสาขาวิทยาการคอมพิวเตอร์: การค้นหาว่ามีกลุ่มขนาดที่กำหนดในกราฟ (ปัญหากลุ่ม) คือ NP-complete แต่ถึงแม้จะมีความแข็งนี้ส่งผลให้มีการศึกษาอัลกอริธึมหลายอย่าง แต่ในบทความ Wikipedia อื่น ๆ เกี่ยวกับปัญหา Clique ใน CS มันบอกว่ามันกำลังแก้ปัญหาสำหรับขนาดคงที่ k เป็นปัญหาใน P มันสามารถถูกเดรัจฉานบังคับในเวลาพหุนาม อัลกอริทึมแรงเดรัจฉานเพื่อทดสอบว่ากราฟ G มีกลุ่ม k-vertex หรือไม่และค้นหากลุ่มใด ๆ ที่มีอยู่นั้นคือการตรวจสอบแต่ละกราฟย่อยอย่างน้อย …

2
นิพจน์ปกติที่เข้ากันได้กับ Perl รองรับภาษาใดบ้าง
ในฐานะที่เป็นชื่อเรื่องว่าผมใช้เวลาสองสามชั่วโมงสุดสัปดาห์สุดท้ายพยายามที่จะตัดขึ้นใจของฉันเกี่ยวกับระดับของภาษาการจับคู่โดยการแสดงออกปกติ Perl ได้ที่ไม่รวมผู้ประกอบการจับคู่ใด ๆ ที่จะช่วยให้การรันโค้ดภายในรูปแบบ หากคุณไม่ได้รู้ว่าสิ่งที่เป็น PCREs โปรดอ่านนี้และนี้ ปัญหาคือทรัพยากรที่มีอยู่บนอินเทอร์เน็ตหยุดอยู่ที่ภาษาที่ไม่มีบริบทและ PCREs สามารถจับคู่ได้มากกว่านั้น (ดูด้านล่าง) แต่ฉันไม่รู้ว่าจะหาทฤษฏีหรือเอกสารเพิ่มเติมเกี่ยวกับเรื่องแบบนี้ได้ที่ไหน โดยเฉพาะอย่างยิ่ง: PCRE เป็นชุดภาษาปกติ (เนื่องจากไวยากรณ์ PCRE มีตัวดำเนินการภาษาปกติทั้งหมด) CFG ใด ๆ สามารถใส่ในรูปแบบปกติของ Greibach ซึ่งจะทำการลบการเรียกซ้ำไปทางซ้าย ฉันคิดว่าสิ่งนี้สามารถใช้โดย(?(DEFINE)...)กลุ่มเพื่อ "แปล" ไวยากรณ์เป็นรูทีนย่อยที่ตรงกันหลีกเลี่ยงที่จะสำลักในการเรียกซ้ำซ้ายโดยการแปล: non-terminal ที่หัวของการผลิตแต่ละครั้งจะกลายเป็นรูทีนย่อย (?<HEAD>...) เนื้อหาของการผลิตแต่ละครั้งจะถูกใส่ไว้ในรูทีนย่อย เทอร์มินัลถูกทิ้งไว้ตามที่เป็นอยู่มินัลจะกลายเป็นการร้องขอขั้นตอน (เช่น(?&NONTERMINAL)); โปรดักชั่นทั้งหมดที่มี nonterminal เช่นเดียวกับหัวเป็น ORed ร่วมกันโดยวิธีการของ|ผู้ประกอบการ (รวมทั้งการจัดกลุ่มเพิ่มเติมด้วย(?:...)ถ้าจำเป็น) รูปแบบนั้นจะกลายเป็น(?(DEFINE)...)กลุ่มที่มีการผลิต "แปล" ทั้งหมดและการร้องขอสำหรับกระบวนการของสัญลักษณ์เริ่มต้นเพื่อให้ตรงกับสตริงทั้งหมดเช่น^(?(DEFINE)...)(?&START)$ สิ่งนี้ควรจัดการกับ CFG ใด ๆ ดังนั้น PCREs ควรจะสามารถจับคู่ …

2
การพิสูจน์ความสมบูรณ์แบบ NP ของปัญหาทรีทอด
ฉันกำลังมองหาคำแนะนำในคำถามที่ผู้สอนของฉันถาม ดังนั้นฉันเพิ่งรู้ว่าปัญหาการตัดสินใจนี้คือ :N P - c o m p l e t eNP-complete\sf{NP\text{-}complete} ในกราฟมีต้นไม้ทอดในที่มีชุดที่แน่นอนของเป็นใบไม้ ฉันคิดว่าเราสามารถพิสูจน์ได้ว่ามันเป็นโดยการลดเส้นทางมิลโตเนียนกับปัญหาการตัดสินใจนี้G S = { x 1 , x 2 , … , x n } N P - c o m p l e t eGGGGGGS= { x1, x2, … , xn}S={x1,x2,…,xn}S=\{x_1, x_2,\ldots, x_n\}N P - …

3
ทำไมเป็น Radix เรียง
ในการเรียงลำดับ radix เราแรกเรียงตามเลขนัยสำคัญน้อยที่สุดจากนั้นเราเรียงตามหลักนัยสำคัญที่น้อยที่สุดรองและอื่น ๆ และจบลงด้วยรายการที่เรียงลำดับ ตอนนี้ถ้าเรามีรายการหมายเลขเราต้องการบิตเพื่อแยกความแตกต่างระหว่างตัวเลขเหล่านั้น ดังนั้นจำนวนกี่เรียงผ่านที่เราทำจะเป็นn แต่ละรอบใช้เวลาและด้วยเหตุนี้เวลาทำงานของการเรียง Radix คือnnnlognlog⁡n\log nlognlog⁡n\log nO(n)O(n)O(n)O(nlogn)O(nlog⁡n)O(n \log n) แต่เป็นที่ทราบกันดีว่าเป็นอัลกอริธึมเชิงเส้นเวลา ทำไม?

1
บทความวิทยาศาสตร์คอมพิวเตอร์เล่มแรกที่ใช้ความซับซ้อนของเวลาแบบอะซิมโทติคคืออะไร
เมื่อ O ใหญ่ถูกใช้ครั้งแรกในวิทยาการคอมพิวเตอร์และเมื่อมันกลายเป็นมาตรฐาน? หน้าวิกิพีเดียเกี่ยวกับเรื่องนี้อ้างถึง Knuth, Big Omicron และ Big Omega และ Big Theta , SIGACT เมษายน - มิถุนายน 1976 แต่จุดเริ่มต้นของบทความนั้นอ่าน ส่วนมากของเรามีอากาศที่คุ้นเคยกับความคิดของการใช้สัญกรณ์ ยืนฟังก์ชั่นใด ๆ ที่มีความสำคัญเป็นบนขอบเขตโดยครั้งคงF ( n )สำหรับทุกขนาดใหญ่nต( f( n ) )O(ฉ(n))O(f(n))ฉ( n )ฉ(n)f(n)nnn คำพูดนี้แสดงให้เห็นว่าความคิดและสัญกรณ์นั้นมีการใช้งานทั่วไปอยู่แล้ว หน้า Wikipedia ยังอ้างถึงเอกสารทางคณิตศาสตร์จากปลายปี 1800 และต้นศตวรรษที่ 1900 แต่นั่นก็ไม่ได้ตอบคำถาม โดยเฉพาะอย่างยิ่งฉันได้ยินนักวิจัยที่อยู่แถวหลัง (ในยุค 60 และ 70 ไม่ใช่ช่วงปลายปี 1800) บอกว่าเมื่อมีการใช้การวิเคราะห์เชิงเส้นครั้งแรกบางคนผลักกลับบอกว่าเวลานาฬิกาแขวนเป็นตัวชี้วัดที่ดีกว่า อย่างไรก็ตามไม่มีใครที่ฉันได้พูดคุยเพื่ออ้างถึงเอกสารเฉพาะที่ได้รับการผลักดันเช่นนี้และฉันต้องการหาหลักฐานที่สามารถยืนยันหรือปฏิเสธเรื่องราวเหล่านี้

3
ต้นไม้ที่ขยายครอบคลุมขั้นต่ำสำหรับกราฟจะไม่ซ้ำกันเมื่อใด
กำหนด weighted, กราฟไม่มีทิศทาง G: ซึ่งเงื่อนไขต้องถือเพื่อให้ความจริงว่ามีหลายขั้นต่ำต้นไม้ทอดของ G? ฉันรู้ว่า MST นั้นไม่เหมือนใครเมื่อตุ้มน้ำหนักทั้งหมดนั้นแตกต่างกัน แต่คุณไม่สามารถย้อนกลับข้อความนี้ได้ หากมี muliple edge ที่มีน้ำหนักเท่ากันในกราฟอาจมี MST หลายตัว แต่อาจมีเพียงอันเดียว: ในตัวอย่างนี้กราฟทางด้านซ้ายมี MST ที่ไม่ซ้ำกัน แต่อันที่ถูกต้องไม่มี สิ่งที่ใกล้เคียงที่สุดที่ฉันจะได้รับในการค้นหาเงื่อนไขสำหรับความไม่เป็นเอกลักษณ์ของ MST คือ: พิจารณารอบที่ไม่มีลำตัวทั้งหมด (รอบที่ไม่มีรอบอื่น ๆ ) ในกราฟ G หากในรอบใด ๆ เหล่านี้ขอบที่มีน้ำหนักสูงสุดมีอยู่หลายครั้งกราฟจะไม่มีต้นไม้ทอดขั้นต่ำที่ไม่ซ้ำกัน ความคิดของฉันคือสำหรับรอบเช่นนี้ ด้วย n จุดยอดคุณสามารถแยกขอบด้านใดด้านหนึ่งออกและยังคงมีจุดเชื่อมต่อทั้งหมด ดังนั้นคุณมีทางเลือกมากมายในการลบขอบด้วยน้ำหนักสูงสุดเพื่อรับ MST ดังนั้น MST จึงไม่ซ้ำกัน อย่างไรก็ตามฉันมาพร้อมกับตัวอย่างนี้: คุณจะเห็นว่ากราฟนี้มีวัฏจักรที่เหมาะกับสภาพของฉัน: (E, F, G, H)แต่เท่าที่ฉันเห็นต้นไม้สแปนนิ่งขั้นต่ำนั้นไม่เหมือนใคร: ดังนั้นดูเหมือนว่าสภาพของฉันไม่ถูกต้อง (หรืออาจไม่ถูกต้องสมบูรณ์) …

1
ลูป do-while เพียงพอสำหรับทัวริงครบถ้วนหรือไม่
ฉันรู้ว่าในภาษาการเขียนโปรแกรมที่จำเป็นห่วงในขณะที่ทำก็เพียงพอในการสร้างโฟลว์การควบคุมเพื่อสร้างภาษาทัวริงที่สมบูรณ์ (เท่าที่โฟลว์การควบคุมดำเนินไป . ส่วนสำคัญของคำถามของฉันคือ: วนรอบในขณะที่ทำมีอำนาจการคำนวณเช่นเดียวกับวนรอบขณะทำ? กล่าวอีกนัยหนึ่งคือภาษาทัวริงจะสมบูรณ์หากไม่สามารถข้ามคำแนะนำทั้งหมดได้ ฉันรู้ว่าความหมายบางอย่างของที่นี่อาจจะคลุมเครือเล็กน้อยดังนั้นขอให้ฉันวลีคำถามจริงด้วยตัวอย่างเฉพาะ: Brainfuck (BF) เป็น Turing tarpit ที่มีการควบคุมการไหลเพียงลูปแบบ while-do ซึ่งแสดงว่า[...](มีสเป็คภาษาสมบูรณ์ที่ด้านล่างของคำถามในกรณีที่คุณไม่คุ้นเคยกับ Brainfuck) ลองกำหนด * ภาษา BF ใหม่ที่,.+-<>มีความหมายเช่นเดียวกับใน BF แต่แทนที่จะ[]เรามี{}ซึ่งหมายถึงการทำในขณะที่ห่วง นั่นคือความแตกต่างเพียงอย่างเดียวของ BF คือว่าทุกลูปจะถูกดำเนินการอย่างน้อยหนึ่งครั้งก่อนที่จะข้ามการทำซ้ำต่อไป BF * ทัวริงเสร็จสมบูรณ์หรือไม่ ถ้าเป็นเช่นนั้นฉันจะสนใจว่าฉันจะแปล BF เป็น BF * ได้อย่างไร ถ้าไม่ใช่ฉันจะพิสูจน์ได้อย่างไร ข้อสังเกตของฉัน: ไม่ใช่ทุกโปรแกรม BF ที่สามารถแปลเป็น BF * ตัวอย่างเช่นเป็นไปไม่ได้ที่จะเขียนโปรแกรมใน BF * ซึ่งอาจจะหรืออาจไม่อ่านหรือพิมพ์ค่า - หากโปรแกรมอาจพิมพ์ค่าหนึ่งค่าหรือมากกว่านั้นมันจะพิมพ์อย่างน้อยหนึ่งค่าเสมอ อย่างไรก็ตามอาจมีชุดย่อยของทัวริงที่สมบูรณ์ซึ่งสามารถแปลเป็น BF …

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