ใช่และไม่. ขึ้นอยู่กับข้อ จำกัด ที่คุณต้องการและเงื่อนไขที่จำเป็นในการเรียกใช้อัลกอริทึมของคุณ
เป็นการดีที่อัลกอริทึมเป็นสูตรนามธรรมที่กำหนดวิธีการทำอะไรทีละขั้นตอน อัลกอริทึมถูกกำหนดเช่นนั้นโดยมีเป้าหมายของการทำซ้ำและอัตโนมัติในภายหลัง อัลกอริธึมมีต้นกำเนิดจากแลมบ์ดา - คำนวณดังนั้นคุณสามารถเห็นได้อย่างง่ายดายว่าทำไมมันถูกสร้างขึ้นมาในลักษณะนี้ คำจำกัดความนี้เป็นคำสั่งปกติ แต่อัลกอริธึมที่ทันสมัยสามารถไม่ใช่แบบลำดับขั้น (ไม่ใช่แบบทีละขั้นตอนเช่นอัลกอริธึมที่พร้อมกันหรือตรรกะแบบที่ใช้การรวม), ไม่ใช่เชิงเส้น (อัลกอริธึม Stochastic) หรือเพียงแค่แปลก ๆ อัลกอริทึม) แต่ฉันจะผ่านมันไป
ดังนั้นหลักการควรเป็นนามธรรมที่เป็นไปได้โดยไม่ต้องลงบัญชีฮาร์ดแวร์ใด ๆ
แต่เช่นเดียวกับระบบใด ๆ คุณต้องกำหนดสัจพจน์บางอย่างไม่เพียง แต่จะได้รับระบบที่สอดคล้องกัน แต่ยังเพื่อให้ได้เวลาด้วย ยกตัวอย่างเช่นอัลกอริธึมส่วนใหญ่เข้าใจอย่างน้อยที่สุดโดยปริยายว่ามันถูกกำหนดไว้บนเครื่อง Von-Neumann หากไม่ใช่กรณีดังกล่าวพวกเขาจะต้องกำหนดแต่ละส่วนของระบบที่พวกเขาต้องดำเนินการอย่างชัดเจน (เนื่องจากต้องทำซ้ำสูตรนี้เป็นเงื่อนไขเบื้องต้น) นอกจากนี้อัลกอริธึมมักอาศัยคำสั่งทั่วไปเช่น write () โดยไม่ต้องกำหนดอย่างสมบูรณ์
เหตุผลที่ว่าทำไมขั้นตอนวิธีการจะไม่ให้นามธรรมจากสถาปัตยกรรมฮาร์ดแวร์อีกคือเมื่อคุณต้องเป็นไปตามข้อ จำกัด บางอย่าง
สมมติว่าคุณกำลังทำงานกับระบบฝังตัวอยู่แล้วคุณอาจไม่สามารถพึ่งพาทรัพยากรที่มีอยู่บนเวิร์กสเตชันจำนวนเดียวกันได้ หนึ่งในทรัพยากรที่ถูก จำกัด มากที่สุดคือหน่วยความจำ อย่างไรก็ตามอัลกอริทึมส่วนใหญ่มักจะปรับความซับซ้อนของเวลา (ความเร็วในการประมวลผลบน CPU) ไม่ใช่ความซับซ้อนของหน่วยความจำ (จำนวนหน่วยความจำที่จำเป็นสำหรับการทำงานกับข้อมูล) สำหรับระบบเหล่านี้อัลกอริธึมที่เหมาะสมที่สุดของหน่วยความจำได้รับการคิดค้นขึ้นมาโดยที่อัลกอริธึมที่ไม่เหมาะสมของหน่วยความจำจะล้มเหลวหรือทำงานช้าลงมาก ในความเป็นจริงระบบฝังตัวไม่ใช่เป้าหมายเดียวของอัลกอริธึมที่มีประสิทธิภาพของหน่วยความจำตัวอย่างเช่นมีอัลกอริธึมที่ลืมแคชซึ่งปรับการประมวลผลเพื่อใช้แคช CPU อย่างมีประสิทธิภาพ อีกตัวอย่างหนึ่ง: อัลกอริทึมการเรียนรู้ของเครื่องสำหรับข้อมูลขนาดใหญ่ได้รับการปรับแต่งให้เหมาะสมการเรียนรู้ที่เพิ่มขึ้นหรือการคำนวณนอกระบบเพื่อประมวลผลข้อมูลจำนวนมากที่ใหญ่กว่าหน่วยความจำที่มีอยู่ในคอมพิวเตอร์เครื่องใดก็ได้ ฯลฯ
นอกจากนี้ยังมีอัลกอริทึมที่ไม่ปรับแต่งส่วนเฉพาะของคอมพิวเตอร์ แต่มาตรฐานที่ขึ้นอยู่กับสถาปัตยกรรมฮาร์ดแวร์ ตัวอย่างเช่นข้อมูลตัวเลขที่ต้องการความแม่นยำจะถูกเก็บไว้ใน float หรือ double ซึ่ง จำกัด โดยธรรมชาติเนื่องจากข้อ จำกัด ของฮาร์ดแวร์ ปัญหาก็คือการคำนวณที่ซับซ้อนสามารถนำไปสู่การปัดเศษและยิ่งคุณคำนวณจำนวนที่ปัดเศษได้มากเท่าไหร่คุณก็ยิ่งเลื่อนลงได้มากเท่านั้น นี้เรียกว่าการแทรกแซงของภัยพิบัติ บางแอปพลิเคชั่นต้องการความแม่นยำที่สำคัญแม้ในราคาที่ซับซ้อนที่สุด สำหรับแอพพลิเคชั่นประเภทนี้อัลกอริทึมที่ปรับการคำนวณให้เหมาะสมเพื่อลดหรือขจัดสัญญาณรบกวนที่เกิดจากภัยพิบัติ
ดังนั้นการออกแบบอัลกอริทึมอาจเป็นการแลกเปลี่ยนระหว่างสิ่งที่เป็นนามธรรมและข้อ จำกัด
ในที่สุดเราสามารถพูดได้ว่าอัลกอริทึมเป็นนามธรรมเป็นเป้าหมายของมันและเป็นความต้องการเบื้องต้น (สถาปัตยกรรม) ของมัน ยิ่งอัลกอริธึมเป้าหมายของคุณเฉพาะเจาะจงมากเท่าไหร่มันก็ยิ่งต้องพึ่งพาสถาปัตยกรรมฮาร์ดแวร์มากขึ้นเท่านั้น
คำค้นหาที่เกี่ยวข้องที่คุณอาจสนใจ: