ขั้นตอนวิธีโรห์ของพอลลาร์ด

ขั้นตอนวิธีโรห์ของพอลลาร์ด (อังกฤษ: Pollard's rho algorithm) เป็นขั้นตอนวิธีแบบสุ่มที่ใช้หาตัวประกอบของจำนวนประกอบที่มีค่ามาก โดยอาศัยคุณสมบัติของการหาร เพื่อให้หาตัวประกอบของเลขจำนวนนั้น ๆ ได้เร็ว ขั้นตอนวิธีนี้ จอห์น พอลลาร์ด (John Pollard) นำเสนอขึ้นในปี 1975 และต่อมา ริชาร์ด เบรนท์ (Richard Brent) ปรับปรุงในปี 1980

แนวความคิดหลัก

ขั้นตอนวิธีโรห์ของพอลลาร์ดมีพื้นฐานมาจาก ขั้นตอนวิธีการตรวจสอบการเกิดวงวนของฟลอยด์ (en:Floyd's cycle-finding algorithm) และ จากการสังเกตถึงคุณสมบัติของตัวเลขที่จะมีคุณสมบัติหนึ่งๆเหมือนกัน ซึ่งคล้ายกับในปัญหาวันเกิด ( en:Birthday problem, en:Birthday paradox ) นั่นคือ หากต้องการหาตัวเลข 2 ตัว x และ y ที่มีคุณสมบัติหารด้วยตัวเลข p แล้วมีเศษเหลือเท่ากัน หรือ x สมภาคกับ y มอดุโล p ( x congruent y modulo p ) จะมีความน่าจะเป็นเท่ากับ 0.5 หลังจากสุ่มตัวเลขมาแล้ว 1.177\sqrt{p}  ตัว หากให้ p เป็น ตัวประกอบหนึ่งของ n เมื่อ n คือตัวเลขที่ต้องการหาตัวประกอบ จะได้ว่า p \le \gcd \left ( x-y,n \right) \le n เนื่องจาก p หาร x-y และ n ลงตัว
ขั้นตอนวิธีโรห์ จะใช้ f ฟังก์ชันมอดุโล n สำหรับการสร้างลำดับตัวเลขสุ่มเทียม (en:pseudo-random sequence) โดยลำดับทั้งสองจะมีความเร็วในการเลื่อนลำดับต่างกัน 2 เท่า กล่าวคือ ลำดับหนึ่งจะเลื่อนไป 2 ขั้น ในขณะที่อีกลำดับ จะเลื่อนไปเพียง 1 ขั้นเท่านั้น หากให้ x และ y เป็นตัวแทนสำหรับตัวเลขในลำดับทั้ง 2 ในขณะหนึ่ง จะทำการหาค่า ห.ร.ม. ( GCD ) ของ |x-y| และ n โดยถ้าหาก ห.ร.ม. มีค่า

- เท่ากับ n จะทำให้ขั้นตอนวิธีนี้จบการทำงานลงด้วยความผิดพลาด เนื่องจาก ห.ร.ม. จะมีค่าเท่ากับ n ได้ เมื่อ x = y ซึ่งจาก ขั้นตอนวิธีการตรวจสอบการเกิดวงวนของฟลอยด์ จะได้ว่า ลำดับที่สร้างได้พบกับวงวน และการทำงานในครั้งต่อๆไปก็จะเป็นการทำงานซ้ำเดิมกับงานที่เคยทำไปแล้ว

- เท่ากับ 1 แสดงว่า ยังหาตัวประกอบไม่เจอ ให้กลับไปเลือก x และ y จากลำดับตัวเลขสุ่มเทียมตัวต่อไป โดย xใหม่ = f(xเดิม) และ yใหม่ = f(f(yเดิม)) แล้วกลับไปทำแบบเดิมอีกครั้งหนึ่ง

- เท่ากับ ค่าอื่นๆ แสดงว่า ค่าที่ได้นั้น คือตัวประกอบตัวหนึ่งของ n นั่นเอง

การปรับปรุง

ในปี 1980 ริชาร์ด เบรนท์ ได้ตีพิมพ์ผลงานที่เร็วกว่า เขาได้ใช้แนวความคิดหลักเช่นเดียวกับ พอลลาร์ด แต่แตกต่างกันในเรื่องของขั้นตอนวิธีการตรวจสอบการเกิดวงวน โดยได้ใช้ วิธีการตรวจสอบการเกิดวงวนของเบรนท์ (Brent's cycle finding method) แทนขั้นตอนวิธีการตรวจสอบการเกิดวงวนของฟลอยด์
การเพิ่มประสิทธิภาพในครั้งต่อมาถูกกระทำโดย พอลลาร์ด และเบรนท์ ทั้ง 2 ได้พบว่า ถ้า \gcd (a,n) >1 แล้ว \gcd (ab,n) >1 สำหรับทุกๆจำนวนเต็มบวก b ใดๆ กล่าวโดยละเอียดคือ แทนที่จะคำนวณหา \gcd (|x-y|,n)  ทุกๆขั้น, จะทำการกำหนดค่า z เป็นผลคูณของ พจน์ |x-y| จำนวน 100 พจน์ที่ติดกัน มอดุโล n และคำนวณหา \gcd (z,n)  เพียงหนึ่งครั้ง โดยความเร็วที่เพิ่มขึ้นนั้นได้จากการเปลี่ยน การหา ห.ร.ม. จำนวน 100 ครั้ง เป็นการ คูณ มอดุโล n จำนวน 99 ครั้ง และ การหา ห.ร.ม 1 ครั้ง แต่ในบางครั้ง วิธีนี้อาจจะทำให้ขั้นตอนวิธีเกิดข้อผิดพลาดโดยการใช้ตัวประกอบที่ซ้ำกัน ตัวอย่างเช่น เมื่อ n เป็นจำนวนเต็มกำลัง 2 แต่ก็สามารถจะแก้ไข้ได้โดยย้อนกลับไปที่จุดที่ \gcd (z,n) =1 แล้วใช้ ขั้นตอนวิธีโรห์ แบบปกติจากจุดนั้น

อัตราการเติบโต

ขั้นตอนวิธีแบบสุ่มนี้ต้องแลกเปลี่ยนระหว่างเวลาที่ใช้ในการค้นหา กับโอกาสที่จะค้นพบตัวประกอบ นั่นคือหากต้องการให้โอกาสที่จะค้นพบตัวประกอบนั้นมีค่าสูง ก็จะต้องใช้เวลามากขึ้น ถ้าหาก n เป็นผลคูณของจำนวนเฉพาะที่มีความยาวเท่ากัน แต่มีค่าแตกต่างกัน ระยะเวลาที่ใช้สำหรับขั้นตอนวิธีนี้ จะต้องสุ่มตัวเลขมา O (n1/4 polylog (n)) ครั้ง ถึงจะมีความน่าจะเป็นในการค้นพบตัวประกอบเท่ากับ 0.5 สำหรับพจน์ n1/4 นั้นก็มาจากที่ n เป็นผลคูณของจำนวนเฉพาะที่มีความยาวเท่ากัน ดังนั้น n1/2 ก็จะได้ค่าที่ใกล้เคียงกับจำนวนเฉพาะที่เป็นตัวประกอบของ n และจากที่ทราบว่า ความน่าจะเป็นในการพบตัวประกอบเท่ากับ 0.5 เมื่อสุ่มตัวเลขมาแล้ว 1.177\sqrt{p}  ตัว เมื่อ p คือตัวประกอบของ n ดังนั้นหากแทนค่า p ด้วย n1/2 ก็จะได้พจน์ n1/4 (หมายเหตุ: การวิเคราะห์นี้เป็นเพียงการประมาณโดยคร่าวๆ สำหรับการวิเคราะห์อย่างละเอียด ยังรอให้พิสูจน์อยู่)

สรุป

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