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

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

17
วิธีแบ่งส่วนที่ทำซ้ำได้ในขนาดคงที่
เป็นไปได้ที่ซ้ำกัน: คุณแบ่งรายการออกเป็นชิ้นขนาดเท่า ๆ กันใน Python ได้อย่างไร? ฉันประหลาดใจที่ไม่พบฟังก์ชัน "แบตช์" ที่จะใช้เป็นอินพุตที่สามารถทำซ้ำได้ ตัวอย่างเช่น: for i in batch(range(0,10), 1): print i [0] [1] ... [9] หรือ: for i in batch(range(0,10), 3): print i [0,1,2] [3,4,5] [6,7,8] [9] ตอนนี้ฉันเขียนสิ่งที่ฉันคิดว่าเป็นเครื่องกำเนิดไฟฟ้าที่ค่อนข้างง่าย: def batch(iterable, n = 1): current_batch = [] for item in iterable: current_batch.append(item) if len(current_batch) == …

26
การรับพาวเวอร์เซตของชุดใน Java
ชุดอำนาจของ{1, 2, 3}คือ: {{}, {2}, {3}, {2, 3}, {1, 2}, {1, 3}, {1, 2, 3}, {1}} สมมติว่าฉันมีSetใน Java: Set<Integer> mySet = new HashSet<Integer>(); mySet.add(1); mySet.add(2); mySet.add(3); Set<Set<Integer>> powerSet = getPowerset(mySet); ฉันจะเขียนฟังก์ชัน getPowerset ด้วยลำดับความซับซ้อนที่ดีที่สุดได้อย่างไร (ฉันคิดว่ามันอาจจะเป็น O (2 ^ n))
86 java  algorithm  set  powerset 

13
อัลกอริทึม "ออนไลน์" (ตัววนซ้ำ) สำหรับการประมาณค่ามัธยฐานทางสถิติโหมดความเบ้ความเคอร์โทซิส?
มีอัลกอริทึมในการประมาณค่ามัธยฐานโหมดความเบ้และ / หรือ kurtosis ของชุดค่า แต่ไม่จำเป็นต้องจัดเก็บค่าทั้งหมดในหน่วยความจำในครั้งเดียว? ฉันต้องการคำนวณสถิติพื้นฐาน: ค่าเฉลี่ย: ค่าเฉลี่ยเลขคณิต ความแปรปรวน: ค่าเฉลี่ยของการเบี่ยงเบนกำลังสองจากค่าเฉลี่ย ค่าเบี่ยงเบนมาตรฐาน: รากที่สองของความแปรปรวน มัธยฐาน: ค่าที่แยกตัวเลขครึ่งหนึ่งที่ใหญ่กว่าออกจากครึ่งที่เล็กกว่า โหมด: ค่าที่พบบ่อยที่สุดในชุด ความเบ้: tl; ดร เคอร์โทซิส: tl; ดร สูตรพื้นฐานสำหรับการคำนวณสิ่งเหล่านี้คือเลขคณิตระดับประถมศึกษาและฉันก็รู้ดี มีไลบรารีสถิติมากมายที่ใช้งานได้เช่นกัน ปัญหาของฉันคือค่าจำนวนมาก (หลายพันล้าน) ในชุดที่ฉันจัดการ: การทำงานใน Python ฉันไม่สามารถสร้างรายการหรือแฮชด้วยองค์ประกอบหลายพันล้านรายการได้ แม้ว่าฉันจะเขียนสิ่งนี้ใน C แต่อาร์เรย์พันล้านองค์ประกอบก็ไม่สามารถใช้งานได้จริง ข้อมูลไม่ถูกจัดเรียง มันผลิตขึ้นแบบสุ่มทันทีโดยกระบวนการอื่น ๆ ขนาดของแต่ละชุดมีความผันแปรสูงและจะไม่ทราบขนาดล่วงหน้า ฉันได้หาวิธีจัดการค่าเฉลี่ยและความแปรปรวนได้ค่อนข้างดีแล้วโดยจะวนซ้ำตามแต่ละค่าในเซตตามลำดับใด ๆ (จริงๆแล้วในกรณีของฉันฉันจะเรียงลำดับตามลำดับที่สร้างขึ้น) นี่คืออัลกอริทึมที่ฉันใช้http://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#On-line_algorithm : เริ่มต้นตัวแปรสามตัว: count, sum และ sum_of_squares สำหรับแต่ละค่า: จำนวนที่เพิ่มขึ้น …

10
การเปลี่ยนเมทริกซ์ 4x4
ฉันกำลังมองหาตัวอย่างการใช้งานโค้ดเกี่ยวกับวิธีการสลับเมทริกซ์ 4x4 ฉันรู้ว่ามีองค์ประกอบแบบเกาส์เซียน, การสลายตัวของ LU ฯลฯ แต่แทนที่จะดูรายละเอียดฉันแค่มองหาโค้ดเพื่อทำสิ่งนี้ ภาษา C ++ ตามหลักการแล้วข้อมูลมีอยู่ในอาร์เรย์ 16 โฟลตตามลำดับคอลัมน์

19
วิธีที่มีประสิทธิภาพที่สุดในการค้นหาคำที่พบบ่อย K อันดับต้น ๆ ในลำดับคำใหญ่
อินพุต: จำนวนเต็มบวก K และข้อความขนาดใหญ่ ข้อความสามารถดูเป็นลำดับคำได้ เราจึงไม่ต้องกังวลว่าจะแยกย่อยออกเป็นลำดับคำอย่างไร ผลลัพธ์: คำ K ที่ใช้บ่อยที่สุดในข้อความ ความคิดของฉันเป็นแบบนี้ ใช้ตารางแฮชเพื่อบันทึกความถี่ของคำทั้งหมดในขณะที่สำรวจลำดับคำทั้งหมด ในขั้นตอนนี้คีย์คือ "word" และค่าคือ "word-frequency" ใช้เวลา O (n) เรียงคู่ (word, word-frequency); และที่สำคัญคือ "ความถี่ของคำ" สิ่งนี้ใช้เวลา O (n * lg (n)) ด้วยอัลกอริทึมการเรียงลำดับปกติ หลังจากจัดเรียงแล้วเราก็ใช้คำ K แรก ใช้เวลา O (K) สรุปได้ว่าเวลาทั้งหมดคือ O (n + n lg (n) + K), เนื่องจาก K มีขนาดเล็กกว่า N …

9
ทำไม DFS และไม่ใช่ BFS ในการค้นหาวัฏจักรในกราฟ
DFS ส่วนใหญ่ใช้เพื่อค้นหาวัฏจักรในกราฟไม่ใช่ BFS เหตุผลใด? ทั้งสองสามารถค้นหาได้ว่ามีการเยี่ยมชมโหนดแล้วหรือไม่ในขณะที่ข้ามต้นไม้ / กราฟ

11
การปิดบัง ID
ฉันกำลังมองหาวิธีเข้ารหัส / ทำให้รหัสจำนวนเต็มสับสนเป็นจำนวนเต็มอื่น แม่นยำกว่านั้นฉันต้องการฟังก์ชั่นint F(int x)ดังนั้น x <-> F (x) เป็นการโต้ตอบแบบตัวต่อตัว (ถ้า x! = y, F (x)! = F (y)) ให้ F (x) มันง่ายที่จะหา x - ดังนั้น F จึงไม่ใช่ฟังก์ชันแฮช กำหนด x และ F (x) มันยาก / เป็นไปไม่ได้ที่จะหา F (y) บางอย่างเช่นใช้x ^ 0x1234ไม่ได้ เพื่อความชัดเจนฉันไม่ได้มองหาโซลูชันการเข้ารหัสที่แข็งแกร่ง แต่เป็นการทำให้สับสนเท่านั้น ลองนึกภาพโปรแกรมประยุกต์บนเว็บที่มี URL ที่ชอบexample.com/profile/1, example.com/profile/2ฯลฯ โปรไฟล์ตัวเองไม่ได้เป็นความลับ แต่ฉันต้องการที่จะป้องกันไม่ให้ …

7
การวิเคราะห์อัลกอริทึมแบบตัดจำหน่ายคืออะไร? [ปิด]
ปิด . คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ขณะนี้ยังไม่ยอมรับคำตอบ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เน้นไปที่ปัญหาเดียวโดยแก้ไขโพสต์นี้เท่านั้น ปิดให้บริการใน5 ปีที่ผ่านมา ปรับปรุงคำถามนี้ แตกต่างจากการวิเคราะห์แบบไม่แสดงอาการอย่างไร? คุณใช้เมื่อใดและเพราะเหตุใด ฉันได้อ่านบทความที่ดูเหมือนว่าจะเขียนได้ดีเช่นนี้: http://www.ugrad.cs.ubc.ca/~cs320/2010W2/handouts/aa-nutshell.pdf http://www.cs.princeton.edu/~fiebrink/423/AmortizedAnalysisExplained_Fiebrink.pdf แต่ฉันยังไม่เข้าใจแนวคิดเหล่านี้ทั้งหมด ใครช่วยทำให้มันง่ายขึ้นหน่อยได้ไหม

3
การเติมโค้ดทำงานอย่างไร?
บรรณาธิการและ IDE จำนวนมากมีการเติมโค้ด บางคนมีความ "ฉลาด" มากคนอื่น ๆ ไม่ได้จริงๆ ฉันสนใจประเภทที่ฉลาดกว่า ตัวอย่างเช่นฉันเคยเห็น IDE ที่เสนอฟังก์ชันถ้าเป็น a) พร้อมใช้งานในขอบเขตปัจจุบัน b) ค่าที่ส่งคืนถูกต้อง (ตัวอย่างเช่นหลังจาก "5 + foo [tab]" จะมีเฉพาะฟังก์ชันที่ส่งคืนสิ่งที่สามารถเพิ่มลงในชื่อจำนวนเต็มหรือตัวแปรของประเภทที่ถูกต้องได้) ฉันยังเห็นว่าพวกเขาวางตัวเลือกที่ใช้บ่อยกว่าหรือยาวที่สุดไว้ข้างหน้า ของรายการ ฉันรู้ว่าคุณต้องแยกวิเคราะห์รหัส แต่โดยปกติแล้วในขณะที่แก้ไขโค้ดปัจจุบันไม่ถูกต้องจะมีข้อผิดพลาดทางไวยากรณ์อยู่ คุณจะแยกวิเคราะห์บางสิ่งได้อย่างไรเมื่อมันไม่สมบูรณ์และมีข้อผิดพลาด นอกจากนี้ยังมีข้อ จำกัด ด้านเวลา การทำให้เสร็จสิ้นจะไร้ประโยชน์หากใช้เวลาไม่กี่วินาทีในการสร้างรายการ บางครั้งอัลกอริทึมการทำให้สมบูรณ์จะเกี่ยวข้องกับคลาสหลายพันคลาส อัลกอริทึมและโครงสร้างข้อมูลที่ดีสำหรับสิ่งนี้คืออะไร?

13
การเลือกสเกลเชิงเส้นที่น่าสนใจสำหรับแกน Y ของกราฟ
ฉันกำลังเขียนโค้ดเล็กน้อยเพื่อแสดงกราฟแท่ง (หรือเส้น) ในซอฟต์แวร์ของเรา ทุกอย่างเป็นไปด้วยดี สิ่งที่ทำให้ฉันนิ่งงันคือการติดป้ายแกน Y ผู้โทรสามารถบอกฉันได้ว่าพวกเขาต้องการให้มาตราส่วน Y ติดป้ายกำกับไว้อย่างประณีตเพียงใด แต่ดูเหมือนว่าฉันจะติดป้ายกำกับพวกเขาในลักษณะที่ "น่าสนใจ" อย่างแน่นอน ฉันไม่สามารถบรรยายได้ว่า "น่าดึงดูด" และอาจเป็นคุณด้วยไม่ได้ แต่เรารู้เมื่อเห็นใช่ไหม ดังนั้นหากจุดข้อมูลคือ: 15, 234, 140, 65, 90 และผู้ใช้ขอ 10 ป้ายกำกับบนแกน Y การใช้กระดาษและดินสอจบลงเล็กน้อย: 0, 25, 50, 75, 100, 125, 150, 175, 200, 225, 250 ดังนั้นจึงมี 10 อยู่ตรงนั้น (ไม่รวม 0) อันสุดท้ายขยายเกินค่าสูงสุด (234 <250) และเพิ่มขึ้นอย่าง "ดี" ของแต่ละค่า 25 …
84 algorithm  math  graph 

25
วิธีที่สวยงามที่สุดในการสร้างจำนวนเฉพาะ [ปิด]
ปิด . คำถามนี้เป็นคำถามความคิดเห็นตาม ขณะนี้ยังไม่ยอมรับคำตอบ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบได้ด้วยข้อเท็จจริงและการอ้างอิงโดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา ปรับปรุงคำถามนี้ วิธีใดที่สวยงามที่สุดในการใช้ฟังก์ชันนี้: ArrayList generatePrimes(int n) ฟังก์ชันนี้จะสร้างช่วงแรกn(แก้ไข: ที่n>1) ดังนั้นgeneratePrimes(5)จะส่งกลับไฟล์ArrayList{2, 3, 5, 7, 11}ด้วย (ฉันกำลังทำสิ่งนี้ใน C # แต่ฉันพอใจกับการใช้งาน Java - หรือภาษาอื่น ๆ ที่คล้ายกันสำหรับเรื่องนั้น (ไม่ใช่ Haskell)) ฉันรู้วิธีเขียนฟังก์ชันนี้ แต่เมื่อคืนที่ผ่านมามันไม่ได้ออกมาดีอย่างที่หวัง นี่คือสิ่งที่ฉันคิดขึ้น: ArrayList generatePrimes(int toGenerate) { ArrayList primes = new ArrayList(); primes.Add(2); primes.Add(3); while (primes.Count < toGenerate) { …
84 c#  java  algorithm  primes 

4
ค่าใช้จ่ายขั้นต่ำในการเชื่อมต่อเกาะทั้งหมดคืออะไร?
มีตารางของขนาดN x M เซลล์บางคนเป็นหมู่เกาะที่แสดงโดย '0' และคนอื่น ๆ ที่มีน้ำ เซลล์น้ำแต่ละเซลล์จะมีตัวเลขแสดงถึงต้นทุนของสะพานที่สร้างขึ้นบนเซลล์นั้น คุณต้องหาต้นทุนขั้นต่ำที่เกาะทั้งหมดสามารถเชื่อมต่อได้ เซลล์เชื่อมต่อกับเซลล์อื่นถ้ามันใช้ขอบหรือจุดสุดยอดร่วมกัน อัลกอริทึมใดที่สามารถใช้แก้ปัญหานี้ได้ สิ่งที่สามารถใช้เป็นแนวทางบังคับเดรัจฉานได้ถ้าค่าของ N, M น้อยมากให้พูดว่า NxM <= 100? ตัวอย่าง : ในภาพที่ระบุเซลล์สีเขียวระบุเกาะเซลล์สีน้ำเงินหมายถึงน้ำและเซลล์สีฟ้าอ่อนบ่งบอกเซลล์ที่ควรสร้างสะพาน ดังนั้นภาพต่อไปนี้คำตอบจะ17 เริ่มแรกฉันคิดว่าจะทำเครื่องหมายเกาะทั้งหมดเป็นโหนดและเชื่อมต่อเกาะทุกคู่ด้วยสะพานที่สั้นที่สุด จากนั้นปัญหาอาจลดลงเป็นต้นไม้ที่มีระยะห่างน้อยที่สุด แต่ด้วยวิธีนี้ฉันพลาดกรณีที่ขอบทับซ้อนกัน ตัวอย่างเช่นในภาพต่อไปนี้ระยะทางที่สั้นที่สุดระหว่างสองเกาะใด ๆ คือ7 (ทำเครื่องหมายด้วยสีเหลือง) ดังนั้นการใช้ต้นไม้ที่มีระยะห่างขั้นต่ำคำตอบจะเป็น14แต่คำตอบควรเป็น11 (ทำเครื่องหมายด้วยสีฟ้าอ่อน)

7
จำนวนสูงสุดของสตริงย่อยที่ไม่ซ้ำกันจากพาร์ติชัน
ฉันแก้ไขชื่อเพื่อให้เข้าใจได้ง่ายขึ้น นี่คือคำถามรุ่นโดยละเอียด: เรามีสตริงs และต้องการที่จะแยกไว้ในสตริง สตริงย่อยแต่ละอันจะแตกต่างจากกัน จำนวนสูงสุดของซับสเตรทเฉพาะที่เรามีได้จากการตัดหนึ่งครั้ง ในคำอื่น ๆ สิ่งที่เป็นจำนวนสูงสุดของสตริงที่ไม่ซ้ำกันที่ concatenate sไปยังแบบฟอร์ม นี่คือตัวอย่างบางส่วน: Example 1 s = 'aababaa' output = 4 Explain: we can split `s` into aa|b|aba|a or aab|a|b|aa, and 4 is the max number of substrings we can get from one split. Example 2 s = 'aba' output = …

3
สำหรับจำนวนเต็มสองจำนวน A และ B ให้หาคู่ของตัวเลข X และ Y ที่ A = X * Y และ B = X xor Y
ฉันกำลังดิ้นรนกับปัญหานี้ฉันพบในหนังสือการเขียนโปรแกรมการแข่งขัน แต่ไม่มีวิธีแก้ปัญหาที่จะทำ สำหรับสองจำนวนเต็มAและB (สามารถใส่ในประเภทจำนวนเต็ม 64- บิต) โดยที่Aเป็นเลขคี่หาคู่ของตัวเลข X และ Y เพื่อให้A = X * Y และB = X x หรือ Y วิธีการของฉันคือรายการ ตัวหารทั้งหมดของ A และลองจับคู่ตัวเลขภายใต้ sqrt (A) กับตัวเลขเหนือ sqrt (A) ที่คูณถึงA และดูว่า xor ของพวกเขาเท่ากับBหรือไม่ แต่ฉันไม่รู้ว่ามันมีประสิทธิภาพเพียงพอหรือไม่ อะไรจะเป็นทางออกที่ดี / อัลกอริทึมสำหรับปัญหานี้

3
ได้รับจำนวนเต็ม N. อะไรคือจำนวนเต็มเล็กที่สุดที่มากกว่า N ที่มีตัวเลขเป็น 0 หรือ 1 เท่านั้น
ฉันมีจำนวนเต็ม N. ฉันต้องไปหามากขึ้นเลขที่เล็กที่สุดกว่าไม่มีข้อความที่ไม่ประกอบด้วยหลักอื่น ๆ ที่ไม่ใช่ 0 หรือ 1 ตัวอย่างเช่นหากแล้วคำตอบคือN = 12 100ฉันเขียนรหัสวิธีบังคับเดรัจฉานใน C ++ int main() { long long n; cin >> n; for (long long i = n + 1; ; i++) { long long temp = i; bool ok = true; while (temp != 0) { if ( …
15 c++  algorithm 

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