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

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

26
เหตุใดการประมวลผลอาร์เรย์ที่เรียงลำดับจึงเร็วกว่าการประมวลผลอาร์เรย์ที่ไม่เรียงลำดับ
Наэтотвопросестьответына กองมากเกินнарусском : Почемуотсортированныймассивобрабатываетсябыстрее, чемнеотсортированный? นี่คือโค้ด C ++ ที่แสดงพฤติกรรมที่แปลกประหลาดบางอย่าง ด้วยเหตุผลแปลก ๆ บางอย่างการเรียงลำดับข้อมูลทำให้โค้ดเร็วขึ้นเกือบหกเท่า: #include <algorithm> #include <ctime> #include <iostream> int main() { // Generate data const unsigned arraySize = 32768; int data[arraySize]; for (unsigned c = 0; c < arraySize; ++c) data[c] = std::rand() % 256; // !!! With this, the …

30
ฉันควรใช้ค่า“ href” ใดสำหรับลิงก์ JavaScript“ #” หรือ“ javascript: void (0)”
ต่อไปนี้เป็นสองวิธีในการสร้างลิงก์ที่มีวัตถุประสงค์เพื่อเรียกใช้โค้ด JavaScript เพียงอย่างเดียว จะดีกว่าในแง่ของการทำงานความเร็วในการโหลดหน้าวัตถุประสงค์ในการตรวจสอบความถูกต้องและอื่น ๆ function myJsFunc() { alert("myJsFunc"); } <a href="#" onclick="myJsFunc();">Run JavaScript Code</a> เรียกใช้ข้อมูลโค้ดซ่อนผลลัพธ์ขยายตัวอย่างข้อมูล หรือ function myJsFunc() { alert("myJsFunc"); } <a href="javascript:void(0)" onclick="myJsFunc();">Run JavaScript Code</a> เรียกใช้ข้อมูลโค้ดซ่อนผลลัพธ์ขยายตัวอย่างข้อมูล

10
ปรับปรุงประสิทธิภาพ INSERT ต่อวินาทีของ SQLite
การเพิ่มประสิทธิภาพของ SQLite นั้นยุ่งยาก ประสิทธิภาพการแทรกจำนวนมากของแอพพลิเคชั่น C สามารถเปลี่ยนจาก 85 เม็ดต่อวินาทีไปเป็นมากกว่า 96,000 เม็ดต่อวินาที! พื้นหลัง:เรากำลังใช้ SQLite เป็นส่วนหนึ่งของแอปพลิเคชันเดสก์ท็อป เรามีข้อมูลการกำหนดค่าจำนวนมากที่เก็บไว้ในไฟล์ XML ที่มีการแยกวิเคราะห์และโหลดลงในฐานข้อมูล SQLite เพื่อการประมวลผลเพิ่มเติมเมื่อเริ่มต้นแอปพลิเคชัน SQLite นั้นเหมาะสำหรับสถานการณ์นี้เพราะมันรวดเร็วไม่ต้องมีการกำหนดค่าพิเศษและฐานข้อมูลจะถูกเก็บไว้ในดิสก์เป็นไฟล์เดียว เหตุผล: ตอนแรกฉันรู้สึกผิดหวังกับการแสดงที่ฉันได้เห็น ปรากฎว่าประสิทธิภาพของ SQLite อาจแตกต่างกันอย่างมีนัยสำคัญ (ทั้งสำหรับการแทรกจำนวนมากและการเลือก) ขึ้นอยู่กับวิธีการกำหนดค่าฐานข้อมูลและวิธีการที่คุณใช้ API ไม่ใช่เรื่องง่ายที่จะคิดออกว่าตัวเลือกและเทคนิคทั้งหมดเป็นอย่างไรดังนั้นฉันจึงคิดว่าควรสร้างรายการวิกิชุมชนนี้เพื่อแบ่งปันผลลัพธ์กับผู้อ่าน Stack Overflow เพื่อช่วยคนอื่น ๆ ในการตรวจสอบปัญหาเดียวกัน การทดลอง:แทนที่จะพูดถึงเคล็ดลับประสิทธิภาพในแง่ทั่วไป (เช่น"ใช้ธุรกรรม!" ) ฉันคิดว่ามันดีที่สุดในการเขียนรหัส C และวัดผลกระทบของตัวเลือกต่างๆ เราจะเริ่มด้วยข้อมูลง่ายๆ: ไฟล์ข้อความที่คั่นด้วยแท็บ TAB ขนาด 28 MB (ประมาณ 865,000 บันทึก) ของตารางการขนส่งที่สมบูรณ์สำหรับเมืองโตรอนโต …

30
วิธีที่เร็วที่สุดในการตรวจสอบว่าสแควร์รูทของจำนวนเต็มเป็นจำนวนเต็มหรือไม่
ฉันกำลังมองหาวิธีที่เร็วที่สุดในการพิจารณาว่าlongค่าเป็นจตุรัสที่สมบูรณ์แบบหรือไม่ (เช่นสแควร์รูทเป็นจำนวนเต็มอีกตัว): ฉันได้ทำมันเป็นวิธีที่ง่ายโดยใช้ในตัว Math.sqrt() ฟังก์ชั่นแต่ฉันสงสัยว่ามีวิธีที่จะทำได้เร็วขึ้นหรือไม่โดยการ จำกัด ตัวเองเป็นโดเมนจำนวนเต็มเท่านั้น การบำรุงรักษาตารางการค้นหาไม่สามารถใช้งานได้ (เนื่องจากมีจำนวนเต็มประมาณ31.5 2 ซึ่งมีค่าน้อยกว่า 2 63 ) นี่เป็นวิธีที่ง่ายและตรงไปตรงมาที่ฉันทำตอนนี้: public final static boolean isPerfectSquare(long n) { if (n < 0) return false; long tst = (long)(Math.sqrt(n) + 0.5); return tst*tst == n; } หมายเหตุ: ฉันกำลังใช้ฟังก์ชั่นนี้ในหลายปัญหาของProject Euler ดังนั้นไม่มีใครจะต้องรักษารหัสนี้ และการเพิ่มประสิทธิภาพขนาดเล็กแบบนี้สามารถสร้างความแตกต่างได้จริงเนื่องจากส่วนหนึ่งของความท้าทายคือการทำอัลกอริทึมทุกอย่างในเวลาน้อยกว่าหนึ่งนาทีและฟังก์ชั่นนี้จะต้องถูกเรียกว่าหลายล้านครั้งในปัญหาบางอย่าง ฉันได้ลองวิธีแก้ไขปัญหาต่าง ๆ แล้ว: หลังจากการทดสอบอย่างละเอียดถี่ถ้วนฉันพบว่า0.5ไม่จำเป็นต้องเพิ่มผลลัพธ์ของ Math.sqrt () …

5
คุณลักษณะของ "บทบาท" ใน HTML คืออะไร?
ฉันเห็นคุณลักษณะของบทบาทในงานของบางคน ฉันใช้มันเหมือนกัน แต่ฉันไม่แน่ใจเกี่ยวกับผลกระทบของมัน ตัวอย่างเช่น: <header id="header" role="banner"> Header stuff in here </header> หรือ: <section id="facebook" role="contentinfo"> Facebook stuff in here </section> หรือ: <section id="main" role="main"> Main content stuff in here </section> แอ็ตทริบิวต์บทบาทนี้จำเป็นหรือไม่? คุณลักษณะนี้ดีกว่าสำหรับซีแมนทิกส์หรือไม่ ปรับปรุง SEO หรือไม่ รายการของบทบาทสามารถพบได้ที่นี่แต่ฉันเห็นบางคนทำขึ้นเอง นั่นเป็นสิ่งที่ได้รับอนุญาตหรือใช้งานอย่างถูกต้องของบทบาทของบทบาท ความคิดใด ๆ เกี่ยวกับเรื่องนี้?
1165 html  optimization  seo  roles 

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

11
รหัส C ++ สำหรับการทดสอบการคาดคะเนของ Collatz เร็วกว่าชุดประกอบที่เขียนด้วยมือ - ทำไม?
ฉันเขียนโซลูชันทั้งสองนี้สำหรับProject Euler Q14ในแอสเซมบลีและใน C ++ พวกมันเหมือนกันกับวิธีเดรัจฉานแรงแบบเดียวกันสำหรับการทดสอบการคาดคะเนของโคลลาตซ์ โซลูชันการประกอบถูกประกอบด้วย nasm -felf64 p14.asm && gcc p14.o -o p14 คอมไพล์ด้วย C ++ g++ p14.cpp -o p14 การชุมนุม p14.asm section .data fmt db "%d", 10, 0 global main extern printf section .text main: mov rcx, 1000000 xor rdi, rdi ; max i xor rsi, rsi …

4
ฉันจะประสบความสำเร็จสูงสุดทางทฤษฎีของ 4 FLOPs ต่อรอบได้อย่างไร
ประสิทธิภาพสูงสุดในเชิงทฤษฎีของการดำเนินการจุดลอย 4 จุด (ความแม่นยำสองเท่า) ต่อรอบสามารถทำได้บนซีพียู x86-64 ที่ทันสมัยของ Intel? เท่าที่ฉันเข้าใจมันใช้เวลาสามรอบสำหรับSSE addและห้ารอบเพื่อmulให้เสร็จสมบูรณ์บน CPU Intel ส่วนใหญ่ที่ทันสมัย ​​(ดูตัวอย่าง'Instruction Tables' ของ Agner Fog ) เนื่องจากการส่งไปป์ไลน์หนึ่งสามารถรับปริมาณงานหนึ่งaddต่อรอบหากอัลกอริทึมมีการสรุปอิสระอย่างน้อยสามครั้ง เนื่องจากเป็นจริงสำหรับแพ็กเกจaddpdรวมถึงaddsdรุ่นสเกลาร์และรีจิสเตอร์ SSE สามารถมีปริมาณงานสองdoubleรายการได้มากถึงสอง flops ต่อรอบ นอกจากนี้ดูเหมือนว่า (แม้ว่าฉันจะไม่เห็นเอกสารที่ถูกต้องเกี่ยวกับเรื่องนี้) addและmulสามารถดำเนินการในแบบคู่ขนานโดยให้ทรูพุตสูงสุดตามทฤษฎีของสี่ flops ต่อรอบ อย่างไรก็ตามฉันไม่สามารถจำลองประสิทธิภาพนั้นด้วยโปรแกรม C / C ++ อย่างง่าย ความพยายามที่ดีที่สุดของฉันส่งผลให้ประมาณ 2.7 flops / รอบ หากใครสามารถมีส่วนร่วม C / C ++ หรือโปรแกรมแอสเซมเบลอร์ที่แสดงให้เห็นถึงประสิทธิภาพสูงสุดที่จะได้รับการชื่นชมอย่างมาก ความพยายามของฉัน: #include <stdio.h> …

30
กลยุทธ์การเพิ่มประสิทธิภาพการทำงานของวิธีสุดท้าย [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา มีคำถามเกี่ยวกับประสิทธิภาพมากมายในไซต์นี้แล้ว แต่มันก็เกิดขึ้นกับฉันว่าเกือบทั้งหมดเป็นปัญหาเฉพาะและแคบพอสมควร และเกือบทั้งหมดทำซ้ำคำแนะนำเพื่อหลีกเลี่ยงการเพิ่มประสิทธิภาพก่อนวัยอันควร สมมติว่า: รหัสทำงานอย่างถูกต้องแล้ว อัลกอริทึมที่เลือกเหมาะสมที่สุดแล้วสำหรับสถานการณ์ของปัญหา มีการวัดรหัสและรูทีนที่กระทำผิดได้ถูกแยกออก ความพยายามในการปรับให้เหมาะสมทั้งหมดจะถูกวัดเพื่อให้มั่นใจว่าพวกเขาจะไม่ทำให้เรื่องแย่ลง สิ่งที่ฉันกำลังมองหาที่นี่คือกลยุทธ์และกลอุบายที่จะบีบให้มากถึงไม่กี่เปอร์เซ็นต์ในอัลกอริทึมวิกฤตเมื่อไม่มีอะไรเหลือให้ทำอีก ในอุดมคติแล้วให้พยายามตอบคำถามผู้ไม่เชื่อเรื่องภาษาและระบุข้อบกพร่องของกลยุทธ์ที่แนะนำหากมี ฉันจะเพิ่มการตอบกลับด้วยคำแนะนำเริ่มต้นของฉันเองและหวังว่าจะได้รับสิ่งที่ชุมชน Stack Overflow สามารถนึกถึงได้

16
รับทุกประเภทที่ใช้อินเตอร์เฟส
ใช้การไตร่ตรองฉันจะทำให้ทุกประเภทที่ใช้อินเทอร์เฟซกับ C # 3.0 / .NET 3.5 มีโค้ดน้อยที่สุดและลดการทำซ้ำให้น้อยที่สุดได้อย่างไร นี่คือสิ่งที่ฉันต้องการเขียนใหม่: foreach (Type t in this.GetType().Assembly.GetTypes()) if (t is IMyInterface) ; //do stuff

30
วิธีที่มีประสิทธิภาพมากที่สุดสำหรับการเปรียบเทียบแบบลอยและแบบคู่คืออะไร
อะไรจะเป็นวิธีที่มีประสิทธิภาพมากที่สุดในการเปรียบเทียบค่าdoubleสองหรือสองfloatค่า การทำเช่นนี้ไม่ถูกต้อง: bool CompareDoubles1 (double A, double B) { return A == B; } แต่สิ่งที่ชอบ: bool CompareDoubles2 (double A, double B) { diff = A - B; return (diff < EPSILON) && (-diff < EPSILON); } ดูเหมือนว่าการแปรรูปขยะ ไม่มีใครรู้ว่าเครื่องมือเปรียบเทียบที่ชาญฉลาดกว่านี้คือใคร?

30
วิธี "pythonic" มากที่สุดในการวนซ้ำรายการในกลุ่มคืออะไร?
ฉันมีสคริปต์ Python ซึ่งใช้เป็นรายการของจำนวนเต็มซึ่งฉันต้องทำงานกับจำนวนเต็มสี่ตัวในแต่ละครั้ง น่าเสียดายที่ฉันไม่สามารถควบคุมอินพุตได้หรือฉันจะให้มันส่งผ่านเป็นรายการของ tuples สี่องค์ประกอบ ขณะนี้ฉันกำลังทำซ้ำด้วยวิธีนี้: for i in xrange(0, len(ints), 4): # dummy op for example code foo += ints[i] * ints[i + 1] + ints[i + 2] * ints[i + 3] ดูเหมือนว่า "C-think" มากซึ่งทำให้ฉันสงสัยว่ามีวิธีการรับมือกับสถานการณ์นี้มากขึ้น รายการจะถูกยกเลิกหลังจากทำซ้ำดังนั้นจึงไม่จำเป็นต้องเก็บรักษาไว้ บางทีสิ่งนี้จะดีกว่าไหม? while ints: foo += ints[0] * ints[1] + ints[2] * ints[3] …


30
เรียบรายการที่ผิดปกติ
Наэтотвопросестьответына กองมากเกินнарусском : Сделатьглубоковложенныйсписокплоскимбезветвленияициклов ใช่ฉันรู้ว่าเรื่องนี้ได้รับการคุ้มครองก่อน ( นี่ , ที่นี่ , ที่นี่ , ที่นี่ ) แต่เท่าที่ผมรู้ว่าการแก้ปัญหาทั้งหมดยกเว้นหนึ่งล้มเหลวในรายการเช่นนี้: L = [[[1, 2, 3], [4, 5]], 6] ตำแหน่งที่ต้องการออก [1, 2, 3, 4, 5, 6] หรืออาจจะดียิ่งขึ้นเป็นตัววนซ้ำ ทางออกเดียวที่ฉันเห็นว่าใช้ได้สำหรับการทำรังโดยพลการพบในคำถามนี้ : def flatten(x): result = [] for el in x: if hasattr(el, "__iter__") and not isinstance(el, basestring): result.extend(flatten(el)) …

9
วิธีการระบุคำจำกัดความ css ที่ไม่ได้ใช้
มีวิธีการที่ดีในการช่วยระบุคำจำกัดความ css ที่ไม่ได้ใช้ในโครงการหรือไม่? ไฟล์ css จำนวนมากถูกดึงเข้ามาและตอนนี้ฉันกำลังพยายามล้างสิ่งต่าง ๆ ให้น้อยลง

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