อ่าน 2 นาที
อัลกอริทึมแบบกำหนดได้
ใน วิทยาการคอมพิวเตอร์ อั ลกอริทึมเชิงกำหนด (Deterministic Algorithm) คือ อัลกอริทึม ที่เมื่อได้รับอินพุตเฉพาะ จะให้ผลลัพธ์เดียวกันเสมอ...
อัลกอริทึมแบบกำหนดได้
ในวิทยาการคอมพิวเตอร์อัลกอริทึมเชิงกำหนด (Deterministic Algorithm)คืออัลกอริทึมที่เมื่อได้รับอินพุตเฉพาะ จะให้ผลลัพธ์เดียวกันเสมอ โดยที่เครื่องคอมพิวเตอร์พื้นฐานจะผ่านลำดับสถานะเดียวกันเสมอ อัลกอริทึมเชิงกำหนดเป็นอัลกอริทึมประเภทที่ได้รับการศึกษาและคุ้นเคยมากที่สุด รวมถึงเป็นหนึ่งในอัลกอริทึมที่ใช้งานได้จริงมากที่สุด เนื่องจากสามารถทำงานบนเครื่องจริงได้อย่างมีประสิทธิภาพ
ในทางทฤษฎีแล้ว อัลกอริทึมเชิงกำหนดจะคำนวณฟังก์ชันทางคณิตศาสตร์ฟังก์ชันจะมีค่าเฉพาะตัวสำหรับอินพุตใดๆ ในโดเมน ของมัน และอัลกอริทึมคือกระบวนการที่สร้างค่าเฉพาะนี้เป็นเอาต์พุต
คำจำกัดความอย่างเป็นทางการ
อัลกอริทึมแบบกำหนดได้สามารถนิยามได้ในรูปของเครื่องสถานะ : สถานะอธิบายว่าเครื่องกำลังทำอะไร ณ ช่วงเวลาใดเวลาหนึ่ง เครื่องสถานะจะเปลี่ยนจากสถานะหนึ่งไปยังอีกสถานะหนึ่งอย่างเป็นลำดับ หลังจากที่เราป้อนข้อมูลเข้าไป เครื่องจะอยู่ในสถานะเริ่มต้นหรือสถานะแรกหากเครื่องเป็นแบบกำหนดได้ นั่นหมายความว่านับจากจุดนี้เป็นต้นไป สถานะปัจจุบันจะกำหนดสถานะถัดไป เส้นทางการทำงานของเครื่องผ่านชุดสถานะต่างๆ นั้นถูกกำหนดไว้ล่วงหน้าแล้ว โปรดทราบว่าเครื่องอาจเป็นแบบกำหนดได้แต่ก็อาจไม่หยุดหรือเสร็จสิ้น และดังนั้นจึงไม่สามารถให้ผลลัพธ์ได้
ตัวอย่างของเครื่องจักรนามธรรม บางประเภท ที่เป็นแบบกำหนดได้ ได้แก่เครื่องจักรทัวริงแบบกำหนดได้และออโตมาตาจำกัดแบบกำหนดได้
อัลกอริทึมที่ไม่กำหนดผลลัพธ์แน่นอน
ปัจจัยหลายประการอาจทำให้ขั้นตอนวิธีทำงานในลักษณะที่ไม่แน่นอนหรือไม่เป็นไปตามที่คาดการณ์ได้:
- หากมีการใช้สถานะภายนอกอื่นนอกเหนือจากอินพุต เช่น อินพุตของผู้ใช้ตัวแปรส่วนกลางค่าตัวจับเวลาฮาร์ดแวร์ ค่า สุ่มหรือข้อมูลที่จัดเก็บไว้ในดิสก์
- หากระบบทำงานในลักษณะที่ไวต่อเวลา เช่น กรณีที่มีโปรเซสเซอร์หลายตัวเขียนข้อมูลลงในระบบเดียวกันพร้อมกัน ลำดับที่แน่นอนในการเขียนข้อมูลของแต่ละโปรเซสเซอร์จะมีผลต่อผลลัพธ์
- หากเกิดข้อผิดพลาดทางฮาร์ดแวร์ทำให้สถานะของอุปกรณ์เปลี่ยนแปลงไปในลักษณะที่ไม่คาดคิด
แม้ว่าโปรแกรมจริงจะไม่ค่อยเป็นไปตามหลักการกำหนดผลลัพธ์ที่แน่นอนเสมอไป แต่การที่มนุษย์และโปรแกรมอื่นๆ สามารถทำความเข้าใจโปรแกรมตามหลักการกำหนดผลลัพธ์ที่แน่นอนได้นั้นง่ายกว่า ด้วยเหตุนี้ภาษาโปรแกรม ส่วนใหญ่ โดยเฉพาะอย่างยิ่ง ภาษา โปรแกรมเชิงฟังก์ชันจึงพยายามป้องกันไม่ให้เหตุการณ์ข้างต้นเกิดขึ้น ยกเว้นภายใต้เงื่อนไขที่ควบคุมได้
การแพร่หลายของโปรเซสเซอร์มัลติคอร์ส่งผลให้เกิดความสนใจอย่างมากในเรื่องความแน่นอนในการเขียนโปรแกรมแบบขนาน และความท้าทายของความไม่แน่นอนได้รับการบันทึกไว้อย่างดี[ 1 ] [ 2 ]มีการเสนอเครื่องมือหลายอย่างเพื่อช่วยจัดการกับความท้าทายเหล่านี้[ 3 ] [ 4 ] [ 5 ] [ 6 ]เพื่อจัดการกับภาวะ หยุดชะงักและสภาวะการแข่งขัน
ข้อเสียของลัทธิกำหนดนิยม
ในบางกรณี การที่โปรแกรมแสดงพฤติกรรมที่ไม่แน่นอนนั้นเป็นประโยชน์ ตัวอย่างเช่นพฤติกรรมของโปรแกรมสับไพ่ที่ใช้ในเกมแบล็กแจ็ก ไม่ควรคาดเดาได้โดยผู้เล่น แม้ว่ารหัสต้นฉบับของโปรแกรมจะมองเห็นได้ก็ตาม การใช้ ตัวสร้างเลขสุ่มเทียมมักไม่เพียงพอที่จะรับประกันว่าผู้เล่นไม่สามารถคาดเดาผลลัพธ์ของการสับไพ่ได้ นักพนันที่ฉลาดอาจเดาตัวเลขที่ตัวสร้างจะเลือกได้อย่างแม่นยำ และกำหนดเนื้อหาทั้งหมดของสำรับล่วงหน้า ทำให้เขาสามารถโกงได้ ตัวอย่างเช่น กลุ่มความปลอดภัยซอฟต์แวร์ที่ Reliable Software Technologies สามารถทำเช่นนี้ได้สำหรับการใช้งาน Texas Hold 'em Poker ที่จัดจำหน่ายโดย ASF Software, Inc. ทำให้พวกเขาสามารถคาดเดาผลลัพธ์ของมือล่วงหน้าได้อย่างสม่ำเสมอ[ 7 ]ปัญหาเหล่านี้สามารถหลีกเลี่ยงได้บางส่วนโดยการใช้ตัวสร้างเลขสุ่มเทียมที่ปลอดภัยทางด้านการเข้ารหัสแต่ยังคงจำเป็นต้องใช้เมล็ดพันธุ์สุ่ม ที่ไม่สามารถคาดเดาได้เพื่อเริ่มต้นตัวสร้าง เพื่อจุดประสงค์นี้ จำเป็นต้องมีแหล่งที่มาของความไม่แน่นอน เช่น แหล่งที่มาที่ได้จากเครื่องกำเนิดเลขสุ่มแบบฮาร์ดแวร์
โปรดทราบว่า คำตอบเชิงลบสำหรับปัญหา P=NPไม่ได้หมายความว่าโปรแกรมที่มีผลลัพธ์แบบไม่แน่นอนจะมีประสิทธิภาพมากกว่าโปรแกรมที่มีผลลัพธ์แบบแน่นอนในทางทฤษฎี คลาสความซับซ้อนNP (ความซับซ้อน)สามารถกำหนดได้โดยไม่ต้องอ้างอิงถึงความไม่แน่นอนโดยใช้คำจำกัดความตามตัวตรวจสอบ
หมวดหมู่ความแน่นอนในภาษา
ปรอท
ภาษา การเขียนโปรแกรมเชิงฟังก์ชัน ตรรกะปรอทสร้างหมวดหมู่ความแน่นอนที่แตกต่างกันสำหรับโหมดภาคแสดงตามที่อธิบายไว้ในเอกสารอ้างอิง[ 8 ] [ 9 ]
ฮัสเคลล์
Haskellมีกลไกหลายอย่างให้เลือกใช้:
- ความไม่แน่นอนหรือแนวคิดเรื่องความล้มเหลว
- ประเภท " อาจจะ"และ"อย่างใดอย่างหนึ่ง"นั้นรวมถึงแนวคิดเรื่องความสำเร็จในผลลัพธ์ด้วย
- เมธอด`fail`ของคลาส `Monad` สามารถใช้เพื่อส่งสัญญาณความล้มเหลวในรูปแบบของข้อยกเว้นได้
- ตัวแปลง โมนาด Maybe และโมนาด MaybeT จัดเตรียมการคำนวณที่ล้มเหลว (หยุดลำดับการคำนวณและส่งคืน Nothing) [ 10 ]
- ลัทธิเนเทอร์มินิซึม/ลัทธิไม่กำหนดที่มีหลายทางออก
ตระกูล ML และภาษาที่สืบเนื่องมาจาก ML
ดังที่เห็นได้ในStandard ML , OCamlและScala
- ประเภทของ ตัวเลือกนี้รวมถึงแนวคิดเรื่องความสำเร็จด้วย
ชวา
ในภาษา Javaค่า อ้างอิงที่ เป็น nullอาจแสดงถึงผลลัพธ์ที่ไม่สำเร็จ (อยู่นอกขอบเขต)
ดูเพิ่มเติม
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ อัลกอริทึมแบบกำหนดได้
ใน วิทยาการคอมพิวเตอร์ อั ลกอริทึมเชิงกำหนด (Deterministic Algorithm) คือ อัลกอริทึม ที่เมื่อได้รับอินพุตเฉพาะ จะให้ผลลัพธ์เดียวกันเสมอ...
คำจำกัดความอย่างเป็นทางการ
อัลกอริทึมแบบกำหนดได้สามารถนิยามได้ในรูปของ เครื่องสถานะ : สถานะ อธิบายว่าเครื่องกำลังทำอะไร ณ ช่วงเวลาใดเวลาหนึ่ง เครื่องสถานะจะเปลี่ยนจากสถานะหนึ่งไปยังอีกสถานะหนึ่งอย่างเป็นลำดับ หลังจากที่เราป้อนข้อมูลเข้าไป เครื่องจะอยู่ใน สถานะเริ่มต้น หรือ สถานะแรก...
อัลกอริทึมที่ไม่กำหนดผลลัพธ์แน่นอน
ปัจจัยหลายประการอาจทำให้ขั้นตอนวิธีทำงานในลักษณะที่ไม่แน่นอนหรือไม่เป็นไปตามที่คาดการณ์ได้:
ข้อเสียของลัทธิกำหนดนิยม
ในบางกรณี การที่โปรแกรมแสดงพฤติกรรมที่ไม่แน่นอนนั้นเป็นประโยชน์ ตัวอย่างเช่นพฤติกรรมของโปรแกรมสับไพ่ที่ใช้ในเกม แบล็กแจ็ก ไม่ควรคาดเดาได้โดยผู้เล่น แม้ว่ารหัสต้นฉบับของโปรแกรมจะมองเห็นได้ก็ตาม การใช้ ตัวสร้างเลขสุ่มเทียม...