คำถามติดแท็ก optimization

การปรับให้เหมาะสมคือการปรับปรุงวิธีหรือการออกแบบ ในการเขียนโปรแกรมการปรับให้เหมาะสมมักจะอยู่ในรูปแบบของการเพิ่มความเร็วของอัลกอริทึมหรือลดทรัพยากรที่ต้องการ ความหมายของการเพิ่มประสิทธิภาพก็คืออัลกอริธึมการเพิ่มประสิทธิภาพเชิงตัวเลขที่ใช้ในการเรียนรู้ของเครื่อง

9
SQL: วิธีการตรวจสอบอย่างถูกต้องว่ามีการบันทึกอยู่
ขณะอ่านเอกสารเกี่ยวกับการปรับแต่ง SQL ฉันพบสิ่งนี้: SELECT COUNT(*) : นับจำนวนแถว มักใช้อย่างไม่เหมาะสมเพื่อตรวจสอบการมีอยู่ของระเบียน คือSELECT COUNT(*)จริงๆที่ไม่ดีที่? วิธีที่เหมาะสมในการตรวจสอบการมีอยู่ของบันทึกคืออะไร?

25
การปัดเศษขึ้นเป็นกำลังต่อไปของ 2
ฉันต้องการเขียนฟังก์ชั่นที่คืนค่ากำลังสองถัดไปที่ใกล้ที่สุด ตัวอย่างเช่นถ้าอินพุตของฉันคือ 789 ผลลัพธ์ควรเป็น 1024 มีวิธีใดบ้างที่จะบรรลุผลนี้โดยไม่ใช้ลูปใด ๆ แต่ใช้ตัวดำเนินการระดับบิต?

10
อะไรคือผลของการสั่งซื้อถ้า ... หากงบโดยความน่าจะเป็น
โดยเฉพาะอย่างยิ่งถ้าฉันมีชุดคำสั่งif... else ifและฉันก็รู้ว่าความน่าจะเป็นแบบสัมพัทธ์ที่แต่ละคำสั่งจะประเมินเป็นtrueเท่าใดความแตกต่างของเวลาการดำเนินการจึงทำให้เรียงลำดับตามความน่าจะเป็นเท่าใด ตัวอย่างเช่นฉันควรจะชอบสิ่งนี้: if (highly_likely) //do something else if (somewhat_likely) //do something else if (unlikely) //do something สำหรับสิ่งนี้?: if (unlikely) //do something else if (somewhat_likely) //do something else if (highly_likely) //do something ดูเหมือนว่ารุ่นที่เรียงจะเร็วกว่าอย่างไรก็ตามเพื่อความสะดวกในการอ่านหรือการมีผลข้างเคียงเราอาจต้องการเรียงลำดับแบบไม่เหมาะสม เป็นการยากที่จะบอกได้ว่า CPU จะทำอย่างไรกับการคาดคะเนสาขาจนกว่าคุณจะเรียกใช้รหัสจริง ดังนั้นในการทดลองกับสิ่งนี้ฉันลงเอยด้วยการตอบคำถามของฉันเองสำหรับกรณีเฉพาะ แต่ฉันต้องการฟังความคิดเห็น / ข้อมูลเชิงลึกอื่น ๆ ด้วย สำคัญ: คำถามนี้สันนิษฐานว่าifคำสั่งนั้นสามารถเรียงลำดับใหม่โดยพลการโดยไม่มีผลกระทบใด ๆ ต่อพฤติกรรมของโปรแกรม ในคำตอบของฉันการทดสอบตามเงื่อนไขสามข้อนั้นไม่เหมือนกันและไม่มีผลข้างเคียง แน่นอนถ้างบต้องได้รับการประเมินในลำดับที่แน่นอนเพื่อให้บรรลุพฤติกรรมที่ต้องการบางอย่างแล้วปัญหาของประสิทธิภาพคือ moot

3
GHC คาดว่าจะสามารถเพิ่มประสิทธิภาพการทำงานได้อย่างน่าเชื่อถือ?
GHC มีการปรับแต่งมากมายที่สามารถทำงานได้ แต่ฉันไม่รู้ว่าพวกเขาทั้งหมดคืออะไรและมีแนวโน้มว่าจะต้องดำเนินการอย่างไรและอยู่ภายใต้สถานการณ์ใด คำถามของฉันคืออะไรฉันสามารถคาดหวังการเปลี่ยนแปลงอะไรที่จะนำไปใช้ทุกครั้งหรือเกือบจะเป็นเช่นนั้น? ถ้าฉันดูรหัสที่จะถูกดำเนินการ (ประเมิน) บ่อยครั้งและความคิดแรกของฉันคือ "hmm บางทีฉันควรปรับให้เหมาะสม" ซึ่งในกรณีนี้ความคิดที่สองของฉันควรเป็น "ไม่ต้องคิดเลย GHC ได้รับสิ่งนี้ "? ฉันกำลังอ่านStream Stream Fusionของกระดาษ: จากรายการไปจนถึงสตรีมไปยังไม่มีอะไรเลยและเทคนิคที่พวกเขาใช้ในการเขียนรายการประมวลผลในรูปแบบอื่นซึ่งการปรับตามปกติของ GHC จะเพิ่มประสิทธิภาพลงในลูปแบบง่าย ๆ ฉันจะบอกได้อย่างไรว่าโปรแกรมของฉันมีสิทธิ์ได้รับการเพิ่มประสิทธิภาพแบบนั้น? มีข้อมูลบางอย่างในคู่มือ GHC แต่มีเพียงบางส่วนที่จะตอบคำถาม แก้ไข: ฉันเริ่มได้รับรางวัล สิ่งที่ฉันต้องการคือรายการของการแปลงระดับล่างเช่นแลมบ์ดา / เคส / กรณีลอย, พิเศษ / ประเภทคอนสตรัค / ฟังก์ชั่นการโต้แย้งการวิเคราะห์ความเข้มงวดและ unboxing, คนงาน / ห่อหุ้มและสิ่งอื่น ๆ ที่สำคัญ GHC พร้อมด้วยคำอธิบายและตัวอย่างของอินพุตและเอาต์พุตโค้ดและภาพประกอบที่สมบูรณ์แบบของสถานการณ์เมื่อเอฟเฟกต์ทั้งหมดมากกว่าผลรวมของส่วนต่างๆ และเป็นที่กล่าวถึงเมื่อการเปลี่ยนแปลงไม่ได้ผลเกิดขึ้น ฉันไม่ได้คาดหวังว่าคำอธิบายที่มีความยาวนวนิยายของการเปลี่ยนแปลงทุกอย่างสองสามประโยคและตัวอย่างโค้ดอินไลน์ซับหนึ่งอาจเพียงพอ ชัดเจนในตอนท้ายของมัน ฉันต้องการที่จะดูรหัสและสามารถคาดเดาได้ดีว่ามันจะรวบรวมเป็นวงแคบหรือไม่หรือทำไมไม่หรือสิ่งที่ฉันจะต้องเปลี่ยนเพื่อให้ได้ (ฉันไม่สนใจมากที่นี่ในกรอบการเพิ่มประสิทธิภาพขนาดใหญ่เช่นการหลอมกระแส …

1
ทำไมผลตอบแทนต้นช้ากว่าอย่างอื่น?
นี่คือคำถามที่ติดตามคำตอบผมให้ไม่กี่วันกลับ แก้ไข:ดูเหมือนว่า OP ของคำถามนั้นได้ใช้รหัสที่ฉันโพสต์ไปหาเขาเพื่อถามคำถามเดียวกันแต่ฉันไม่รู้ตัว ขอโทษ. คำตอบที่ให้นั้นแตกต่างกัน! ฉันสังเกตเห็นว่า: >>> def without_else(param=False): ... if param: ... return 1 ... return 0 >>> def with_else(param=False): ... if param: ... return 1 ... else: ... return 0 >>> from timeit import Timer as T >>> T(lambda : without_else()).repeat() [0.3011460304260254, 0.2866089344024658, 0.2871549129486084] >>> T(lambda : …

14
ประสิทธิภาพของ MySQL หรือ vs IN
ฉันสงสัยว่ามีความแตกต่างในเรื่องการแสดงระหว่างสิ่งต่อไปนี้หรือไม่ SELECT ... FROM ... WHERE someFIELD IN(1,2,3,4) SELECT ... FROM ... WHERE someFIELD between 0 AND 5 SELECT ... FROM ... WHERE someFIELD = 1 OR someFIELD = 2 OR someFIELD = 3 ... หรือว่า MySQL จะปรับ SQL ให้เหมาะสมในลักษณะเดียวกับที่คอมไพเลอร์จะปรับโค้ดให้เหมาะสม แก้ไข: เปลี่ยนAND'เพื่อOR' s ด้วยเหตุผลที่ระบุไว้ในการแสดงความคิดเห็น

7
อันไหนเร็วที่สุด เลือก SQL_CALC_FOUND_ROWS จาก 'table' หรือเลือก COUNT (*)
เมื่อคุณ จำกัด จำนวนแถวที่จะส่งคืนโดยแบบสอบถาม SQL ซึ่งมักใช้ในการเพจมีสองวิธีในการกำหนดจำนวนระเบียนทั้งหมด: วิธีที่ 1 รวมSQL_CALC_FOUND_ROWSตัวเลือกในต้นฉบับSELECTแล้วรับจำนวนแถวทั้งหมดโดยเรียกใช้SELECT FOUND_ROWS(): SELECT SQL_CALC_FOUND_ROWS * FROM table WHERE id > 100 LIMIT 10; SELECT FOUND_ROWS(); วิธีที่ 2 เรียกใช้แบบสอบถามโดยปกติแล้วรับจำนวนแถวทั้งหมดด้วยการเรียกใช้ SELECT COUNT(*) SELECT * FROM table WHERE id > 100 LIMIT 10; SELECT COUNT(*) FROM table WHERE id > 100; วิธีใดดีที่สุด / เร็วที่สุด

4
ฉันสามารถใบ้ตัวเพิ่มประสิทธิภาพโดยให้ช่วงของจำนวนเต็มได้หรือไม่
ฉันใช้intประเภทเพื่อเก็บค่า โดยความหมายของโปรแกรมค่าแตกต่างกันเสมอในช่วงที่เล็กมาก (0 - 36) และint(ไม่ใช่ a char) ถูกใช้เพียงเพราะประสิทธิภาพของ CPU ดูเหมือนว่าการเพิ่มประสิทธิภาพทางคณิตศาสตร์พิเศษหลายอย่างสามารถทำได้กับจำนวนเต็มเล็กน้อย การเรียกใช้ฟังก์ชันจำนวนมากในจำนวนเต็มเหล่านั้นอาจถูกปรับให้เหมาะกับการดำเนินการ "เสก" จำนวนน้อยและบางฟังก์ชั่นอาจปรับให้เหมาะกับการค้นหาบนโต๊ะ ดังนั้นเป็นไปได้หรือไม่ที่จะบอกคอมไพเลอร์ว่านี่intเป็นช่วงเล็ก ๆ เสมอและเป็นไปได้หรือไม่ที่คอมไพเลอร์จะทำการปรับแต่งเหล่านั้นให้ดีที่สุด?

14
Java Reflection Performance
การสร้างวัตถุโดยใช้การสะท้อนมากกว่าการเรียกตัวสร้างคลาสส่งผลให้เกิดความแตกต่างด้านประสิทธิภาพที่สำคัญหรือไม่?

2
ทำไมคอมไพเลอร์สามารถปรับแต่งแลมบ์ดาได้ดีกว่าฟังก์ชั่นธรรมดา?
ในหนังสือของเขาThe C++ Standard Library (Second Edition)Nicolai Josuttis ระบุว่า lambdas สามารถปรับให้เหมาะสมโดยคอมไพเลอร์มากกว่าฟังก์ชั่นธรรมดา นอกจากนี้คอมไพเลอร์ C ++ เพิ่มประสิทธิภาพ lambdas ได้ดีกว่าฟังก์ชั่นทั่วไป (หน้า 213) ทำไมถึงเป็นอย่างนั้น? ฉันคิดว่าเมื่อพูดถึงการอินไลน์ก็ไม่น่าจะมีความแตกต่างอีกต่อไป เหตุผลเดียวที่ฉันคิดได้ก็คือคอมไพเลอร์อาจมีบริบทท้องถิ่นที่ดีขึ้นกับลูกแกะและสิ่งเหล่านี้สามารถทำให้สมมติฐานมากขึ้นและดำเนินการเพิ่มประสิทธิภาพมากขึ้น

7
Java NIO FileChannel เทียบกับประสิทธิภาพและประโยชน์ของ FileOutputstream
ฉันพยายามที่จะคิดออกว่ามีความแตกต่างในประสิทธิภาพ (หรือข้อดี) เมื่อเราใช้ nio FileChannelกับปกติFileInputStream/FileOuputStreamเพื่ออ่านและเขียนไฟล์ไปยังระบบไฟล์ ฉันสังเกตว่าบนเครื่องของฉันทั้งสองทำงานที่ระดับเดียวกันหลายครั้งFileChannelด้วยวิธีที่ช้ากว่า ฉันขอรายละเอียดเพิ่มเติมเปรียบเทียบสองวิธีนี้ได้ไหม 350MBนี่คือรหัสที่ผมใช้ไฟล์ที่ฉันกำลังทดสอบกับประมาณ เป็นตัวเลือกที่ดีในการใช้คลาสที่ใช้ NIO สำหรับ File I / O หรือไม่หากฉันไม่ได้ดูที่การเข้าถึงแบบสุ่มหรือคุณสมบัติขั้นสูงอื่น ๆ package trialjavaprograms; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; public class JavaNIOTest { public static void main(String[] args) throws Exception { useNormalIO(); useFileChannel(); } private static void useNormalIO() …

21
คำถามสัมภาษณ์ Google หากิน
เพื่อนของฉันกำลังสัมภาษณ์งาน หนึ่งในคำถามสัมภาษณ์ทำให้ฉันคิดว่าแค่ต้องการความคิดเห็น มีจำนวนเต็ม 2 จำนวนที่ไม่เป็นลบ: i และ j รับสมการต่อไปนี้หาทางออก (ดีที่สุด) เพื่อวนซ้ำ i และ j ในลักษณะที่เรียงลำดับผลลัพธ์ 2^i * 5^j ดังนั้นสองสามรอบแรกจะเป็นดังนี้: 2^0 * 5^0 = 1 2^1 * 5^0 = 2 2^2 * 5^0 = 4 2^0 * 5^1 = 5 2^3 * 5^0 = 8 2^1 * 5^1 = 10 2^4 …

23
ข้อดีของการสลับคำสั่ง if-else
อะไรคือแนวปฏิบัติที่ดีที่สุดสำหรับการใช้switchคำสั่งกับการใช้ifคำสั่งสำหรับการunsignedแจกแจง30 รายการซึ่งประมาณ 10 รายการมีการกระทำที่คาดหวัง (ปัจจุบันคือการกระทำเดียวกัน) ต้องคำนึงถึงประสิทธิภาพและพื้นที่ แต่ไม่สำคัญ ฉันสรุปตัวอย่างแล้วดังนั้นอย่าเกลียดฉันสำหรับแบบแผนการตั้งชื่อ switch คำให้การ: // numError is an error enumeration type, with 0 being the non-error case // fire_special_event() is a stub method for the shared processing switch (numError) { case ERROR_01 : // intentional fall-through case ERROR_07 : // intentional fall-through case ERROR_0A …

20
“ สำหรับ (;;)” เร็วกว่า“ ขณะ (TRUE)” หรือไม่ ถ้าไม่ทำไมผู้คนถึงใช้มัน?
for (;;) { //Something to be done repeatedly } ฉันเคยเห็นสิ่งต่าง ๆ นี้ใช้บ่อย แต่ฉันคิดว่ามันค่อนข้างแปลก ... มันจะไม่ชัดเจนกว่าที่จะพูดwhile(true)หรือบางสิ่งบางอย่างตามสายเหล่านั้น? ฉันเดาว่า (เช่นเดียวกับเหตุผลที่โปรแกรมเมอร์หลายคนหันไปใช้รหัสลับ) นี่เป็นอัตรากำไรขั้นต้นที่น้อยกว่าหรือไม่ ทำไมและมันคุ้มค่าจริงหรือ ถ้าเป็นเช่นนั้นทำไมไม่กำหนดเพียงวิธีนี้: #define while(true) for(;;) ดูเพิ่มเติม: อันไหนเร็วกว่าในขณะที่ (1) หรือขณะที่ (2)?

21
FastPass ของ Disney นั้นถูกต้องและ / หรือมีทฤษฎีคิวที่เป็นประโยชน์
ที่ Disney World พวกเขาใช้ระบบที่ชื่อว่าFastpassเพื่อสร้างบรรทัดที่สองและสั้นกว่าสำหรับการขี่ยอดนิยม แนวคิดคือคุณสามารถรอในบรรทัดมาตรฐานบ่อยครั้งด้วยการรอนานกว่าหนึ่งชั่วโมงหรือคุณสามารถรับ FastPass ซึ่งอนุญาตให้คุณกลับมาในช่วงเวลาที่กำหนด (โดยปกติจะใช้เวลาสองสามชั่วโมงต่อมา) และรอเพียง 10 นาที นาทีหรือน้อยกว่า คุณสามารถ "รอ" สำหรับการนั่งครั้งละหนึ่งครั้งด้วย FastPass ฉันพยายามคิดทฤษฎีคิวหลังแนวคิดนี้ แต่คำอธิบายเดียวที่ฉันพบคือมันถูกออกแบบมาเพื่อดึงคนออกจากสายและทำสิ่งต่าง ๆ ที่จะนำรายได้เพิ่มเติม (ช้อปปิ้งกิน ฯลฯ ) นี่คือสาเหตุที่ FastPass ถูกใช้งานหรือมีปัญหาประสิทธิภาพของผู้เข้าชมจริง ๆ มีแอปพลิเคชันซอฟต์แวร์ที่ใช้ตรรกะที่คล้ายกันหรือไม่ มีแอปพลิเคชันซอฟต์แวร์ที่ควรใช้ตรรกะที่คล้ายกันหรือไม่ ส่วนหนึ่งของปัญหาที่ฉันเห็นเมื่อใช้บางสิ่งที่คล้ายกันในซอฟต์แวร์คือมันขึ้นอยู่กับผู้ใช้ที่เลือกคิวของพวกเขา ทำกับรอบการรอที่เร็วกว่าในซอฟต์แวร์ฉันคิดว่าแอปพลิเคชันที่ดีของทฤษฎีนี้จะต้องมีแอพพลิเคชั่นที่ฉลาดพอที่จะรู้ว่าคิวใดที่จะวางคนตามความต้องการของพวกเขาโดยไม่ต้องเลือกผู้ใช้ปลายทาง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.