มันจะขึ้นอยู่กับบริบท
"การแก้ไขข้อบกพร่องของประสิทธิภาพการทำงานรันไทม์กำลังสอง" เป็นสิ่งที่ฉันเห็น อย่างไรก็ตามไม่ว่าจะเป็นการแก้ไข (การเปลี่ยนรหัส) นั้นขึ้นอยู่กับบริบทหรือไม่
โปรดทราบว่าฐานข้อมูลมีเครื่องมือมากมายเพื่อปรับปรุงความซับซ้อนของเวลา ตัวอย่างเช่นในการรับผลลัพธ์ N อันดับสูงสุดจากฐานข้อมูลให้พูดอย่างนั้น เมื่อแปลง kludge ที่ไม่มีประสิทธิภาพเป็นการโทรที่มีประสิทธิภาพสูงสุดคำอธิบายที่ดูเหมือนจะไม่จำเป็น
เหตุผลที่ฉันพิจารณาอัลกอริธึมที่มีรันไทม์กำลังสองเพื่อรับการตรวจทานโค้ด (การสนทนา) ไม่มากนักเพราะมันช้า (ช้าคือสัมพัทธ์การหากำลังสองกำลังสองเร็วเมื่อเปรียบเทียบกับเอ็กซ์โปแนนเชียล) แต่เป็นเพราะสัญชาตญาณของมนุษย์ (เช่นลูกค้าของคุณหรือ เพื่อนโปรแกรมเมอร์) รู้สึกอึดอัดกับการทำงานของซอฟต์แวร์ที่เบี่ยงเบนไปจากการใช้งานเชิงเส้นมากเกินไปเนื่องจากการผสมผสานความคาดหวังจากชีวิตประจำวัน
ข้อร้องเรียนจากลูกค้าจำนวนมากเกี่ยวกับประสิทธิภาพของซอฟต์แวร์แบ่งออกเป็นสองประเภท:
ระบบทั้งหมด (ซอฟต์แวร์และฮาร์ดแวร์) ถูกระบุตามการใช้งานโดยประมาณ เมื่อสัปดาห์ที่แล้วทุกอย่างทำงานได้ดีฟังก์ชั่นบางอย่างใช้เวลาน้อยกว่า 5 วินาที ในสัปดาห์นี้หลังจากติดตั้งการปรับปรุงฟังก์ชั่นเดียวกันนี้ใช้เวลามากกว่า 1 นาที
- นี่เป็นการเปรียบเทียบกับการเปรียบเทียบประสิทธิภาพก่อนหน้านี้ ลูกค้าถือประสิทธิภาพการทำงานในอนาคตไว้ที่ปทัฏฐานแบบสัมบูรณ์ของมาตราส่วนเวลาของมนุษย์ (จากวินาทีถึงหนึ่งนาที)
ฉันส่งงาน 100 งานให้กับระบบ เหตุใดจึงต้องใช้เวลาในการประมวลผล 400x เทียบกับเวลาที่ใช้สำหรับงานเดียว
- ลูกค้าคาดว่าเวลาในการประมวลผลจะเป็นแบบเชิงเส้น ในความเป็นจริงลูกค้าไม่สามารถเข้าใจหรือยอมรับว่ามีงานที่ช้ากว่าเชิงเส้น
ด้วยเหตุผลนี้ลูกค้าจะถือว่าเวลาดำเนินการเป็นข้อผิดพลาดหากทั้งสองเป็นจริง:
- ช้ากว่าเชิงเส้น
- สามารถสังเกตได้ (เช่นอยู่ในช่วงเวลาของมนุษย์ (นานกว่าวินาทีหรือนาที) ตามขนาดงานทั่วไป)
ข้อโต้แย้งที่ถูกต้องตามกฎหมายที่อธิบายว่าอัลกอริทึมรันไทม์กำลังสองไม่ก่อให้เกิดปัญหา (เช่นไม่สมควรเปลี่ยนรหัส):
- ขนาดของงานที่จัดการโดยฟังก์ชั่นรันไทม์กำลังสองนี้ค่อนข้าง จำกัด
- เมื่อกำหนดช่วงขนาดทั่วไปเวลาดำเนินการตามจริง (สัมบูรณ์) ยังคงมีขนาดเล็กพอที่จะตัดออกได้
- หากผู้ใช้พยายามส่งงานที่มีขนาดใหญ่พอที่จะสังเกตเห็นได้จริงผู้ใช้จะได้รับคำเตือนข้อความเกี่ยวกับเวลาทำงานที่ยาวนาน
- ผู้ใช้ระบบเป็นผู้เชี่ยวชาญทั้งหมดดังนั้นพวกเขาจึงรู้ว่ากำลังทำอะไรอยู่ ตัวอย่างเช่นผู้ใช้ API ควรอ่านงานพิมพ์ละเอียดในเอกสาร API
อัลกอริธึมที่มีประโยชน์มากมายสำหรับการพัฒนาแอปพลิเคชันทั่วไปโดยทั่วไปแล้วจะช้ากว่าแบบเส้นตรง (ส่วนใหญ่ O (N log N) เช่นเดียวกับการเรียงลำดับ) ดังนั้นในความเป็นจริงซอฟต์แวร์ขนาดใหญ่จะพยายามแก้ไขด้วยการคัดเฉพาะส่วนที่เกี่ยวข้อง ข้อมูลหรือใช้เทคนิคการกรองฮิสโตแกรม (สถิติ) ซึ่งให้ผลที่คล้ายกัน
สิ่งนี้ใช้กับลูกค้าซอฟต์แวร์ แต่หากคุณพิจารณาว่าผู้ใช้ห้องสมุดซอฟต์แวร์หรือฟังก์ชั่น API เป็น "ลูกค้า" เช่นกันคำตอบก็จะยังคงมีผลอยู่