มีวงเล็บกี่คู่ที่เพียงพอที่จะทำให้ Brainfuck ทัวริงสมบูรณ์


12

Brainfuck เป็นภาษาโปรแกรมทัวริงที่สมบูรณ์ซึ่งใช้เพียง 8 สัญลักษณ์ (6 ถ้าคุณไม่สนใจ I / O)

สองสิ่งที่น่าสังเกตมากที่สุดที่ผลักดันให้ทัวริงสมบูรณ์คือ[และ]โดยพื้นฐานแล้วป้ายของ Brainfuck และข้ามไป

โดยปกติแล้วโปรแกรมใน Brainfuck ใช้หลายชุด[]แต่ฉันก็สงสัยว่าจะต้องใช้วงเล็บจำนวนเท่าใดในการทำให้ Brainfuck ทัวริงสมบูรณ์

อะไรคือจำนวนขั้นต่ำของวงเล็บที่คุณต้องจำลองเครื่องทัวริงของ n-state (ให้จำนวนวงเล็บสำหรับ 1, 2 และสามเครื่องทัวริงรัฐ)

หมายเหตุ:

เรากำลังสมมติว่าไม่มีที่สิ้นสุดเทปและไม่มีข้อ จำกัด ในการคำนวณ

เป็นเครื่องจักรทัวริง 2 สัญลักษณ์


1
"ต้องใช้วงเล็บกี่คู่นี้" คุณช่วยอธิบาย "ต้องใช้" ได้ไหม ตัวอย่างเช่นถ้าฉันถาม BrainF นับถึง 21000000 ?
John L.

@ Apass.Jack จำนวนขั้นต่ำของวงเล็บ
MilkyWay90

1
โอ้คุณหมายถึงจำนวนขั้นต่ำของวงเล็บเพื่อจำลองเครื่อง state ทัวริงเป็นฟังก์ชันของnหรือไม่? อย่างไรก็ตามคุณสามารถให้ตัวอย่างที่ไม่น่าสนใจที่ง่ายที่สุดได้หรือไม่? nn
John L.

1
@ Apass.Jack โอเคฉันมากับโปรแกรมรถบักกี้ซึ่งทำงานกับเครื่องจักรทัวริงแบบรัฐ
MilkyWay90

@ Apass.Jack ไม่เป็นไรมันยากเกินไปสำหรับข้าแล้ว ทำล่าม BF โดยพื้นฐานสำหรับภาษาการเขียนโปรแกรมของฉัน, ทัวริงเครื่อง แต่ทางที่แย่ลงเมื่อใช้สัญลักษณ์ที่เป็นไปได้เพียงสองตัว (0 และ 1) และลบ I / O และหยุด
MilkyWay90

คำตอบ:


9

นี่เป็นการพัฒนาต่อไปของคำตอบของ@ ais523ลดไปเป็นวงเล็บสองชุดเท่านั้นและยังใช้การจัดวางเซลล์ที่กะทัดรัดมากขึ้นตามทฤษฎีไม้บรรทัด Golomb ais523 ได้สร้างคอมไพเลอร์สำหรับสิ่งปลูกสร้างนี้รวมถึงเซสชัน TIO นี้แสดงตัวอย่างโปรแกรม BF ที่เกิดขึ้นพร้อมกับการติดตามการดีบักของ TWM เคาน์เตอร์

เช่นเดียวกับต้นฉบับสิ่งนี้เริ่มต้นด้วยโปรแกรมในThe Waterfall Modelโดยมีข้อ จำกัด บางประการที่ไม่สูญเสียความเป็นนายพล:

  1. ตัวนับทั้งหมดมีค่าการรีเซ็ตตนเองเหมือนกันR ; นั่นคือ TWM แผนที่ไกfมีคุณสมบัติที่f(x,x)=Rสำหรับทุกxx
  2. มีเพียงครั้งเดียวที่เคาน์เตอร์ลังเลเป็นชั่วโมงh
  3. จำนวนcของเคาน์เตอร์คือ(p1)/2สำหรับบางจำนวนเฉพาะพีp

ไม้บรรทัด Golomb

เรารวมโครงสร้างErdős – Turánเข้ากับฟังก์ชันการเปลี่ยนแปลงของอาร์เรย์ Welch – Costasเพื่อให้ไม้บรรทัด Golomb มีคุณสมบัติที่จำเป็น

(ฉันแน่ใจว่าการรวมกันนี้ไม่สามารถเป็นความคิดใหม่ได้ แต่เราเพิ่งพบและประกอบเข้าด้วยกันสองชิ้นนี้จาก Wikipedia)

ให้rเป็นรากดั้งเดิมของp=2c+1 1 กำหนดฟังก์ชั่น

g(k)=4ck((rk1)mod(2c+1)),k=0,,2c1.

  1. gเป็นไม้บรรทัด Golombของการสั่งซื้อ2cนั่นคือความแตกต่างไม่ซ้ำกันสำหรับคู่ของตัวเลขที่แตกต่างกันทุก\}2cg(i)g(j)i,j{0,,2c1}
  2. g(k)mod(2c)รับทุกค่าครั้งเดียว0,,2c1

โครงสร้างเทป

สำหรับแต่ละตัวนับ TWMเรากำหนดตำแหน่งเซลล์เทป BF สองตำแหน่งเซลล์ทางเลือกและเซลล์มูลค่า :x{0,,c1} u(x) v(x)

u(x)=g(k1)<v(x)=g(k2) with u(x)v(x)x(modc)

โดยคุณสมบัติที่สองของมีค่าแตกต่างกันสองค่าให้เลือกgk1,k2

เนื้อหาของเซลล์สำรองจะใช้เวลาส่วนใหญ่ที่ยกเว้นเมื่อมีการเยี่ยมชมเคาน์เตอร์เมื่อมันจะอยู่ที่สองเท่าของค่ารีเซ็ตตัวนับ เซลล์มูลค่าจะถูกเก็บไว้ที่สองเท่าของค่าของตัวนับ TWM ที่สอดคล้องกัน02R

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

หากต้องการตำแหน่งของเซลล์ทั้งหมดสามารถเลื่อนไปทางขวาโดยค่าคงที่เพื่อหลีกเลี่ยงการเลื่อนไปทางซ้ายของตำแหน่งเทป BF เริ่มต้น

โครงสร้างโปรแกรม BF

ให้เป็นระยะทางระหว่างค่าของตัวนับหยุดและเซลล์ fallback และให้เป็นจำนวนที่มากพอที่สำหรับทุกเคาน์เตอร์xจากนั้นโครงสร้างโปรแกรม BF พื้นฐานคือH=v(h)u(h)NcN+1v((x+1)modc)u(x)x

การกำหนดค่าเริ่มต้น adjustment[ >×(H+cN+1) [ <×c ] <×H ]

การเริ่มต้น

เริ่มต้นขั้นตอนการตั้งค่าเซลล์ทั้งหมดสามารถเข้าถึงได้โดยโปรแกรมไปเป็นค่าเริ่มต้นของพวกเขาอยู่ในสถานะเป็นถ้าเคาน์เตอร์ล่าสุดเพิ่งได้รับการเข้าเยี่ยมชมและเซลล์เพียงเซลล์ที่ใช้งานอยู่เป็นทางเลือกของ :u(c1)

  1. เซลล์ค่าจะเริ่มต้นเป็นสองเท่าของเนื้อหาเริ่มต้นของตัวนับ TWM ที่สอดคล้องกันยกเว้นตัวนับนั้นจะถูกลดค่าลงล่วงหน้า0
  2. เซลล์สำรองมีการกำหนดให้ยกเว้นเซลล์ซึ่งถูกตั้งค่าให้2R0u(c1)2R
  3. เซลล์อื่น ๆ ทั้งหมดที่สามารถเข้าถึงได้โดยโปรแกรม (จำนวน จำกัด ) มีการกำหนดให้11

แล้วชี้เทปจะถูกย้ายไปยังตำแหน่ง (เสมอไม่ใช่ศูนย์มือถือ) ก่อนที่เราจะไปถึงโปรแกรมแรกu(c1)H[

จุดเริ่มต้นของวงรอบนอก

ในตอนต้นของทวนของวงนอกนั้นตัวชี้เทปจะอยู่ที่ทั้งสองหรือสำหรับเคาน์เตอร์xu(x)Hv(x)Hx

ให้เป็นตัวนับถัดไปเพื่อเข้าชมy=((x+1)modc)

การเคลื่อนไหวสถานที่ชี้เทปกับตำแหน่งที่เป็นและไม่ได้ไปทางซ้ายของ(y)>×(H+cN+1)y(modc)v(y)

วนรอบภายในค้นหาทางด้านซ้ายเป็นขั้นตอนเพื่อหาเซลล์ศูนย์ ถ้านับเป็นศูนย์แล้วมันจะหยุดที่เซลล์ (ศูนย์) ค่า ; มิฉะนั้นก็จะพบเซลล์กำกับ(y)[ <×c ]cyv(y)u(y)

เซลล์ใดที่พบจะกลายเป็นเซลล์ที่ใช้งานใหม่

การปรับ

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

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

การปรับที่จำเป็นคือ:

  1. ปรับเซลล์สำรองเคาน์เตอร์ก่อนหน้านี้โดย-2Ru(x)2R
  2. ปรับเซลล์สำรองเคาน์เตอร์ปัจจุบันของโดย , ยกเว้นถ้าเซลล์ที่ใช้งานปัจจุบันคือและอื่น ๆ ที่เราควรจะหยุดu(y)2Rv(h)
  3. ปรับค่าของเซลล์ตัวนับถัดไปโดย (ลดค่าตัวนับ)v((y+1)modc)2
  4. เมื่อเซลล์ที่ใช้งานเป็นเซลล์มูลค่า (ดังนั้นตัวนับถึงศูนย์) ให้ปรับค่าเซลล์ทั้งหมดจากแผนที่ทริกเกอร์ TWM ตัวเองกลายเป็นปรับได้โดย2Rv(y)yv(z)2f(y,z)v(y)2R

การปรับครั้งแรกและครั้งที่สองด้านบนนั้นจำเป็นโดยข้อเท็จจริงที่ว่าเซลล์ที่ใช้งานทั้งหมดจะต้องปรับตัวเองด้วยค่าเดียวกันนั่นคือสำหรับเซลล์ที่มีค่าและดังนั้นสำหรับเซลล์ทางเลือก สิ่งนี้ต้องมีการเตรียมและทำความสะอาดเซลล์ทางเลือกเพื่อให้แน่ใจว่าพวกมันจะกลับมาเป็นทั้งในค่าและกิ่งทางเลือก2R0

ปลายวงด้านนอก

การเคลื่อนไหวแสดงให้เห็นว่าในตอนท้ายของระยะการปรับตัวชี้เทปจะถูกย้ายวางไว้ทางด้านซ้ายของเซลล์ที่ใช้งาน<×HH

สำหรับเซลล์ที่ใช้งานทั้งหมดอื่น ๆกว่าเคาน์เตอร์ลังเลของเซลล์ค่านี้เป็นเซลล์ที่ไม่เกี่ยวข้องและอื่น ๆ แปลกและไม่เป็นศูนย์และนอกวงยังคงซ้ำอีกv(h)

สำหรับตัวชี้จะถูกวางไว้บนเซลล์ fallback ที่สอดคล้องกันแทนซึ่งเราได้ทำข้อยกเว้นด้านบนเพื่อให้เป็นศูนย์และโปรแกรมจะออกจากรอบสุดท้ายและหยุดพักv(h)u(h)]


12

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

ภาษาทัวริงที่สมบูรณ์ซึ่งเรากำลังรวบรวมเป็น BF ที่ไม่มีขอบเขตคือThe Waterfall Modelซึ่งเป็นหนึ่งในโมเดลการคำนวณที่รู้จักง่ายที่สุด สำหรับคนที่ไม่รู้จักมันประกอบด้วยจำนวนเคาน์เตอร์ (และค่าเริ่มต้นสำหรับพวกเขา) และฟังก์ชั่นจากคู่ของเคาน์เตอร์กับจำนวนเต็ม; การทำงานของโปรแกรมประกอบด้วยซ้ำ ๆ ลบ 1 จากทุกเคาน์เตอร์แล้วถ้านับใด ๆเป็น 0 เพิ่มแต่ละเคาน์เตอร์ (โปรแกรมที่ถูกเขียนขึ้นในลักษณะที่ว่านี้ไม่เคยเกิดขึ้นกับเคาน์เตอร์หลายคนพร้อมกัน) มีการพิสูจน์ทัวริงครบถ้วนสมบูรณ์สำหรับภาษานี้อยู่เบื้องหลังการเชื่อมโยงของฉัน เราจะสมมติว่าตัวนับทั้งหมดมีค่าการรีเซ็ตตัวเองเหมือนกัน (เช่นfxf(x,y)yf(x,x)เหมือนกันสำหรับทุก ); นี่เป็นข้อสันนิษฐานที่ปลอดภัยเพราะสำหรับใด ๆการเพิ่มค่าคงที่แบบเดียวกันให้กับแต่ละจะไม่เปลี่ยนพฤติกรรมของโปรแกรมxxf(x,y)

ให้เป็นจำนวนตัวนับ โดยไม่สูญเสียของทั่วไป (สมมติว่าการคาดเดาของ Artin) สมมติว่ามีดั้งเดิมราก 2. Letเป็นที่เป็นอำนาจที่ต่ำสุดของ 2 มากกว่าพีโดยไม่สูญเสียความสามารถทั่วไปจะน้อยกว่า (ถูก จำกัด เชิงพหุนาม,จะเพิ่มขึ้นแบบทวีคูณดังนั้นใด ๆ ที่มีขนาดใหญ่พอจะทำงานได้)ppqp(1+s+s2)sp2q2p2q2pp

การจัดเรียงเทปมีดังนี้: เรานับแต่ละตัวนับด้วยจำนวนเต็ม (และไม่มีการสูญเสียทั่วไปเราถือว่าสมมติว่ามีตัวนับหยุดเดียวและหมายเลข ) ค่าของเคาน์เตอร์มากที่สุดจะถูกเก็บไว้ในเทปมือถือมีข้อยกเว้นของเคาน์เตอร์ 0 ซึ่งจะถูกเก็บไว้ในเซลล์เทป2qสำหรับแต่ละเซลล์เทปเลขคี่จากเซลล์ -1 จนถึงและรวม0i<p22i2q2p+1+2p+1เซลล์เทปนั้นมีค่า 1 เสมอเว้นแต่จะอยู่ทางด้านซ้ายของตัวนับทันทีซึ่งในกรณีนี้จะมีค่าเท่ากับ 0 เซลล์เทปที่มีเลขคู่ที่ไม่ได้ใช้เป็นตัวนับมีค่าที่ไม่เกี่ยวข้อง (ซึ่งอาจเป็นหรือไม่ใช่ 0) ); และเซลล์เทปที่มีตัวเลขคี่นอกช่วงที่ระบุยังมีค่าที่ไม่เกี่ยวข้อง โปรดทราบว่าการตั้งค่าเทปให้อยู่ในสถานะเริ่มต้นที่เหมาะสมนั้นจำเป็นต้องเริ่มต้นเพียงองค์ประกอบของเทปจำนวนมากเป็นค่าคงที่ซึ่งหมายความว่าเราสามารถทำได้ด้วยลำดับขั้นตอน<>+-(ในความเป็นจริงเพียง>+ต้องการ) ดังนั้นจึงไม่มีวงเล็บ ในตอนท้ายของการเริ่มต้นนี้เราจะย้ายตัวชี้เทปไปที่เซลล์ -1

รูปร่างทั่วไปของโปรแกรมของเราจะมีลักษณะดังนี้:

initialisation ปรับ[>>>[ >×(2p1) [ <×(2p) ]>-] <<<]

การเริ่มต้นทำให้เทปเป็นรูปร่างที่คาดหวังและตัวชี้บนเซลล์ -1 นี่ไม่ใช่เซลล์ทางด้านซ้ายของตัวนับ (0 ไม่ใช่พลังของ 2) ดังนั้นจึงมีค่า 1 และเราเข้าสู่ลูป การวนรอบคงที่สำหรับลูปนอกสุดนี้คือพอยน์เตอร์เทปคือ (ที่จุดเริ่มต้นและจุดสิ้นสุดของการวนซ้ำแต่ละครั้ง) สามเซลล์ทางด้านซ้ายของตัวนับ จะเห็นได้ว่าลูปจะออกจากเราถ้าเรามีสามเซลล์ทางด้านซ้ายของตัวนับ 2 (ตัวนับแต่ละตัวจะมี 1 สามเซลล์ทางด้านซ้ายราวกับว่ามี 0 นั่นก็หมายความว่าตำแหน่งเทปของตัวนับสองตัว มี 2 ​​เซลล์แยกจากกันเพียงสองพลังของ 2 ที่ต่างกัน 2 คือและและการแทนค่าไบนารีของเปลี่ยนจากสตริง s เป็นสตริง2122q01ในทางกลับกันอย่างน้อยสี่ครั้งจึงไม่สามารถอยู่ห่างจากอำนาจ 1)

ลูปที่สองวนซ้ำหลาย ๆ รอบบนเคาน์เตอร์ลดระดับลง การวนรอบไม่คงที่คือตัวชี้เทปชี้ไปที่ตัวนับเสมอ ดังนั้นวงจะออกเมื่อตัวนับบางกลายเป็น 0 การลดลงเป็นเพียง-; วิธีที่เราได้จากเคาน์เตอร์หนึ่งไปอีกเคาน์เตอร์นั้นซับซ้อนกว่า แนวคิดพื้นฐานคือการย้ายช่องว่างไปทางขวาจากจะทำให้เราอยู่ในเซลล์เลขคี่ซึ่งอยู่ทางขวาของเคาน์เตอร์ใด ๆ (เป็นตัวนับสุดท้ายเป็นบวกเพราะเป็นบวก); โมดูโลค่านี้สอดคล้องกัน (โดยทฤษฎีบทเล็กของแฟร์มา) 1 วงในสุดเคลื่อนไปทางซ้ายซ้ำ ๆ2p12x2p+2x12p2x1x2p2x+12pช่องว่างยังไม่เปลี่ยนดัชนีของเทปเซลล์โมดูโลและในที่สุดจะต้องค้นหาเซลล์ที่สอดคล้องกับโมดูโลที่มีค่า (ซึ่งจะเป็นเซลล์ทางด้านซ้ายของตัวนับบางส่วน); เนื่องจากความต้องการรูทดั้งเดิมของเรามีเซลล์หนึ่งเซลล์ดังกล่าว (ซึ่งสอดคล้องกับ moduloและนั้นสอดคล้องกับสำหรับใด ๆ otherโดยที่เป็นลอการิทึมแบบแยกส่วนถึงฐาน 2 โมดูโล ) นอกจากนี้จะเห็นได้ว่าตำแหน่งของตัวชี้เทป modulo2p2x+12p2q112p2log2,p(r)+112r1rlog2,pp2pเพิ่มขึ้นครั้งทุกรอบรอบวงกลาง ดังนั้นตัวชี้เทปจะต้องวนรอบระหว่างตัวนับทั้งหมด(ตามลำดับของค่าโมดูโล ) ดังนั้นทุกซ้ำเราลดทุกเคาน์เตอร์ (ตามที่ต้องการ) หากการวนซ้ำแบ่งบางส่วนผ่านการวนซ้ำเราจะดำเนินการลดลงเมื่อเราป้อนการวนซ้ำอีกครั้ง (เนื่องจากการวนรอบนอกสุดที่เหลือทำให้ไม่มีการเปลี่ยนแปลงสุทธิในตำแหน่งตัวชี้เทป)2p2pp

เมื่อตัวนับกด 0 วงกลางจะนำเราไปยังรหัส "การปรับ" นี่เป็นเพียงการเข้ารหัสของ ; สำหรับทุกคู่จะเพิ่มไปยังองค์ประกอบเทปซึ่งเป็นระยะทางเดียวกันไปทางซ้าย / ขวาของตัวชี้เทปปัจจุบันเป็นเคาน์เตอร์ 's สถานเทปซ้าย / ขวาของเคาน์เตอร์ ' s ตำแหน่งเทป (จากนั้นลบตัวชี้เทปกลับไปยังตำแหน่งที่เริ่มต้น) เมื่อใดก็ตามที่ระยะทางนี้จะไม่ซ้ำกัน:f(x,y)f(x,y)yxxy

  • ความแตกต่างระหว่างสองพลังของ 2 คือเลขฐานสองที่ประกอบด้วยสตริง 1 หรือมากกว่าวินาทีตามด้วยสตริง 0 หรือมากกว่าวินาที (ด้วยค่าสถานที่ของจุดเริ่มต้นของตัวเลขและจุดเริ่มต้นของสตริง ขึ้นอยู่กับขนาดใหญ่และเล็กตามลำดับของและ ); ดังนั้นความแตกต่างทั้งหมดนั้นแตกต่างกัน * สำหรับความแตกต่างของกำลังของ 2 และนั้นจะต้องมีการเปลี่ยนอย่างน้อยสองครั้งระหว่างสตริงของวินาทีและวินาที (100xyq10q มีช่วงการเปลี่ยนภาพอย่างน้อยสี่ครั้งการลบสามารถลบ 2) เท่านั้นจึงแตกต่างจากความแตกต่างทั้งหมดของสองพลังของสองและความแตกต่างเหล่านี้ก็ชัดเจนจากกันและกัน

สำหรับเราเห็นได้ชัดว่าระยะทางที่เคลื่อนที่คือ 0 แต่เนื่องจากทั้งหมดเท่ากันเราจึงสามารถใช้สิ่งนี้เป็นการปรับสำหรับเซลล์ปัจจุบัน และจะเห็นได้ว่ารหัสการปรับจึงใช้ "เมื่อตัวนับจำนวนเยี่ยมชมผล 0" สำหรับทุกตัวนับ เซลล์ทั้งหมดที่เป็นตัวแทนของเคาน์เตอร์จะถูกปรับตามจำนวนที่ถูกต้องและการปรับอื่น ๆ ทั้งหมดจะส่งผลต่อเซลล์ที่ไม่ได้นับคู่ (ความแตกต่างระหว่างสองเลขคู่นั้นคือคู่) ซึ่งไม่มีผลต่อพฤติกรรมของโปรแกรมx=yf(x,y)

ดังนั้นตอนนี้เรามีการรวบรวมการทำงานของโปรแกรมใด ๆ ใน The Waterfall Model ถึง BF (รวมถึงพฤติกรรมที่หยุดชะงัก แต่ไม่รวม I / O ซึ่งไม่จำเป็นสำหรับทัวริง - ความสมบูรณ์) โดยใช้วงเล็บสามคู่เท่านั้นและสามคู่ ของวงเล็บเพียงพอสำหรับทัวริงครบถ้วน


งานที่ดี! ฉันเห็นคุณทำงานในเรื่องนี้ในไตรวิว!
MilkyWay90

ฉันคิดว่าคุณต้องมี s อย่างน้อย p + 2 เมื่อ s = p + 1, q คือ 1 น้อยกว่าพลังของ 2
Ørjan Johansen

ฉันคิดว่าฉันพบง่ายมาก (ในขณะที่ไม่ต้องใช้ทฤษฎีจำนวนเฉพาะ) 2p*2^i+2iตำแหน่งเคาน์เตอร์
Ørjan Johansen

@ ØrjanJohansen: ใช่ฉันคิดว่าฉันพูดถึงการก่อสร้างใน #esoteric (หลังจากที่ฉันเขียนบทความนี้)? ทั้งหมดที่คุณต้องการจริงเป็นไม้บรรทัด Golomb ซึ่งแต่ละองค์ประกอบเป็นโมดูโลที่แตกต่างกันจำนวนขององค์ประกอบและมีหลายวิธีที่จะสร้างเหล่านั้น (ถึงแม้จะหาคนที่ดีที่สุดคือยากที่ยาวที่สุดที่ฉันได้พบ (ผ่านกำลังดุร้าย) เป็น[0, 1, 3, 7, 20, 32, 42, 53, 58]p สำหรับ = 9)
ais523

โอ้คุณทำอย่างนั้น (ก่อนที่ฉันจะบอกว่าสมองของฉันปฏิเสธที่จะอยู่ในโหมดคณิตศาสตร์ดังนั้นจึงมีข้อแก้ตัวของฉัน: P) ฉันเดาว่าฉันพบว่า k = 0 เพียงพอแล้ว ฉันคิดว่าErdős – Turan_constructionของวิกิพีเดียให้การเติบโตแบบ polynomially (และน่าจะเป็น O () - ดีที่สุด?) หากคุณใช้เพียงครึ่งแรกขององค์ประกอบ (อีกครึ่งหนึ่งจะทำซ้ำ (mod p))
Ørjan Johansen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.