ใช่และไม่ใช่ขึ้นอยู่กับสิ่งที่คุณหมายถึงโดย "วิธีเดียว" ใช่ในการที่ไม่มีวิธีที่รับประกันว่าจะยุติสิ่งที่ดีที่สุดที่คุณสามารถทำได้ (สำหรับค่าทั่วไปของและ ) เป็นอัลกอริธึมที่สิ้นสุดลงด้วยความน่าจะเป็น 1 ไม่เช่นนั้นคุณสามารถทำให้ "ขยะ" มีขนาดเล็ก ตามที่คุณต้องการ.RNR
ทำไมการเลิกจ้างที่รับประกันจึงเป็นไปไม่ได้โดยทั่วไป
สมมติว่าคุณมีเครื่องมือการคำนวณที่กำหนด (เครื่องทัวริงหรือสิ่งที่ลอยเรือของคุณ) บวก oracle ที่สร้างองค์ประกอบสุ่มของที่ชุดองค์ประกอบ[0..R-1]เป้าหมายของคุณคือการสร้างองค์ประกอบของที่ชุดองค์ประกอบN-1] ผลลัพธ์ของเครื่องยนต์ของคุณขึ้นอยู่กับลำดับของค่าที่ส่งคืนโดย oracle เท่านั้น มันเป็นฟังก์ชั่การที่ลำดับที่อาจเกิดขึ้นไม่มีที่สิ้นสุดldots)[ 0 .. R - 1 ] N [ 0 , N - 1 ] f ( r 0 , r 1 , r 2 , … )R[0..R−1]N[0,N−1]f(r0,r1,r2,…)
สมมติว่าเครื่องยนต์ของคุณเรียก oracle มากที่สุดครั้ง อาจมีร่องรอยที่ oracle เรียกว่าน้อยกว่าครั้ง ถ้าเป็นเช่นนั้นการเรียก oracle พิเศษครั้งเพื่อให้มันถูกเรียกเสมอว่าครั้งไม่เปลี่ยนผลลัพธ์ ดังนั้นโดยไม่สูญเสียความคิดเราจึงสันนิษฐานว่าพยากรณ์ถูกเรียกว่าคูณ จากนั้นน่าจะเป็นของผลที่คือจำนวนของลำดับเช่นว่าx ตั้งแต่พยากรณ์เป็นเครื่องกำเนิดไฟฟ้าแบบสุ่มเครื่องแบบลำดับแต่ละ equiprobable และมีความน่าจะเป็นเมตร ดังนั้นความน่าจะเป็นของผลลัพธ์แต่ละรายการจึงอยู่ในรูปแบบm m m x ( r 0 , … , r m - 1 ) f ( r 0 , … , r m - 1 ) = x 1 / R m A / R m A 0 R mmmmmx(r0,…,rm−1)f(r0,…,rm−1)=x1/RmA/Rmที่เป็นจำนวนเต็มระหว่างและเมตรA0Rm
ถ้าหารสำหรับบางคุณสามารถสร้างการกระจายแบบสม่ำเสมอเหนือองค์ประกอบโดยการเรียกตัวสร้างแบบสุ่มครั้ง (นี่คือการออกกำลังกายไปยังผู้อ่าน) มิฉะนั้นเป็นไปไม่ได้: มีวิธีการที่จะได้รับผลที่มีความน่าจะไม่มี N โปรดทราบว่าเงื่อนไขนั้นเทียบเท่ากับการบอกว่าปัจจัยสำคัญทั้งหมดของก็เป็นปัจจัยของ (ซึ่งอนุญาตได้มากกว่าสิ่งที่คุณเขียนไว้ในคำถามของคุณตัวอย่างเช่นคุณสามารถเลือกองค์ประกอบสุ่มระหว่าง 4 กับ 6-fair fair ตายแม้ว่า 4 จะไม่แบ่ง 6)R m m N m 1 / N N RNRmmNm1/NNR
ลดปริมาณขยะ
ในกลยุทธ์ของคุณเมื่อคุณไม่จำเป็นต้องวาดใหม่ทันที สังหรณ์ใจมีบิตของเอนโทรปีเหลืออยู่ในซึ่งคุณสามารถผสมได้[ kr≥kN[kN..R−1]
สมมติว่าสำหรับช่วงเวลาที่คุณจะได้ในความเป็นจริงให้สร้างตัวเลขสุ่มด้านล่างตลอดไปและคุณสร้างของพวกเขาในเวลาโดยการดึง ถ้าคุณทำตัวอย่างการปฏิเสธตรงไปตรงมาในการสร้างการจัดกลุ่มนี้เสียมากกว่าดึงเป็นคือเหลือหารด้วยจำนวนการจับ นี้อาจจะเป็นเพียงN) เมื่อและเป็น coprime คุณสามารถทำให้เสียขนาดเล็กโดยพลการโดยการเลือกค่ามากพอของdสำหรับค่าทั่วไปของและU d d R d - kNuddRd−kNudRdmodNuR N d R n gcd ( R , N ) N / gcd ( R , N )gcd(R,N)RNdRNการคำนวณมีความซับซ้อนมากขึ้นเพราะคุณต้องคำนึงถึงการสร้างและแยกต่างหาก แต่คุณสามารถทำให้ขยะมีขนาดเล็กและมีกลุ่มใหญ่เพียงพอgcd(R,N)N/gcd(R,N)
ในทางปฏิบัติแม้จะมีตัวเลขสุ่มที่ไม่มีประสิทธิภาพ (เช่นในการเข้ารหัส) มันไม่ค่อยคุ้มค่าที่จะทำอะไรนอกจากการสุ่มตัวอย่างการปฏิเสธอย่างง่ายเว้นแต่จะมีขนาดเล็ก ตัวอย่างเช่นในการเข้ารหัสที่โดยทั่วไปแล้วคือพลังของ 2 และโดยทั่วไปจะเป็นร้อยหรือพันบิตบิตการสร้างหมายเลขสุ่มสม่ำเสมอจะดำเนินการโดยการสุ่มตัวอย่างการปฏิเสธแบบตรงในช่วงที่ต้องการR NNRN