ฉันแก้ปัญหามากมายโดยส่วนใหญ่มาจาก Top Coder ฉันจะได้คำตอบสำหรับหลาย ๆ คน แต่ส่วนใหญ่ฉันจะได้คำตอบที่ไม่มีประสิทธิภาพ
ในการใช้งานจริง - มันสำคัญหรือไม่ที่ทางออกของปัญหานั้นมีประสิทธิภาพ? ถ้าเป็นเช่นนั้นฉันจะปรับปรุงได้อย่างไร
ฉันแก้ปัญหามากมายโดยส่วนใหญ่มาจาก Top Coder ฉันจะได้คำตอบสำหรับหลาย ๆ คน แต่ส่วนใหญ่ฉันจะได้คำตอบที่ไม่มีประสิทธิภาพ
ในการใช้งานจริง - มันสำคัญหรือไม่ที่ทางออกของปัญหานั้นมีประสิทธิภาพ? ถ้าเป็นเช่นนั้นฉันจะปรับปรุงได้อย่างไร
คำตอบ:
วิธีการแก้ปัญหาที่ดีที่สุดคือคนที่ (ในลำดับความสำคัญที่เพิ่มขึ้น) มีประสิทธิภาพในการบำรุงรักษาและการดำเนินการเสร็จแล้ว
^^^ นั่นคือสิ่งเดียวที่คุณต้องการจากคำตอบนี้ ^^^
ประสิทธิภาพเป็นสิ่งสำคัญ อาจจะน้อยกว่าที่เคยเป็นเนื่องจากความอุดมสมบูรณ์ของฮาร์ดแวร์ของเรา แต่ผลการดำเนินงานเป็นสารคดี ในการประกวดประสิทธิภาพมีความสำคัญอย่างชัดเจน คุณควรรู้วิธีการเขียนโค้ดที่มีประสิทธิภาพ ที่สำคัญคุณควรทราบวิธีปฏิบัติที่ดีที่สุดที่จะให้รหัสที่มีประสิทธิภาพและมีประสิทธิภาพที่ดีโดยไม่ต้องเสียสละในเวลาที่เหมาะสม นี่คือที่ที่ความลึกของประสบการณ์กับแพลตฟอร์มและภาษาให้ผลตอบแทนมากมาย
ที่สำคัญกว่านั้น (ใน 95% ของคดี) กำลังมีวิธีแก้ปัญหาที่เสร็จสิ้นและบำรุงรักษาได้ หากไม่มีผลิตภัณฑ์สำเร็จรูปมันไม่สำคัญว่าโซลูชันจะมีประสิทธิภาพหรือบำรุงรักษาได้เพียงใด หากคุณใช้เวลาในการติดตามและแก้ไขข้อผิดพลาดหรือเพิ่มคุณสมบัติใหม่ให้กับคุณมันไม่สำคัญว่าโซลูชันจะมีประสิทธิภาพเพียงใด แต่ประสิทธิภาพและประสิทธิภาพมีความสำคัญอย่างแน่นอนไม่ว่าใครจะพูดอะไร
ฉันเห็นด้วยกับ Mike Cellini สิ่งหนึ่งที่ฉันเพิ่มคือ
บางสิ่งบางอย่าง "มีประสิทธิภาพเพียงพอ" หรือไม่? ตัวอย่างเช่นจากมุมมองของผู้ใช้ไม่มีความแตกต่างระหว่างฟังก์ชั่นที่เสร็จสมบูรณ์ใน 0.00001 วินาทีหรือหนึ่งที่เสร็จสมบูรณ์ใน 0.1 วินาทีแม้ว่าจะมีประสิทธิภาพมากกว่าอีก ฟังก์ชั่นที่เสร็จสมบูรณ์ภายใน 10 นาทีนั้นไม่แตกต่างกันมากนัก (สำหรับผู้ใช้) กับฟังก์ชันที่ทำใน 12 นาที ในทั้งสองกรณีผู้ใช้จะได้รับกาแฟหนึ่งแก้วหรือทำงานอื่นต่อ
ฉันได้เห็นประสิทธิภาพในฐานะ "ผู้ใช้ที่มีประสิทธิภาพ" ไม่ใช่อัลกอริทึมที่มีประสิทธิภาพ
โดยทั่วไปการแก้ปัญหาที่สำคัญที่สุดคือการแก้ปัญหาที่มีอยู่จริงและใช้ได้จริงสำหรับเคสที่มีอยู่สำหรับปัญหาของคุณ ในคำอื่น ๆ ให้หลีกเลี่ยงการปรับให้เหมาะสมก่อนเวลาจนกว่าคุณจะรู้ว่าคุณมีรหัสที่ไม่มีประสิทธิภาพหรือรหัสที่มีประสิทธิภาพซึ่งต้องเร็วขึ้น
นอกจากนี้อย่าลืมว่าทางออกที่ดีที่สุดสำหรับการสมัครของคุณอาจไม่ใช่วิธีแก้ปัญหาทั่วไป กรณีและจุดสองสามปีหลังอาจารย์ให้ชั้นเรียนของเรามีปัญหาซึ่งเราต้องพิมพ์ตัวเลข 10 ตัวแรกของประเภทที่กำหนด (ขออภัยหน่วยความจำของฉันล้มเหลวฉันเป็นประเภท แต่มันเป็นหนึ่งในจำนวนที่ผิดปกติมากขึ้น คลาส) และเราได้รับการทดสอบเพื่อตรวจสอบเพื่อให้แน่ใจว่าหมายเลขนั้นเป็นประเภทที่กำหนด นี่คือขอบเขตของปัญหาที่เราได้รับและเราก็บอกว่ามันเป็นเพราะในวันถัดไปด้วยโซลูชั่นที่มีประสิทธิภาพที่สุดที่ได้รับเครดิตเต็ม การบรรยายต่อไปนี้อาจารย์สรุปผล:
ทางออกสุดท้ายได้รับการตัดสินโดยอาจารย์ที่มีประสิทธิภาพสูงสุด ปรากฎว่าปัญหาคือการออกกำลังกายอย่างแท้จริงในการทำความเข้าใจปัญหาและไม่เพียงแค่ออกไปข้างนอกและหาทางออกที่มีประสิทธิภาพที่สุด
ประเด็นข้างต้นคือเมื่อมันมาถึงการหาทางออกที่มีประสิทธิภาพปัญหามันเป็นเรื่องปกติที่จะใช้เวลาเพื่อให้แน่ใจว่าคุณเข้าใจจริงๆว่าปัญหาคืออะไรก่อนที่จะออกไปและเขียนรหัสหรือพยายามเพิ่มประสิทธิภาพของรหัส หากคุณสามารถเก็บชุดของค่าอ้างอิงในอาร์เรย์คงที่ได้คุณควรทำอย่างนั้นจากจุดยืนประสิทธิภาพมากกว่าการพยายามเขียนอัลกอริธึมแฟนซี
ในทำนองเดียวกันอย่าลืมว่าสำหรับแอปพลิเคชั่นส่วนใหญ่คนเดียวที่มีแนวโน้มที่จะเห็นรหัสที่ไม่มีประสิทธิภาพ (เมื่อไม่มีประสิทธิภาพโดยไม่จำเป็น!) เป็นผู้พัฒนาเอง หากคุณเขียนโค้ดสะอาดที่ทำในสิ่งที่ต้องทำเท่านั้นโอกาสก็คือผู้ใช้ส่วนใหญ่จะไม่สังเกตเห็นปัญหาประสิทธิภาพเมื่อทำงานกับโปรแกรมของคุณและเมื่อพวกเขาเพิ่มประสิทธิภาพส่วนที่พวกเขากล่าวถึง คุณ.
นั่นขึ้นอยู่กับโครงสร้างของการประกวด แต่โดยทั่วไปใช่: ประสิทธิภาพการทำงานที่มีการพิจารณามากที่สุดของเวลาตามที่พวกเขา เอกสาร บางครั้งเช่นเดียวกับในลิงค์ภายหลังคุณต้องตามล่า แต่จะพูด:
เขียนโค้ดที่สะอาดชัดเจนและมีประสิทธิภาพ แม้ว่าจะไม่มีรายการตรวจทานเฉพาะสำหรับเรื่องนี้ แต่ผู้ตรวจสอบก็มีแนวโน้มที่จะตอบสนองต่อโค้ดที่ง่ายต่อการอ่านและทำความเข้าใจ ด้วยโค้ดที่มีประสิทธิภาพคุณจะได้รับประโยชน์เชิงประสิทธิภาพที่เป็นไปได้ในการทดสอบความเครียดและมาตรฐานรวมถึงความรุ่งโรจน์ (และคะแนนพิเศษเล็กน้อย) จากผู้ตรวจสอบ
วิธีที่ดีที่สุดในการปรับปรุงคือการเขียนโค้ดที่มีประสิทธิภาพซึ่งคุณกำลังทำอยู่ แม้ว่าคุณจะทำงานให้เสร็จให้ใช้เวลาในการปรับปรุงประสิทธิภาพของมัน - แม้ว่าจะอยู่หลังการแข่งขัน - และนั่นจะเป็นการตอบแทน
คุณอาจต้องการลงทุนในทฤษฎีเช่นหนังสือเกี่ยวกับอัลกอริทึมที่สามารถให้สองสิ่ง: เครื่องมือที่มีประสิทธิภาพมากขึ้นในการแก้ปัญหาเฉพาะและกลไกที่มีประสิทธิภาพมากขึ้นสำหรับการระบุว่าปัญหาที่คุณต้องแก้ไขคืออะไร
ในที่สุดหลักสูตรวิทยาการคอมพิวเตอร์จะเปิดให้บริการ ทางออนไลน์มากขึ้นและจะครอบคลุมพื้นหลังที่คุณต้องปรับปรุง
วิธีแก้ปัญหาที่มีประสิทธิภาพจำเป็นต้องขึ้นอยู่กับปัจจัยหลายประการ สิ่งที่ใหญ่ที่สุดคือการรู้ว่าผู้ใช้ของคุณต้องการอะไร นี่คือตัวอย่างเล็ก ๆ น้อย ๆ
วิธีทำให้โค้ดของคุณมีประสิทธิภาพมากขึ้น:
มีทั้งฟิลด์เพื่อเพิ่มประสิทธิภาพ แต่อย่างน้อยสองเคล็ดลับข้างต้นควรเริ่มต้นให้คุณ
สำหรับการแข่งขันคุณต้องเข้าใจว่าผู้พิพากษาคือใครและพวกเขากำลังทำอะไร - หากพวกเขากำลังมองหานักเขียนที่ยอดเยี่ยมและไม่มีอะไรเพิ่มเติมคุณจะได้รับความรุ่งโรจน์สำหรับรหัสที่มีประสิทธิภาพ
ตามกฎแล้วในโลกแห่งความเป็นจริงมันไม่สำคัญ หนึ่งในแนวคิดสำคัญของการพัฒนาซอฟต์แวร์คือ "อย่าปรับสิ่งที่คุณไม่ทราบว่าจำเป็นต้องปรับให้เหมาะสม" จากนั้น "ปรับให้เหมาะสมเมื่อได้รับการพิสูจน์แล้วว่าจำเป็นต้องมี"
ผู้ปฏิบัติงานหลายคนจะโต้แย้งว่าสิ่งนี้นำไปสู่การป่องรหัสที่ไม่มีประสิทธิภาพที่ไม่สามารถแก้ไขได้ง่ายและในบางกรณีขอบ (ซึ่งพวกเขาจะอีกาเกี่ยวกับราวกับว่าเป็นสิ่งที่ coders ส่วนใหญ่ทำทุกวัน) พวกเขาถูกต้อง อย่างไรก็ตามมีโครงการพัฒนาซอฟต์แวร์ไม่มากที่วัดผลลัพธ์ "ประสิทธิภาพ: เร็วกว่าที่ต้องการราคา: ใครสนใจเวลาส่งมอบ: บางช่วงทศวรรษนี้" ในโลกแห่งความเป็นจริงมันมักจะ "ฉันต้องการราคาถูกฉันต้องการเมื่อวานนี้ฉันต้องการ มันไปทำงาน "