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

อัลกอริทึมเป็นลำดับขั้นตอนที่กำหนดไว้อย่างดีซึ่งกำหนดวิธีแก้ปัญหาแบบนามธรรมให้กับปัญหา ใช้แท็กนี้เมื่อปัญหาของคุณเกี่ยวข้องกับการออกแบบอัลกอริทึม


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

4
อัลกอริทึมการจัดเรียง MapReduce ทำงานอย่างไร
หนึ่งในตัวอย่างที่หลักที่ใช้ในการแสดงให้เห็นถึงพลังของ MapReduce เป็นมาตรฐาน Terasort ฉันมีปัญหาในการทำความเข้าใจพื้นฐานของอัลกอริทึมการเรียงลำดับที่ใช้ในสภาพแวดล้อม MapReduce สำหรับฉันการเรียงลำดับเพียงแค่การกำหนดตำแหน่งสัมพัทธ์ขององค์ประกอบที่สัมพันธ์กับองค์ประกอบอื่น ๆ ทั้งหมด การเรียงลำดับจึงเกี่ยวข้องกับการเปรียบเทียบ "ทุกอย่าง" กับ "ทุกอย่าง" อัลกอริธึมการเรียงลำดับโดยเฉลี่ยของคุณ (ด่วนฟอง ... ) ทำสิ่งนี้ได้อย่างชาญฉลาด ในความคิดของฉันการแยกชุดข้อมูลออกเป็นหลาย ๆ ชิ้นหมายความว่าคุณสามารถจัดเรียงชิ้นส่วนเดียวได้จากนั้นคุณยังต้องรวมชิ้นส่วนเหล่านี้เข้ากับชุดข้อมูลที่จัดเรียงแบบ 'สมบูรณ์' ด้วยชุดข้อมูลเทราไบต์ที่กระจายอยู่ในระบบหลายพันระบบฉันคาดว่านี่จะเป็นงานที่ยิ่งใหญ่ แล้วสิ่งนี้ทำได้อย่างไร? อัลกอริทึมการจัดเรียง MapReduce นี้ทำงานอย่างไร ขอบคุณที่ช่วยให้ฉันเข้าใจ

14
ฟังก์ชันผกผันการคูณแบบโมดูลาร์ใน Python
โมดูล Python มาตรฐานบางตัวมีฟังก์ชันในการคำนวณค่าผกผันการคูณแบบโมดูลาร์หรือไม่y = invmod(x, p)เช่นจำนวนนั้นx*y == 1 (mod p)หรือไม่ Google ดูเหมือนจะไม่ได้ให้คำแนะนำที่ดีเกี่ยวกับเรื่องนี้ แน่นอนว่าเราสามารถสร้างอัลกอริธึมแบบยุคลิดแบบขยายที่ผลิตเองในบ้านได้ 10 สายแต่ทำไมต้องสร้างวงล้อขึ้นมาใหม่ ตัวอย่างเช่น Java BigIntegerมีmodInverseวิธีการ Python ไม่มีอะไรที่คล้ายกัน?
110 python  algorithm 

9
ฉันจะหาอัลกอริธึมการค้นหาไบนารี C ++ ที่“ มีประโยชน์” ได้จากที่ใด
ฉันต้องการอัลกอริทึมการค้นหาแบบไบนารีที่เข้ากันได้กับคอนเทนเนอร์ C ++ STL บางอย่างเช่นstd::binary_searchใน<algorithm>ส่วนหัวของไลบรารีมาตรฐานแต่ฉันต้องการให้มันส่งคืนตัววนซ้ำที่ชี้ไปที่ผลลัพธ์ไม่ใช่บูลีนธรรมดาที่บอกฉันว่ามีองค์ประกอบอยู่หรือไม่ (โปรดทราบว่าคณะกรรมการมาตรฐานคิดอะไรอยู่เมื่อพวกเขากำหนด API สำหรับ binary_search!) ข้อกังวลหลักของฉันที่นี่คือฉันต้องการความเร็วของการค้นหาแบบไบนารีดังนั้นแม้ว่าฉันจะสามารถค้นหาข้อมูลด้วยอัลกอริทึมอื่น ๆ ดังที่ได้กล่าวไว้ด้านล่าง แต่ฉันต้องการใช้ประโยชน์จากข้อเท็จจริงที่ว่าข้อมูลของฉันถูกจัดเรียงเพื่อให้ได้ประโยชน์จากไบนารี ค้นหาไม่ใช่การค้นหาเชิงเส้น จนถึงตอนนี้lower_boundและupper_boundล้มเหลวหากไม่มีข้อมูล: //lousy pseudo code vector(1,2,3,4,6,7,8,9,0) //notice no 5 iter = lower_bound_or_upper_bound(start,end,5) iter != 5 && iter !=end //not returning end as usual, instead it'll return 4 or 6 หมายเหตุ:ฉันยังใช้อัลกอริทึมที่ไม่ได้เป็นของเนมสเปซมาตรฐานตราบใดที่เข้ากันได้กับคอนเทนเนอร์ ชอบพูดboost::binary_search.

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

27
มีอัลกอริทึมที่สมบูรณ์แบบสำหรับหมากรุกหรือไม่? [ปิด]
ปิด . คำถามนี้เป็นคำถามความคิดเห็นตาม ขณะนี้ยังไม่ยอมรับคำตอบ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบได้ด้วยข้อเท็จจริงและการอ้างอิงโดยแก้ไขโพสต์นี้ ปิดให้บริการเมื่อปีที่แล้ว ปรับปรุงคำถามนี้ เมื่อเร็ว ๆ นี้ฉันกำลังสนทนากับบุคคลที่ไม่ได้เขียนโค้ดเกี่ยวกับความเป็นไปได้ของคอมพิวเตอร์หมากรุก ฉันไม่ได้เชี่ยวชาญในทฤษฎี แต่คิดว่าฉันรู้เพียงพอ ฉันแย้งว่าไม่สามารถมีเครื่องจักรทัวริงที่กำหนดได้ซึ่งจะชนะหรือนิ่งในหมากรุกเสมอไป ฉันคิดว่าแม้ว่าคุณจะค้นหาพื้นที่ทั้งหมดของการเคลื่อนไหวของผู้เล่น 1/2 ชุดทั้งหมดการเคลื่อนไหวเพียงครั้งเดียวที่คอมพิวเตอร์ตัดสินใจในแต่ละขั้นตอนนั้นขึ้นอยู่กับฮิวริสติก ด้วยพื้นฐานของฮิวริสติกจึงไม่จำเป็นต้องเอาชนะการเคลื่อนไหวทั้งหมดที่คู่ต่อสู้ทำได้ เพื่อนของฉันคิดในทางตรงกันข้ามว่าคอมพิวเตอร์จะชนะหรือเสมอกันหากไม่เคยทำ "ผิดพลาด" (คุณจะกำหนดอย่างนั้นหรือไม่) อย่างไรก็ตามในฐานะโปรแกรมเมอร์ที่ได้รับ CS ฉันรู้ดีว่าแม้แต่ทางเลือกที่ดีของคุณ - การให้คู่ต่อสู้ที่ชาญฉลาด - สามารถบังคับให้คุณทำผิดพลาดได้ในที่สุด แม้ว่าคุณจะรู้ทุกอย่าง แต่การเคลื่อนไหวครั้งต่อไปของคุณคือความโลภในการจับคู่ฮิวริสติก คอมพิวเตอร์หมากรุกส่วนใหญ่พยายามจับคู่เกมจบที่เป็นไปได้กับเกมที่กำลังดำเนินอยู่ซึ่งโดยพื้นฐานแล้วเป็นการย้อนกลับการเขียนโปรแกรมแบบไดนามิก อีกครั้ง endgame ที่เป็นปัญหาสามารถหลีกเลี่ยงได้ แก้ไข: อืม ... ดูเหมือนว่าฉันจะขนที่นี่ ดีแล้ว. ลองคิดดูอีกครั้งดูเหมือนว่าจะไม่มีปัญหาทางทฤษฎีในการแก้เกมที่ จำกัด เช่นหมากรุก ฉันจะเถียงว่าหมากรุกซับซ้อนกว่าหมากฮอสเล็กน้อยเนื่องจากการชนะไม่จำเป็นต้องเป็นตัวเลขที่เหนื่อยล้า แต่เป็นของเพื่อน คำยืนยันเดิมของฉันอาจผิด แต่แล้วอีกครั้งฉันคิดว่าฉันได้ชี้ให้เห็นบางสิ่งที่ยังไม่ได้รับการพิสูจน์อย่างเป็นที่พอใจ (อย่างเป็นทางการ) ฉันเดาว่าการทดลองทางความคิดของฉันคือเมื่อใดก็ตามที่มีการใช้กิ่งไม้ในต้นไม้อัลกอริทึม (หรือเส้นทางที่จดจำ) จะต้องหาเส้นทางไปยังคู่ครอง …

30
จะย้อนกลับรายการที่เชื่อมโยงเดี่ยวโดยใช้ตัวชี้สองตัวได้อย่างไร
ฉันสงสัยว่ามีตรรกะบางอย่างในการย้อนกลับรายการที่เชื่อมโยงโดยใช้ตัวชี้เพียงสองตัว ต่อไปนี้จะใช้ในการกลับรายการที่เชื่อมโยงเดียวโดยใช้ตัวชี้สามคือp, q, r: struct node { int data; struct node *link; }; void reverse() { struct node *p = first, *q = NULL, *r; while (p != NULL) { r = q; q = p; p = p->link; q->link = r; } first = q; } มีทางเลือกอื่นในการย้อนกลับรายการที่เชื่อมโยงหรือไม่? อะไรคือตรรกะที่ดีที่สุดในการย้อนกลับรายการที่เชื่อมโยงเพียงอย่างเดียวในแง่ของความซับซ้อนของเวลา

13
Quicksort: การเลือกเดือย
เมื่อใช้ Quicksort สิ่งหนึ่งที่คุณต้องทำคือการเลือกเดือย แต่เมื่อฉันดู pseudocode เช่นเดียวกับด้านล่างมันไม่ชัดเจนว่าฉันควรเลือก pivot อย่างไร องค์ประกอบแรกของรายการ? อื่น ๆ อีก? function quicksort(array) var list less, greater if length(array) ≤ 1 return array select and remove a pivot value pivot from array for each x in array if x ≤ pivot then append x to less else append x …

10
การเรียกซ้ำกับการทำซ้ำ
ถูกต้องหรือไม่ที่จะบอกว่าสามารถใช้การforวนซ้ำได้ทุกที่ และถ้าการเรียกซ้ำมักจะช้าลงเหตุผลทางเทคนิคที่เคยใช้การforวนซ้ำคืออะไร? และถ้าเป็นไปได้เสมอที่จะแปลงการเรียกซ้ำเป็นforลูปจะมีกฎง่ายๆในการทำหรือไม่?

16
จะแบ่งข้อความโดยไม่เว้นวรรคเป็นรายการคำได้อย่างไร?
อินพุต: "tableapplechairtablecupboard..."หลายคำ อะไรคืออัลกอริทึมที่มีประสิทธิภาพในการแยกข้อความดังกล่าวออกเป็นรายการคำและรับ: เอาท์พุต: ["table", "apple", "chair", "table", ["cupboard", ["cup", "board"]], ...] สิ่งแรกที่นึกถึงคือการอ่านคำที่เป็นไปได้ทั้งหมด (เริ่มต้นด้วยตัวอักษรตัวแรก) และค้นหาคำที่ยาวที่สุดเท่าที่จะเป็นไปได้ position=word_position+len(word) ปล. เรามีรายการคำที่เป็นไปได้ทั้งหมด คำว่า "ตู้" สามารถเป็น "ถ้วย" และ "กระดาน" เลือกที่ยาวที่สุด ภาษา: python แต่สิ่งสำคัญคืออัลกอริทึมเอง
109 python  algorithm  text  split 

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

16
วิธีที่ดีที่สุดในการหาตัวหารของจำนวนทั้งหมดคืออะไร?
นี่เป็นวิธีที่โง่มาก: def divisorGenerator(n): for i in xrange(1,n/2+1): if n%i == 0: yield i yield n ผลลัพธ์ที่ฉันต้องการจะคล้ายกับผลลัพธ์นี้ แต่ฉันต้องการอัลกอริทึมที่ชาญฉลาดกว่านี้ (อันนี้ช้าและโง่เกินไป :-) ฉันสามารถหาปัจจัยเฉพาะและความทวีคูณได้เร็วพอ ฉันมีเครื่องกำเนิดไฟฟ้าที่สร้างปัจจัยด้วยวิธีนี้: (factor1, multiplicity1) (factor2, multiplicity2) (factor3, multiplicity3) และอื่น ๆ ... คือผลลัพธ์ของ for i in factorGenerator(100): print i คือ: (2, 2) (5, 2) ฉันไม่รู้ว่าสิ่งนี้มีประโยชน์แค่ไหนสำหรับสิ่งที่ฉันต้องการทำ (ฉันเขียนโค้ดสำหรับปัญหาอื่น ๆ ) อย่างไรก็ตามฉันต้องการวิธีที่ชาญฉลาดกว่านี้ในการทำ for i in …
109 python  algorithm  math 

30
การนับการผกผันในอาร์เรย์
ฉันออกแบบขั้นตอนวิธีการที่จะทำต่อไปนี้: ให้อาร์เรย์A[1... n]สำหรับทุกค้นหาทุกคู่ผกผันดังกล่าวว่าi < j A[i] > A[j]ฉันใช้การเรียงลำดับการผสานและคัดลอกอาร์เรย์ A ไปยังอาร์เรย์ B แล้วเปรียบเทียบอาร์เรย์ทั้งสอง แต่ฉันมีช่วงเวลาที่ยากลำบากในการดูว่าจะใช้สิ่งนี้เพื่อหาจำนวนการผกผันได้อย่างไร คำแนะนำหรือความช่วยเหลือใด ๆ จะได้รับการชื่นชมอย่างมาก
108 algorithm 


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