ฉันจะค้นหาเวลาทำงานตามความเร็วของอัลกอริทึมและความเร็วของคอมพิวเตอร์ได้อย่างไร

ขณะนี้ฉันกำลังทำงานที่ได้รับมอบหมายซึ่งเกี่ยวข้องกับ Big-O และเวลาทำงาน ฉันมีคำถามหนึ่งข้อนี้ที่ดูเหมือนจะง่ายมาก แต่ฉันไม่แน่ใจว่าฉันทำถูกต้องหรือไม่ ปัญหาที่เหลือค่อนข้างยาก และฉันรู้สึกเหมือนกำลังมองข้ามบางสิ่งบางอย่างที่นี่

อันดับแรก คุณมีสิ่งเหล่านี้: อัลกอริทึม A ซึ่งมีเวลาในการทำงาน 50n^3 คอมพิวเตอร์ A ซึ่งมีความเร็ว 1 มิลลิวินาทีต่อการทำงาน คอมพิวเตอร์ B ซึ่งมีความเร็ว 2 มิลลิวินาทีต่อการทำงาน ตัวอย่างขนาด 300.

ฉันต้องการค้นหาว่าอัลกอริทึม A ใช้เวลานานเท่าใดในการแก้ไขอินสแตนซ์นี้บนคอมพิวเตอร์ A และใช้เวลานานเท่าใดบนคอมพิวเตอร์ B

สิ่งที่ผมอยากทำคือต่ำกว่า 300 ใน n คุณจะได้ 50*(300^2) = 4500000

จากนั้นให้คูณ 1 สำหรับคอมพิวเตอร์เครื่องแรก และ 2 สำหรับคอมพิวเตอร์เครื่องที่สอง

สิ่งนี้รู้สึกแปลกสำหรับฉัน เพราะมันบอกว่า "เวลาทำงาน" คือ 50n^3 ไม่ใช่ "จำนวนการดำเนินการคือ 50n^3" ดังนั้นฉันจึงรู้สึกว่าฉันกำลังคูณครั้งต่อครั้ง และจะ ลงเอยด้วยหน่วยมิลลิวินาทียกกำลังสอง ซึ่งดูเหมือนไม่ถูกต้องเลย

ฉันต้องการทราบว่าฉันพูดถูกหรือไม่ และหากไม่จริง คำถามหมายถึงอะไร


person Zachary Wright    schedule 19.10.2008    source แหล่งที่มา
comment
แค่อยากชี้ให้เห็นว่าคุณเพิ่มจาก 50n^3 ในคำอธิบาย ไปเป็น 50n^2 ในการคำนวณของคุณ ไม่จำเป็นต้องพูดว่า นั่นสร้างความแตกต่างอย่างมากในผลลัพธ์ที่คุณจะได้รับ   -  person Mark Bessey    schedule 23.10.2008


คำตอบ (3)


มันคงไม่สมเหตุสมผลถ้าคุณมี O(n^3) แต่คุณไม่ได้ใช้สัญลักษณ์ O ใหญ่ในตัวอย่างของคุณ เช่น. หากคุณมี O(n^3) คุณจะรู้ความซับซ้อนของอัลกอริทึมของคุณ แต่คุณจะไม่ทราบจำนวนการดำเนินการที่แน่นอนตามที่คุณพูด

แต่ดูเหมือนว่าคุณจะได้รับการดำเนินการตามจำนวนที่แน่นอน (แม้จะรู้ว่าไม่ได้ระบุไว้อย่างชัดเจน) ดังนั้นการแทนที่ด้วย n ก็สมเหตุสมผล

สัญลักษณ์ Big O อธิบายว่าขนาดของอินพุตจะส่งผลต่อเวลาทำงานหรือการใช้หน่วยความจำของคุณอย่างไร แต่ด้วย Big O คุณไม่สามารถอนุมานเวลาการทำงานที่แน่นอนได้แม้จะพิจารณาจากความเร็วของการดำเนินการแต่ละครั้งก็ตาม

การอธิบายว่าเหตุใดคำตอบของคุณจึงดูเรียบง่าย (ดังที่ได้อธิบายไว้ข้างต้น) ก็เป็นวิธีที่ปลอดภัยเช่นกัน แต่ฉันแน่ใจว่าถึงแม้ไม่มีมัน คุณก็จะได้คะแนนสำหรับคำถามนี้

person Brian R. Bondy    schedule 19.10.2008

นอกเหนือจากความไร้จุดหมายในการหาว่าบางสิ่งจะใช้เวลานานแค่ไหนในคอมพิวเตอร์สมัยใหม่ส่วนใหญ่ แม้ว่ามันอาจจะมีความหมาย บางอย่าง ในระบบฝังตัว แต่มันก็ดูถูกต้องสำหรับฉันในแบบที่คุณทำ มัน.

หากอัลกอริทึมต้องการการดำเนินการ 50n^3 เพื่อทำบางสิ่งบางอย่างให้สำเร็จ โดยที่ n คือจำนวนองค์ประกอบที่ต้องประมวลผล การแทนที่ 300 ด้วย n จะทำให้คุณได้รับจำนวนการดำเนินการที่จะดำเนินการ ไม่ใช่หน่วยเวลา

ดังนั้นให้คูณเวลาต่อการผ่าตัด แล้วคุณจะได้เวลาที่ต้องการ

ดูถูกฉันเลย

person Lasse V. Karlsen    schedule 19.10.2008

ข้อมูล 50*n^3 ของคุณเรียกว่า "เวลาทำงาน" แต่นั่นเป็นเพราะแบบจำลองที่ใช้สำหรับการประเมินความเร็วถือว่าเครื่องมีการทำงานพื้นฐานหลายอย่าง โดยแต่ละการดำเนินการใช้เวลา 1 หน่วย

ในกรณีของคุณ การรันอัลกอริทึมจะใช้เวลา 50*500^3 หน่วยเวลา บนคอมพิวเตอร์ A แต่ละหน่วยเวลาคือ 1ms และบนคอมพิวเตอร์ B 2ms

หวังว่านี่จะทำให้หน่วยต่างๆ เข้าใจได้
อาซาฟ

person Asaf R    schedule 19.10.2008