ฉันไม่ได้อ้างว่ามีทางออกที่ดีที่สุดสำหรับปัญหา (หรือว่ารายการนี้หมดจด) แต่ฉันต้องการร่างแนวทางที่เป็นไปได้บางอย่างที่อยู่ในใจและทำไมพวกเขาถึงไม่ยอมทำงาน ฉันจะไม่แก้ไขปัญหาเกี่ยวกับการสัมผัสเช่นว่าการใช้การประทับเวลาปัจจุบันเป็นแหล่งที่มาของการสุ่มนั้นเพียงพอ "คาดเดาไม่ได้" และวิธีการบังคับใช้คุณสมบัติบางอย่างของการแจกแจงความน่าจะเป็น - ฉันจะมุ่งเน้นไปที่
ไม่ใช่วิธีการแก้ไข: ไม่อนุญาตให้เข้ารหัสอย่างหนัก
นี่เป็นความคิดที่ไม่ดี มันเป็นข้อกำหนดที่ไม่สามารถสังเกตได้ (ซึ่งหมายความว่าคุณไม่สามารถระบุได้ว่าเป็นที่พอใจเพียงแค่เรียกใช้โปรแกรม) ซึ่งเป็นการลดทอนอย่างมากใน PPCGและอาจเป็นไปไม่ได้เลยหากใช้โปรแกรมบนแพลตฟอร์มอื่น ๆ อย่างอัตโนมัติ ปัญหาเกี่ยวกับข้อกำหนดเช่นนี้คือคุณต้องเริ่มต้นด้วยการค้นหาคำจำกัดความที่มีวัตถุประสงค์สำหรับ "การเข้ารหัสแบบยาก" โดยทั่วไปถ้าคุณลองสิ่งนี้คุณจะทำสิ่งที่แย่กว่านั้นเท่านั้น
ทำให้การเข้ารหัสเป็นไปไม่ได้
หากคุณไม่สามารถยกเลิกการอนุญาตได้อย่างสมบูรณ์ แต่คุณไม่ต้องการให้คนอื่นใช้มันคุณสามารถลองออกแบบความท้าทายที่การเข้ารหัสฮาร์ดไดรฟ์ไม่ใช่วิธีการแข่งขัน สิ่งนี้อาจเกิดขึ้นได้หากวัตถุที่ควรสร้างมีขนาดใหญ่พอและไม่สามารถบีบอัดได้ซึ่งการวางตัวอย่างหนึ่งลงในโค้ดจะต้องใช้จำนวนไบต์มากกว่าการเขียนอัลกอริทึมที่สร้างวิธีแก้ปัญหาที่ถูกต้องแบบสุ่ม ในตัวอย่างเฉพาะของคุณนั่นไม่ใช่กรณีของหลักสูตรเนื่องจากเมทริกซ์การระบุตัวตนนั้นถูกต้องและโดยทั่วไปจะสร้างได้ง่าย แต่สำหรับปัญหาอื่น ๆ นั่นอาจไม่ใช่กรณี หากวัตถุเป้าหมายมีความผิดปกติเพียงพอเพียงแค่ให้วัตถุเหล่านั้นมีขนาดใหญ่ซึ่งอาจไม่ส่งผลกระทบต่อจำนวนไบต์ของอัลกอริทึมจริง แต่จะระเบิดส่วนที่มีการเข้ารหัส
พารามิเตอร์เอาท์พุท
บ่อยครั้งที่ปัญหาเหล่านี้มาพร้อมกับพารามิเตอร์ธรรมชาติอย่างน้อยหนึ่งพารามิเตอร์เช่นขนาดของเมทริกซ์ในตัวอย่างของคุณ ถ้าเป็นเช่นนั้นการทำให้พารามิเตอร์นั้นอินพุตสามารถเพียงพอที่จะทำให้การเข้ารหัสยากเป็นไปไม่ได้หรืออย่างน้อยก็ทำไม่ได้ ในบางกรณีอาจเป็นเรื่องยากที่จะโค้ดยากวิธีแก้ปัญหาเฉพาะสำหรับค่าพารามิเตอร์ที่กำหนดซึ่งถูกค้นพบด้วยตนเองหรือผ่านการค้นหาอย่างกว้างขวาง แต่อาจไม่มีรูปแบบปิดที่ง่ายสำหรับอินสแตนซ์ของโซลูชันเหล่านี้โดยทั่วไปดังนั้นจึงไม่ใช่ เป็นไปได้ในการสร้างค่าเริ่มต้นสำหรับอินพุตโดยพลการได้อย่างง่ายดาย อีกครั้งนี่ไม่ใช่กรณีสำหรับตัวอย่างที่คุณพูดถึงเพราะ matrix matrix ทำงานได้ทุกขนาด แต่เป็นทางออกที่ดีที่สุดสำหรับปัญหาที่เกี่ยวข้องมักจะผิดปกติอย่างมากดังนั้นจึงเป็นไปไม่ได้ที่จะมีค่าเริ่มต้นโดยไม่ต้องค้นหาค่าที่ถูกต้องอยู่แล้ว คุณสามารถรวมสิ่งนี้เข้ากับขีด จำกัด เวลาเพื่อหลีกเลี่ยงการค้นหาแบบไม่บังคับสำหรับค่าเริ่มต้น
ใส่บางข้อ จำกัด เกี่ยวกับการกระจายความน่าจะเป็น
หากคุณยินดีที่จะให้การแจกแจงความน่าจะเป็นแบบไม่ จำกัดอย่างสมบูรณ์คุณสามารถวางข้อ จำกัด บางอย่างไว้ซึ่งยังคงให้อิสระแก่ผู้ตอบในการเลือกการกระจายของพวกเขา แต่สิ่งที่ทำให้การเข้ารหัสยากหรือเป็นไปไม่ได้:
- ข้อ จำกัด ที่ง่ายที่สุดที่อยู่ในใจคือต้องการความแตกต่างระหว่างความน่าจะเป็นต่ำสุดและสูงสุดสำหรับผลลัพธ์ที่เป็นไปได้ใด ๆ ที่จะต่ำกว่าเกณฑ์ที่กำหนด วิธีการกำหนดค่าตายตัวอาจมีความน่าจะเป็นเกือบเป็นศูนย์สำหรับเกือบทุกเอาต์พุตและความน่าจะเป็นใกล้เคียงกับ 1 สำหรับค่าเริ่มต้น หากคุณต้องการความแตกต่างสูงสุดที่จะต่ำกว่า 0.1 พูดจะต้องมีค่าเริ่มต้น 10 (เลือกแบบสุ่ม) เพื่อให้ตัวเลือกวิธีการ ในทำนองเดียวกันคุณอาจต้องการความน่าจะเป็นขั้นต่ำสำหรับแต่ละเอาต์พุตที่เป็นไปได้เช่น 1 / (2 * N *) โดยที่Nคือจำนวนเอาต์พุตที่เป็นไปได้
- หรือคุณสามารถกำหนดว่าจะไม่มี (โอกาส) ช่องว่างในการจัดจำหน่ายเพื่อให้มีช่วงเวลาที่มีขนาดไม่δ (ที่คุณเลือก) เช่นว่าทั้งสองน่าจะสูงขึ้นและลดอยู่ ซึ่งหมายความว่าจะไม่มีค่าผิดปกติใด ๆ ในแง่ของโอกาสซึ่งเกิดจากวิธีการเข้ารหัสที่ยาก
ปัญหาหลักของวิธีการเหล่านี้คือการให้เหตุผลที่ยากกว่าการพิสูจน์ความถูกต้องของคำตอบนั้นยากและการตรวจสอบความถูกต้องของการทดลองนั้นเป็นไปไม่ได้สำหรับพื้นที่ส่งออกขนาดใหญ่ ถึงกระนั้นพวกเขายังให้ความต้องการที่สังเกตเห็นได้โดยหลัก ๆ สำหรับโปรแกรมที่สามารถทำให้ฮาร์ดโค้ดไม่สามารถทำได้
วิธีการเหล่านี้อาจต้องมีการ จำกัด เวลาเนื่องจากวิธีหนึ่งในการเพิ่มความน่าจะเป็นของค่าที่ไม่ใช่ค่าเริ่มต้นคือพยายามค้นหา foo แบบสุ่มหลาย ๆ ครั้งก่อนที่จะกลับไปที่ค่าเริ่มต้น