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

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

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

2
ปัญหาที่ให้ความรู้สึกเป็นเลขยกกำลัง แต่เป็น P
ฉันกำลังพยายามสร้างรายการของอัลกอริทึม / ปัญหาที่ "มีประโยชน์เป็นพิเศษ" ในขณะที่การแก้ปัญหาที่ 'ดูเหมือน' เป็นจำนวนมากในธรรมชาติ แต่มีอัลกอริทึมที่ชาญฉลาดบางอย่างที่แก้พวกเขาในที่สุด ตัวอย่างของสิ่งที่ฉันหมายถึง: การเขียนโปรแกรมเชิงเส้น (อัลกอริทึม simplex เป็นเวลาแบบเอ็กซ์โปเนนเชียลใช้เวลานานในการค้นหาวิธีแก้ปัญหาเวลาพหุนาม!) โดยทั่วไปการเขียนโปรแกรม Semidefinite การทดสอบเบื้องต้น 2-SAT และ HORNSAT การคำนวณดีเทอร์มิแนนต์ (หากฟังดูไม่ยากให้พิจารณาแบบถาวร) ค้นหาการจับคู่ที่สมบูรณ์แบบ ความหลากหลายของปัญหาทางทฤษฎีกลุ่มยากที่สามารถทำได้โดยใช้การจำแนกประเภทของกลุ่มง่าย จำกัด ความหลากหลายของปัญหากราฟยากที่สามารถทำได้โดยใช้ลักษณะที่ต้องห้ามของผู้เยาว์ที่ซับซ้อน (ความสามารถในการฝังบนพื้นผิวโดยพลการ; ขอบเขตของความว่องไวและความกว้างแบนด์วิธ; การคำนวณเลขชี้กำลังในกลุ่มที่ถูกล้อมรอบ (เช่นการคำนวณในขั้นตอน, ทำได้โดย squaring ซ้ำ)abmodkabmodka^b \mod klogblog⁡b\log b การคำนวณอาศัยอัลกอริธึม LLL (เป็นกรณีพิเศษ: อัลกอริทึมแบบยุคลิดในกรณีทั่วไปมากขึ้น: อัลกอริทึม PSLQ หรือ HJLS) ปัญหาข้อ จำกัด ที่ไม่มีข้อกำหนดเทย์เลอร์ (?) ฉันยอมรับว่าฉันไม่เข้าใจอย่างถ่องแท้ แต่ดูเหมือนว่าอาจเป็นกรณีของ 2-SAT …

2
ภาษาทั้งหมดที่ไม่มีบริบทและภาษาปกติสามารถตัดสินใจได้อย่างมีประสิทธิภาพหรือไม่
ฉันเจอตัวเลขนี้ซึ่งแสดงว่าภาษาที่ไม่มีบริบทและภาษาปกติเป็นเซตย่อยของปัญหาที่มีประสิทธิภาพ (สมมุติว่า ) ฉันเข้าใจอย่างถ่องแท้ว่าปัญหาที่มีประสิทธิภาพเป็นส่วนย่อยของปัญหาที่ตัดสินใจได้ทั้งหมดเพราะเราสามารถแก้ปัญหาได้ แต่อาจใช้เวลานานมากPP\mathrm{P} ทำไมทุกบริบทฟรีและปกติภาษา decidable ได้อย่างมีประสิทธิภาพ? มันหมายถึงการแก้ปัญหาพวกเขาจะไม่ใช้เวลานาน (ฉันหมายถึงเรารู้โดยไม่มีบริบท)

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

3
มีหลักฐานว่าคอมพิวเตอร์ควอนตัมมีประสิทธิภาพมากกว่าคอมพิวเตอร์แบบดั้งเดิมหรือไม่?
อัลกอริทึมของแคระแกร็นมักใช้เป็นอาร์กิวเมนต์ มันสามารถแก้ปัญหาการแยกตัวได้เร็วกว่าอัลกอริธึมที่รู้จักสำหรับคอมพิวเตอร์แบบดั้งเดิม ถึงกระนั้นเราก็ไม่มีเครื่องคอมพิวเตอร์คลาสสิกที่พิสูจน์ได้ว่ายังไม่สามารถแยกจำนวนเต็มได้อย่างมีประสิทธิภาพ มีคอมพิวเตอร์ควอนตัมที่แท้จริงใด ๆ ที่พิสูจน์ได้สามารถแก้ปัญหาได้เร็วกว่าคอมพิวเตอร์ทั่วไปหรือไม่?

1
การแยกประเภทการปรับแต่ง
ที่ทำงานฉันได้รับมอบหมายให้อนุมานข้อมูลบางประเภทเกี่ยวกับภาษาแบบไดนามิก ฉันเขียนลำดับของข้อความไปยังletนิพจน์ที่ซ้อนกันเช่น: return x; Z => x var x; Z => let x = undefined in Z x = y; Z => let x = y in Z if x then T else F; Z => if x then { T; Z } else { F; Z } เนื่องจากฉันเริ่มต้นจากข้อมูลประเภททั่วไปและพยายามอนุมานประเภทที่เฉพาะเจาะจงมากขึ้นตัวเลือกที่เป็นธรรมชาติคือประเภทการปรับแต่ง ตัวอย่างเช่นตัวดำเนินการตามเงื่อนไขส่งคืนการรวมของประเภทของสาขาที่เป็นจริงและเท็จ …
11 programming-languages  logic  type-theory  type-inference  machine-learning  data-mining  clustering  order-theory  reference-request  information-theory  entropy  algorithms  algorithm-analysis  space-complexity  lower-bounds  formal-languages  computability  formal-grammars  context-free  parsing  complexity-theory  time-complexity  terminology  turing-machines  nondeterminism  programming-languages  semantics  operational-semantics  complexity-theory  time-complexity  complexity-theory  reference-request  turing-machines  machine-models  simulation  graphs  probability-theory  data-structures  terminology  distributed-systems  hash-tables  history  terminology  programming-languages  meta-programming  terminology  formal-grammars  compilers  algorithms  search-algorithms  formal-languages  regular-languages  complexity-theory  satisfiability  sat-solvers  factoring  algorithms  randomized-algorithms  streaming-algorithm  in-place  algorithms  numerical-analysis  regular-languages  automata  finite-automata  regular-expressions  algorithms  data-structures  efficiency  coding-theory  algorithms  graph-theory  reference-request  education  books  formal-languages  context-free  proof-techniques  algorithms  graph-theory  greedy-algorithms  matroids  complexity-theory  graph-theory  np-complete  intuition  complexity-theory  np-complete  traveling-salesman  algorithms  graphs  probabilistic-algorithms  weighted-graphs  data-structures  time-complexity  priority-queues  computability  turing-machines  automata  pushdown-automata  algorithms  graphs  binary-trees  algorithms  algorithm-analysis  spanning-trees  terminology  asymptotics  landau-notation  algorithms  graph-theory  network-flow  terminology  computability  undecidability  rice-theorem  algorithms  data-structures  computational-geometry 

2
การเขียนโปรแกรมแบบไดนามิกที่มีปัญหาย่อยจำนวนมาก
การเขียนโปรแกรมแบบไดนามิกที่มีปัญหาย่อยจำนวนมาก ดังนั้นฉันพยายามแก้ไขปัญหานี้จาก Interview Street: ตารางเดิน (คะแนน 50 คะแนน) คุณกำลังตั้งอยู่ในตารางมิติที่ตำแหน่งX_n) ขนาดของกริดคือ ) ในขั้นตอนเดียวคุณสามารถเดินไปข้างหน้าหรือข้างหลังหนึ่งก้าวในมิติใด ๆ ก็ได้ (ดังนั้นจะมีการเคลื่อนไหวต่าง ๆ ที่เป็นไปได้เสมอ) คุณสามารถทำตามขั้นตอนหลายวิธีเช่นนี้โดยที่คุณไม่ออกจากกริดในทุกจุด คุณออกจากตารางถ้าใด ๆทั้งหรือD_i( x 1 , x 2 , … , x N ) ( D 1 , D 2 , … , D N N 2 N M x ฉันx ฉัน ≤ …

3
แนวคิดของการคำนวณที่มีประสิทธิภาพ
อัลกอริธึมเครื่องทัวริงของเวลาพหุนามพิจารณาว่ามีประสิทธิภาพหากเวลาที่ใช้ในกรณีเลวร้ายที่สุดนั้นถูก จำกัด ด้วยฟังก์ชันพหุนามในขนาดอินพุต ฉันตระหนักถึงวิทยานิพนธ์ที่แข็งแกร่งของโบสถ์ทัวริง: โมเดลการคำนวณที่สมเหตุสมผลสามารถจำลองได้อย่างมีประสิทธิภาพบนเครื่องทัวริง แต่ฉันไม่ทราบของทฤษฎีที่มั่นคงสำหรับการวิเคราะห์ความซับซ้อนของคอมพิวเตอร์ของอัลกอริทึมของแคลคูลัสλλ\lambda เรามีแนวคิดเกี่ยวกับประสิทธิภาพการคำนวณสำหรับการคำนวณทุกรูปแบบที่รู้จักหรือไม่? มีแบบจำลองใดบ้างที่มีประโยชน์สำหรับคำถามการคำนวณ แต่ไร้ประโยชน์สำหรับคำถามความซับซ้อนในการคำนวณ

3
โครงสร้างข้อมูลใดจะเก็บช่วงจำนวนเต็มได้อย่างมีประสิทธิภาพ
ฉันต้องการเก็บสะสมจำนวนเต็มในช่วง 0 ถึง 65535 เพื่อที่ฉันจะสามารถทำสิ่งต่อไปนี้ได้อย่างรวดเร็ว: ใส่จำนวนเต็มใหม่ แทรกช่วงของจำนวนเต็มต่อเนื่อง ลบจำนวนเต็ม ลบจำนวนเต็มทั้งหมดด้านล่างเป็นจำนวนเต็ม ทดสอบว่ามีจำนวนเต็มหรือไม่ ข้อมูลของฉันมีคุณสมบัติที่มักจะมีจำนวนเต็มในคอลเลกชัน ตัวอย่างเช่นการรวบรวมอาจ ณ เวลาหนึ่งจะเป็น: { 121, 122, 123, 124, 3201, 3202, 5897, 8912, 8913, 8914, 18823, 18824, 40891 } วิธีที่ง่ายที่สุดคือการใช้ต้นไม้ไบนารีแบบสมดุลเช่น C ++ std :: set อย่างไรก็ตามโดยที่ฉันไม่ได้ใช้ประโยชน์จากความจริงที่ว่าฉันมักจะมีจำนวนของตัวเลข บางทีอาจเป็นการดีกว่าที่จะเก็บสะสมของช่วง? แต่นั่นหมายความว่าช่วงจะต้องสามารถแยกย่อยได้ถ้าจำนวนเต็มที่อยู่ตรงกลางถูกลบออกหรือรวมเข้าด้วยกันถ้าช่องว่างระหว่างสองช่วงเต็ม มีโครงสร้างข้อมูลใดที่มีอยู่ซึ่งเหมาะสำหรับปัญหานี้หรือไม่?

4
ค้นหาเลขจำนวนเต็มสองตัวที่ใหญ่ที่สุดในห้าตัวโดยเร็วที่สุด
ฉันใช้รูปแบบของตัวกรองมัธยฐาน 5 ข้ามบนข้อมูลภาพบนระบบฝังตัวขนาดเล็กเช่น x x x x x อัลกอริทึมนั้นง่ายมาก: อ่านค่าจำนวนเต็ม 5 ค่าที่ได้รับ 2 ได้ทำการคำนวณสูงสุดแล้วเขียนผลจำนวนเต็มที่ไม่ได้ลงนาม สิ่งที่ดีคือค่าอินพุตจำนวนเต็ม 5 ค่าทั้งหมดอยู่ในช่วง 0-20 ค่าจำนวนเต็มจากการคำนวณยังอยู่ในช่วง 0-20! จากการทำโปรไฟล์ฉันพบว่าการได้ตัวเลขสองตัวที่ใหญ่ที่สุดคือคอขวดดังนั้นฉันจึงอยากให้ส่วนนี้เร็วขึ้น วิธีที่เร็วที่สุดในการทำการเลือกนี้คืออะไร? อัลกอริทึมปัจจุบันใช้มาสก์ 32 บิตที่มี 1 ในตำแหน่งที่กำหนดโดยตัวเลข 5 ตัวและฟังก์ชั่น CLZ ที่รองรับ HW ฉันควรจะบอกว่าซีพียูเป็นกรรมสิทธิ์ไม่สามารถใช้งานได้นอก บริษัท ของฉัน คอมไพเลอร์ของฉันคือ GCC แต่ปรับแต่งสำหรับ CPU นี้ ฉันลองคิดดูว่าฉันสามารถใช้ตารางการค้นหาได้หรือไม่ แต่ฉันไม่สามารถสร้างรหัสที่ฉันสามารถใช้ได้ ฉันมีรวมกันสำหรับการป้อนข้อมูลการสั่งซื้อ แต่ไม่ได้เป็นสิ่งที่สำคัญคือเป็นเช่นเดียวกับ21521521^5[5,0,0,0,5][5,5,0,0,0] มันเกิดขึ้นว่าฟังก์ชั่นแฮชด้านล่างสร้างแฮชที่สมบูรณ์แบบโดยไม่มีการชน! def hash(x): h = 0 …

1
รับสาย n เป็นหนึ่งในนั้นสตริงย่อยของอื่นหรือไม่
สมมติว่าเราจะได้รับคอลเลกชันของสตริงs_1ฉันต้องการทราบว่าสตริงเหล่านี้เป็นสตริงย่อยของสตริงอื่น ๆ ในคอลเลกชันหรือไม่ กล่าวอีกนัยหนึ่งฉันต้องการอัลกอริทึมสำหรับงานต่อไปนี้:nnnS1,…,SnS1,…,SnS_1,\dots,S_n อินพุต:S1,…,SnS1,…,SnS_1,\dots,S_n เอาท์พุท:ดังกล่าวว่าเป็นย่อยของและหรือไม่หากไม่เช่นที่มีอยู่i,ji,ji,jSiSiS_iSjSjS_ji≠ji≠ji\ne ji,ji,ji,j มีอัลกอริทึมที่มีประสิทธิภาพสำหรับสิ่งนี้หรือไม่? หากเราแทนที่ "substring" ด้วย "คำนำหน้า" จะมีอัลกอริทึมที่มีประสิทธิภาพ (เรียงลำดับสตริงจากนั้นทำการสแกนเชิงเส้นเพื่อเปรียบเทียบสตริงที่อยู่ติดกันการเรียงลำดับจะทำให้แน่ใจว่ามีสตริงย่อยติดกัน) แต่ดูเหมือนจะมีความท้าทายมากขึ้นในการทดสอบว่าสตริงใด ๆ เป็นสตริงย่อยของสตริงอื่น ๆ อัลกอริทึมที่ไร้เดียงสาคือการทำซ้ำในทุกคู่ของแต่ต้องใช้การทดสอบสตริงย่อยมีอัลกอริทึมที่มีประสิทธิภาพมากขึ้นหรือไม่?i,ji,ji,jΘ(n2)Θ(n2)\Theta(n^2) ฉันเดาว่าเราเรียกสิ่งนี้ว่า "การทดสอบสตริงย่อยทุกคู่" หรืออะไรทำนองนั้น เป้าหมายสูงสุดของฉันคือการตัดคอลเลคชั่นดังนั้นจึงไม่มีสตริงย่อยใด ๆ โดยลบแต่ละอันที่เป็นซับสตริงของอย่างอื่นในคอลเลกชัน

2
กำลังมองหาชุดการใช้งานที่มีหน่วยความจำขนาดเล็ก
ฉันกำลังมองหาการนำไปใช้ของชนิดข้อมูลชุด นั่นคือเราต้อง รักษาเซตย่อยแบบไดนามิก SSS (ขนาด nnn) จากเอกภพของขนาดด้วยยู= { 0 , 1 , 2 , 3 , … , u - 1 }ยู={0,1,2,3,...,ยู-1}U = \{0, 1, 2, 3, \dots , u – 1\}ยูยูu การดำเนินงานinsert(x)(เพิ่มองค์ประกอบxในSSS ) และfind(x)(ตรวจสอบว่าองค์ประกอบxเป็นสมาชิกของSSS ) ฉันไม่สนใจเกี่ยวกับการดำเนินงานอื่น ๆ สำหรับการวางแนวในการใช้งานฉันกำลังทำงานกับเรามีคุณ≈1010ยู≈1010u \approx 10^{10}{10} ฉันรู้ของการใช้งานที่ให้การดำเนินงานทั้งสองในเวลาO ( 1 )O(1)O(1)ดังนั้นฉันกังวลส่วนใหญ่เกี่ยวกับขนาดของโครงสร้างข้อมูล ฉันคาดว่าหลายพันล้านรายการรายการ แต่ต้องการหลีกเลี่ยงการแลกเปลี่ยนให้มากที่สุด ฉันยินดีเสียสละเวลาทำงานหากจำเป็น ค่าตัดจำหน่ายรันไทม์ของO ( …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.