วิธีการขอรับค่าที่ไม่รู้จักรับรายการเรียงลำดับของ


19

ใครสามารถช่วยฉันด้วยปัญหาต่อไปนี้?

ฉันต้องการหาค่าบางอย่างa i , b jai,bj (mod ยังไม่มีข้อความN ) โดยที่i = 1 , 2 , , K , j = 1 , 2 , , Ki=1,2,,K,j=1,2,,K (เช่นK = 6K=6 ) ให้รายการของค่าเค2K2ที่ สอดคล้องกับความแตกต่างa i - b j( modไม่มี)aibj(modN) (เช่นN = 251N=251 ) โดยไม่ทราบความสัมพันธ์ที่สอดคล้องกันอย่างเป็นรูปธรรม ตั้งแต่ค่าa i , b j( modไม่มี)ai,bj(modN)จะไม่ซ้ำกันกำหนดให้แตกต่างa i - b j( modไม่มี)aibj(modN)เรามองหาใด ๆ ที่ได้รับมอบหมายถูกต้องของค่า

แน่นอนลองเปลี่ยนลำดับหมายเลขเค2K2ในรายการ (ทั้งหมดกรณีที่เป็นไปได้K 2 !K2! ) แล้วแก้สมการแบบแยกส่วนด้วยa i , b jai,bjเป็นตัวแปรที่เป็นไปไม่ได้

ในความเป็นจริงแล้วปัญหานี้เกิดขึ้นในเอกสารเกี่ยวกับการเข้ารหัสลับกับแผนการลงนาม NTRU รุ่นแรก ( http://eprint.iacr.org/2001/005 ) อย่างไรก็ตามผู้เขียนเขียนเพียงหนึ่งประโยค“ อัลกอริทึมย้อนรอยง่าย ๆ ds nds หนึ่งทางออก…” (ในหัวข้อ 3.3) และทุกคนสามารถให้คำอธิบายเพิ่มเติมได้หรือไม่ ยิ่งไปกว่านั้นผู้เขียนยังกล่าวอีกว่า“ ทุกการเปลี่ยนแปลงแบบวงกลม{ ( ( a i + M )พอควรN , ( b i + M )พอควรN}Ki=1{((ai+M)modN,(bi+M)modN}Ki=1หรือการแลกเปลี่ยน({(N1bi,N1ai)}Ki=1)({(N1bi,N1ai)}Ki=1)ผลลัพธ์ในรูปแบบเดียวกันของaibjmodNaibjmodN ” และข้อความนี้มีประโยชน์หรือไม่?


7
โปรดสังเกตว่าเป็นไปไม่ได้ที่จะกู้คืนai,bjai,bjเนื่องจากถ้าคุณเพิ่มค่าคงที่CCลงในตัวเลขทั้งหมดความแตกต่างยังคงเหมือนเดิม
Yuval Filmus

1
@Yuval: นี่รวมอยู่ในประโยคสุดท้ายของคำอธิบายแล้ว ฉันคิดว่าต้องการวิธีแก้ปัญหาเพียงวิธีเดียวเท่านั้นเนื่องจากอาจมีหลายวิธี
domotorp

2
@Yuval ขออภัยในความไม่ได้ชี้ให้เห็นว่าai,bjai,bjนอกจากนี้ยังจะต้องดำเนินการแบบแยกส่วนNNNดังนั้นจึงไม่มีทางออกไม่มีที่สิ้นสุด
แขกที่เข้าพัก

@domotorp ใช่แล้วการหาวิธีแก้ปัญหาใด ๆ ก็โอเค
แขกที่เข้าพัก

1
บางที OP อาจอธิบายได้ว่าaiai , bjbjนั้นเป็นแบบโมดูโลNNในโพสต์ก่อนหน้านี้: อาจจะอยู่ในชื่อเรื่องหรือในย่อหน้าแรก ปัญหาเกี่ยวกับค่าคงที่CCก็คุ้มค่าที่จะกล่าวถึงเช่นกัน ทั้งสองสิ่งสับสนฉันเมื่อฉันเริ่มอ่าน
Juan Bermejo Vega

คำตอบ:


4

นี่คือข้อเสนอแนะสำหรับและ251 เราจะได้รับรายการ{N} เริ่มต้นด้วยการหนึ่งของพวกเขาโดยไม่สูญเสียของทั่วไปa_1-b_1โดยไม่สูญเสียของทั่วไปและเราได้รับค่าของa_1ตอนนี้ใช้เวลาอีกหนึ่งและหวังว่ามันเป็นรูปแบบ (นี้เกิดขึ้นกับความน่าจะ ) และอนุมานA_2K=6K=6N=251N=251a i - b j( modN ) 1 - 1 1 = 0 1 2 - 1 5 / 35 = 1 / 7 2aibj(modN)a1b1b1=0a1a2b15/35=1/7a2

ในขั้นตอนนี้เรารู้a_1,เป้าหมายต่อไปของเราคือการมองหาสำหรับ1 สำหรับผู้สมัครแต่ละคนหากดังนั้นควรอยู่ในรายการด้วย ถ้าแล้วน่าจะเป็นที่นอกจากนี้ยังมีในรายการเป็นประมาณ33/251ดังนั้นหากเราจะหาผู้สมัครบางที่ยังอยู่ในรายชื่อแล้วอาจ 1 ด้วยวิธีนี้เราสามารถกู้คืนด้วยความมั่นใจ1 , 2 , 1 1 - 1 ฉัน - ฉัน= 1 ( ฉัน - J ) + ( 2 - 1 ) = 2 - ฉัน1 ( i - b j ) + ( a 2 - aa1,a2,b1a1bjj1aibji=1(aibj)+(a2a1)=a2bji11 ) 33 / 251 ฉัน - ( ฉัน - J ) + ( 2 - 1 ) ฉัน= 1 2(aibj)+(a2a1)33/251aibj(aibj)+(a2a1)i=1b2

ในขั้นตอนนี้เรารู้a_1,ในลักษณะเดียวกับที่เรากู้คืนเราสามารถกู้ได้อย่างแน่นอน จากนั้นเราสามารถกู้คืนโดยค้นหาผู้สมัครซึ่งและอยู่ในรายการ เนื่องจากเรามีมากกว่าความน่าจะเป็นที่จะล้มเหลวของเราลดลงอย่างเห็นได้ชัด เรายังคงและหาb_3,1 , 2 , 1 , 2 2 3 3 ฉัน - ( ฉัน - J ) + ( 2 - 1 ) ( ฉัน - J ) + ( 3 - 1 ) 3 , 4 , 4a1,a2,b1,b2b2a3b3aibj(aibj)+(a2a1)(aibj)+(a3a1)a,a5,b6,a6,b6b3,a4,b4,a5,b6,a6,b6

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

มันเป็นแบบฝึกหัดที่ดีที่จะตั้งโปรแกรมอัลกอริทึมนี้จริง ๆ - นั่นอาจเป็นวิธีเดียวที่จะเข้าใจวิธีการใช้การย้อนรอยอย่างถูกต้อง นั่นเป็นวิธีเดียวที่จะบอกได้ว่าอัลกอริทึมนี้ใช้งานได้จริงหรือไม่


ขอบคุณและฉันจะรหัส backtracking นี้เพื่อให้เข้าใจมากขึ้น บางทีผู้เขียนบทความต้นฉบับใช้วิธีที่คล้ายกันเพราะเขายังกล่าวถึง "backtrack"
แขกรับเชิญ

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

ทำไมฉันไม่สามารถ "@Yuval" ในความคิดเห็นสุดท้ายของฉันได้! ขออภัยฉันลองมาหลายครั้งแล้ว
ผู้เข้าพัก

บางทีคุณอาจแชร์รหัสออนไลน์เพื่อให้คนอื่นที่อ่านบทความนั้นสามารถเข้าถึงได้
Yuval Filmus

5

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

ปัญหานี้เรียกว่าปัญหาวงแหวนและเป็นกรณีพิเศษของปัญหาการฝัง -torus ทั่วไป นอกจากนี้ยังมีความสัมพันธ์อย่างใกล้ชิดกับปัญหาทางด่วนซึ่งความแตกต่างของระยะทางเป็นแบบสัมบูรณ์ (ไม่ใช่แบบโมดูโลบางหมายเลข)dd

ไม่ทราบว่าปัญหาวงแหวนทางน้ำยอมรับขั้นตอนวิธีแบบโพลิไทม์หรือไม่ มีอัลกอริธึมหลอกหลายแบบสำหรับคำถามที่เกี่ยวข้อง การอ้างอิงที่ดีที่สุด (อนิจจาคนเก่า) เป็นกระดาษโดยเลมเก Skiena และสมิ ธ


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

อ่าใช่ มันเป็นกราฟสองส่วน จุดดี.
Suresh Venkat

กราฟสองฝ่าย? สิ่งที่ต้องการ. บางทีฉันควรลองปัญหาด้วยวิธีนี้ แต่ตอนนี้ฉันยังไม่มีแนวคิดที่เป็นรูปธรรม
แขกที่เข้าพัก

3

นี่คือข้อสังเกตที่ฉันคิดว่าจะช่วยให้คุณตั้งหลักอาจเป็นหนึ่งในพอที่จะแก้ปัญหา

สมมติว่าเรามีความแตกต่างสี่1 - 1 , 1 - 2 , 2 - 1 , 2 - 2ที่เกิดขึ้นเป็นความแตกต่างที่คู่ระหว่างสอง's และสอง ' s เรียกสิ่งนี้ว่าความแตกต่างสี่ โปรดสังเกตว่าเรามีความสัมพันธ์ที่ไม่สำคัญ:a1b1a1b2a2b1a2b2ab

( a 1 - b 1 ) - ( a 1 - b 2 ) = ( a 2 - b 1 ) - ( a 2 - b 2 )( modN )

(a1b1)(a1b2)=(a2b1)(a2b2)(modN).

คุณสามารถพยายามที่จะใช้ความสัมพันธ์นี้เพื่อแจ้ง quartets ศักยภาพออกจากรายชื่อของK 2 ตัวอย่างเช่นเลือกสี่ความแตกต่างจากรายการ หากพวกเขาไม่พอใจความสัมพันธ์ข้างต้นแน่นอนพวกเขาจะไม่เกิดขึ้นจากโครงสร้างสี่ หากพวกเขาตอบสนองความสัมพันธ์พวกเขาอาจเกิดจากสี่K2

มีหลายวิธีที่คุณสามารถทำสิ่งต่าง ๆ ได้จากที่นี่ แต่ฉันคิดว่ามันจะเพียงพอ

ฉันสงสัยเป็นพิเศษว่าสำหรับการตั้งค่าพารามิเตอร์ตัวอย่างปัญหาจะค่อนข้างง่ายเพราะการทดสอบข้างต้นสำหรับการรับรู้สี่อาจไม่ได้มีผลบวกปลอมมากเกินไป ของเราทั้งหมด( K 24 )วิธีการเลือก 4 ข้อแตกต่างจากรายการจะมี ( K(K24)2 ) 2สี่ (ซึ่งจะตอบสนองความสัมพันธ์) และส่วนที่เหลือเป็นไม่ใช่สี่ (ซึ่งตอบสนองความสัมพันธ์กับความน่าจะเป็น1/N, heuristically) ดังนั้นเราคาดว่าจะเห็นเกี่ยวกับ((K2)(K2)21/N4 ) - ( K2 ) 2)/Nผลบวกปลอมคือ 4-tuples ที่ผ่านการทดสอบแม้ว่าจะไม่ใช่ quartets สำหรับพารามิเตอร์ของคุณหมายความว่าเรามี 225 ควอร์ตและ(58905-225)/251234ผลบวกผิดอื่น ๆ ดังนั้นประมาณครึ่งหนึ่งของ tuples 4 ตัวที่ผ่านการทดสอบนั้นเป็นควอเทต ซึ่งหมายความว่าการทดสอบข้างต้นเป็นวิธีที่ดีในการรู้จักควอเทต เมื่อคุณสามารถจำได้สี่คุณสามารถไปที่เมืองเพื่อกู้คืนโครงสร้างของรายการความแตกต่าง((K24)(K2)2)/N(58905225)/251234


@DW: ขอบคุณ แต่ตอนนี้ฉันสงสัยว่าขั้นตอนต่อไปหลังจาก quartets ที่เป็นไปได้ทั้งหมด (รวม 225 + 234 = 459 คน) พบ มันควรจะค้นหาสี่ quartets ที่ไม่ทับซ้อนกันและทดสอบว่าพวกเขาสามารถเป็นทางออกที่เป็นไปได้หรือไม่? วิธีทำสิ่งนี้ให้สำเร็จอย่างมีประสิทธิภาพ? อาจจะไม่ยากเพราะมีการซ้อนทับกันไม่มาก
แขกรับเชิญ

@aguest เป็นคำถามที่ดี! ฉันจำไม่ได้ว่าฉันคิดอะไรอยู่ในขณะนั้น ผมคิดว่าผมจำได้คิดวิธีการอย่างใดอย่างหนึ่งอาจจะเริ่มต้นด้วยหนึ่งสี่แล้วมองหาคนอื่น ๆ ทั้งหมดที่ทับซ้อนใน 2 ความแตกต่าง (เช่นที่เกิดขึ้นจาก1 , J , 1 , 2ที่เจ2 ) แต่ฉัน ไม่รู้ว่าจะไปจากที่นั่นได้อย่างไร (จะกรองผลบวกที่ผิดพลาดได้อย่างไร) a1,aj,b1,b2j2
DW

3

นี่เป็นวิธีการที่แตกต่างกันขึ้นอยู่กับการหาตัวเลขซ้ำที่ไม่สามารถปรากฏในหมู่{ 1 , ... , 6 } สอบถามชุดมากกว่าประมาณของ's ถ้าเรารู้ว่า{ 1 , ... , 6 } ในทำนองเดียวกันBเป็น overapproximation ของ 's ถ้าเรารู้ว่า{ 1 , ... , 6 } B เห็นได้ชัดว่าA ที่เล็กกว่า{a1,,a6}Aa{a1,,a6}ABb{b1,,b6}BAมีประโยชน์มากขึ้นนี้มากกว่าประมาณเป็นและเดียวกันจะไปสำหรับB แนวทางของฉันขึ้นอยู่กับการปรับแต่งการประมาณค่าเหล่านี้ซ้ำ ๆ นั่นคือการลดขนาดของเซตเหล่านี้ซ้ำ ๆB

หลักของวิธีนี้คือการใช้วิธีการสำหรับการปรับแต่ง : รับมากกว่าประมาณสำหรับ's และมากกว่าประมาณBสำหรับ ' s หาใหม่มากกว่าประมาณ*สำหรับ's เช่นว่า*โดยเฉพาะอย่างยิ่งตามปกติ*จะมีขนาดเล็กกว่าดังนั้นนี้จะช่วยให้เราปรับแต่งมากกว่าประมาณสำหรับ'sAaBbAaAAAAa

โดยสมมาตรโดยพื้นฐานแล้วกลอุบายแบบเดียวกันจะทำให้เราปรับแต่งการประมาณค่าเกินของb : s โดยให้การประมาณค่าAเกินกว่าค่าAสำหรับค่าaและค่าประมาณBสำหรับค่าbนั้น - การประมาณค่าB สำหรับb 'sbAaBbBb

ดังนั้นฉันจะบอกคุณว่าการปรับแต่งแล้วฉันจะรวบรวมทุกอย่างเพื่อรับอัลกอริทึมเต็มสำหรับปัญหานี้ ในสิ่งต่อไปนี้ให้Dแทนความแตกต่างหลายชุดเช่นD = { a i - b j : 1 i , j 6 } ; เราจะมุ่งเน้นไปที่การหากลั่นมากกว่าประมาณ*ให้, BDD={aibj:1i,j6}AA,B

วิธีคำนวณการปรับแต่ง พิจารณาความแตกต่างเดียวd D พิจารณาชุดD + B = { d + Y : Y B } บนพื้นฐานความรู้ของเราที่Bเป็นมากกว่าประมาณของของเรารู้ว่าอย่างน้อยหนึ่งองค์ประกอบของd + Bจะต้องมีองค์ประกอบของ{ 1 , ... , 6 } ดังนั้นเราสามารถปฏิบัติต่อองค์ประกอบแต่ละอย่างในd + BdDd+B={d+y:yB}Bbd+B{a1,,a6}d+Bเป็น "ข้อเสนอแนะ" สำหรับจำนวนที่จะอาจจะรวมอยู่ใน งั้นลองกวาดความแตกต่างทั้งหมดd Dและสำหรับแต่ละอันให้ระบุว่าตัวเลขไหนที่"แนะนำ" โดยdAdDd

ตอนนี้ฉันจะสังเกตเห็นว่าหมายเลขa 1ควรได้รับการแนะนำอย่างน้อย 6 ครั้งในระหว่างกระบวนการนี้ ทำไม? เพราะความแตกต่าง1 - 1อยู่ในDและเมื่อเราดำเนินการมัน1จะเป็นหนึ่งในตัวเลขที่มันแสดงให้เห็น (ตั้งแต่เรารับประกันได้ว่า1B , ( 1 - 1 ) + Bประสงค์ แน่นอนรวมถึง1 ) ในทำนองเดียวกันที่แตกต่าง1 - 2ปรากฏที่ไหนสักแห่งในa1a1b1Da1b1B(a1b1)+Ba1a1b2Dและมันจะทำให้เกิด 1ที่จะชี้ให้เห็นอีกครั้ง ด้วยวิธีนี้เราจะเห็นว่าค่าที่ถูกต้องของ 1จะได้รับการแนะนำอย่างน้อย 6 ครั้ง เดียวกันถือสำหรับ 2และ 3และอื่น ๆDa1a1a2a3

ดังนั้นให้A เป็นเซตของตัวเลขa ที่ได้รับการแนะนำอย่างน้อย 6 ครั้ง นี่คือการประมาณโดยประมาณของa 'โดยความคิดเห็นข้างต้นAaa

การเพิ่มประสิทธิภาพของเราสามารถกรองข้อเสนอแนะทั้งหมดที่ไม่ได้อยู่ในทันที: ในคำอื่น ๆ ที่เราสามารถรักษาความแตกต่างdเป็นบอกค่าทั้งหมด( D + B ) เพื่อให้แน่ใจว่าเราจะมี*เรามีความหวังว่า*เป็นอย่างเคร่งครัดมีขนาดเล็กกว่า; ไม่มีการรับประกัน แต่ถ้าทุกอย่างไปได้ด้วยดีบางทีมันอาจจะเป็นAd(d+B)AAAAA

ร่วมกันวางนี้ขั้นตอนวิธีการปรับแต่ง, Bให้ผลผลิต*มีดังนี้A,BA

  1. ให้S = d D ( D + B ) นี่คือข้อเสนอแนะหลายชุดS=dD(d+B)A

  2. นับจำนวนครั้งที่แต่ละค่าที่ปรากฏในS ให้*เป็นชุดของค่าที่ปรากฏอย่างน้อย 6 ครั้งในS (ซึ่งสามารถดำเนินการได้อย่างมีประสิทธิภาพโดยการสร้างอาร์เรย์251 แรกแรกศูนย์ทั้งหมดและในแต่ละครั้งจำนวนsแนะนำคุณเพิ่ม[ s ] ; ในตอนท้ายคุณกวาดผ่านมองหาองค์ประกอบที่มีค่าเป็น 6 หรือ ขนาดใหญ่)SASasa[s]a

วิธีการที่คล้ายกันสามารถสร้างขึ้นมาเพื่อปรับแต่ง, Bจะได้รับB * คุณสิ่งที่พื้นข้างต้นย้อนกลับและพลิกสัญญาณบางอย่าง: เช่นแทนที่จะd + B , คุณมองไปที่- d +A,BBd+Bd+A

วิธีคำนวณการประมาณค่าเริ่มต้นโดยประมาณ ที่จะได้รับครั้งแรกของเรามากกว่าประมาณหนึ่งความคิดคือการสมมติ (WLOG) ที่1 = 0 มันตามที่แต่ละค่าฉันจะต้องปรากฏอยู่ที่ไหนสักแห่งในหมู่Dจึงรายการของความแตกต่างDสามารถนำมาใช้เป็นครั้งแรกของเรามากกว่าประมาณสำหรับ's แต่น่าเสียดายที่นี้ไม่ได้ทำให้เรามีประโยชน์มากเกินประมาณสำหรับ 'sb1=0aiDDab

วิธีที่ดีคือการเพิ่มมูลค่าของเดาหนึ่งใน's ในคำอื่น ๆ เราสมมติ (WLOG) ที่1 = 0และใช้= Dเป็นครั้งแรกของเรามากกว่าประมาณของ's จากนั้นเราจะคาดเดาซึ่งหนึ่งในจำนวนนี้ 36 ค่าแน่นอนหนึ่งใน's พูด1 นั้นทำให้เรามีมากกว่าประมาณB = 1 - Dสำหรับ 's เราใช้การประมาณค่าเริ่มต้นที่ประมาณA , Bab1=0A=Daaa1B=a1DbA,Bจากนั้นปรับแต่งซ้ำ ๆ จนกว่าจะบรรจบกันและทดสอบว่าผลลัพธ์นั้นถูกต้องหรือไม่ เราทำซ้ำถึง 36 ครั้ง 36 คาดเดาที่แตกต่างกัน1 (โดยเฉลี่ย 6 คาดเดาควรจะเพียงพอ) จนกว่าเราจะหาคนที่ผลงานa1

อัลกอริทึมเต็ม ตอนนี้เราสามารถมีขั้นตอนวิธีการเต็มรูปแบบในการคำนวณ1 , ... , 6 , บี1 , ... , 6 โดยทั่วไปเราได้รับการประมาณค่าเริ่มต้นสำหรับAและBจากนั้นทำการปรับปรุงซ้ำ ๆa1,,a6,b1,,b6AB

  1. Make a guess: For each zD, guess that a1=z. Do the following:

    1. Initial over-approximation: Define A=D and B=zD.

    2. Iterative refinement: Repeatedly apply the following until convergence:

      • Refine A,B to get a new over-approximation B of the b's.
      • Refine A,B to get a new over-approximation A of the a's.
      • Let A:=A and B:=B.
    3. Check for success: If the resulting sets A,B each have size 6, test whether they are a valid solution to the problem. If they are, stop. If not, continue with the loop over candidate values of z.

Analysis. Will this work? Will it eventually converge on A={a1,,a6} and B={b1,,b6}, or will it get stuck without completely solving the problem? The best way to find out is probably to test it. However, for your parameters, yes, I expect it will be effective.

If we use method #1, as long as |A|,|B| are not too large, heuristically I expect the sizes of the sets to monotonically shrink. Consider deriving A from A,B. Each difference d suggests |B| values; one of them correct, and the other |B|1 can be treated (heuristically) as random numbers. If x is a number that does not appear among the a's, what is the probability that it survives the filtering and is added to A? Well, we expect a to be suggested about (|B|1)×36/251 times in total (on average, with standard deviation about the square root of that). If |B|36, the probability that a wrong x survives the filtering should be about p=0.4 or so (using the normal approximation for the binomial, with continuity correction). (The probability is smaller if |B| is smaller; e.g., for |B|=30, I expect p0.25.) I expect the size of A to be about p(|A|6)+6, which will strictly improve the over-approximation since it is strictly smaller than |A|. For instance, if |A|=|B|=36, then based upon these heuristics I expect |A|18, which is a big improvement over |A|.

Therefore, I predict that the running time will be very fast. I expect about 3-5 iterations of refinement to be enough for convergence, typically, and about 6 guesses at z should probably be enough. Each refinement operation involves maybe a few thousand memory reads/writes, and we do that maybe 20-30 times. So, I expect this to be very fast, for the parameters you specified. However, the only way to find out for sure is to try it and see if it works well or not.


@DW: Thank you very much for your long answer and the effort you took to type so many words!!! According to your description, your algorithm here is quite correct. And I’m going to code it to test the efficiency right now.
a guest

@DW: Hi, I’ve implemented your description in C++. The algorithm runs fast and the refinement step does reduce the sizes of original sets A and B. However, the convergence seems to be not so perfect. In fact, for each guess zD, the final sizes of A and B are still more than 10 according to my record output by the program. The most frequent number of existing elements when A (and B) can not be improved by further repetitions of refinement is 11, but I can hardly see a number below 10. However, this has made the problem solvable by trying each 6-elements chosen from
a guest

@DW: (Cotinued)final A and B for each guess z (although I didn’t implement the last step on my PC). The total amount computation will be about 220, I estimate. Thank you very much!
a guest

Sorry, but my last comment is too long, and I have to split it into two.
a guest
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.