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

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

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

12
อัลกอริทึมสำหรับการจำแนกคำสำหรับระดับความยากของเพชฌฆาตเป็น "ง่าย" "ปานกลาง" หรือ "ยาก"
อัลกอริทึมที่ดีในการกำหนด "ความยาก" ของคำสำหรับเกมเพชฌฆาตคืออะไรเพื่อให้เกมสามารถเลือกคำให้ตรงกับระดับความยากที่กำหนดได้ ความยากดูเหมือนจะเกี่ยวข้องกับจำนวนการเดาที่ต้องการความถี่สัมพัทธ์ของการใช้ตัวอักษร (เช่นคำที่มีตัวอักษรผิดปกติจำนวนมากอาจเดาได้ยากกว่า) และความยาวของคำ นอกจากนี้ยังมีปัจจัยอัตนัยบางอย่างที่จะ (พยายาม) ชดเชยเช่นความเป็นไปได้ที่คำจะอยู่ในคำศัพท์ของผู้เล่นและสามารถจดจำได้ทำให้สามารถเปลี่ยนจากกลยุทธ์การเดาตามความถี่ของตัวอักษรเพียงอย่างเดียวไปจนถึงการคาดเดาตามรายการ รู้จักคำที่ตรงกัน ความพยายามของฉันตอนนี้อยู่ด้านล่างในทับทิม มีข้อเสนอแนะเกี่ยวกับการปรับปรุงการจัดหมวดหมู่อย่างไร def classify_word(w) n = w.chars.to_a.uniq.length # Num. unique chars in w if n < 5 and w.length > 4 return WordDifficulty::Easy end if n > w.length / 2 return WordDifficulty::Hard else return WordDifficulty::Medium end end ฉันกำลังเขียนเกมเพชฌฆาตฉันอยากให้ลูก ๆ เล่น …
114 algorithm 

12
ขั้นตอนวิธีค่ามัธยฐานแบบโรลลิ่งใน C
ฉันกำลังทำงานกับอัลกอริทึมเพื่อใช้ตัวกรองค่ามัธยฐานแบบกลิ้ง (คล้ายกับตัวกรองค่าเฉลี่ยแบบกลิ้ง) ใน C. จากการค้นหาวรรณกรรมของฉันดูเหมือนว่าจะมีสองวิธีที่มีประสิทธิภาพพอสมควร อันดับแรกคือการจัดเรียงหน้าต่างเริ่มต้นของค่าจากนั้นทำการค้นหาแบบไบนารีเพื่อแทรกค่าใหม่และลบค่าที่มีอยู่ออกในการวนซ้ำแต่ละครั้ง ประการที่สอง (จาก Hardle and Steiger, 1995, JRSS-C, Algorithm 296) สร้างโครงสร้างฮีปแบบปลายคู่โดยมี Maxheap ที่ปลายด้านหนึ่งมินฮ็อปอีกด้านหนึ่งและค่ามัธยฐานอยู่ตรงกลาง สิ่งนี้ให้ผลอัลกอริทึมเวลาเชิงเส้นแทนที่จะเป็นหนึ่งที่เป็น O (n log n) นี่คือปัญหาของฉัน: การนำแบบเดิมมาใช้นั้นทำได้ แต่ฉันต้องเรียกใช้สิ่งนี้กับอนุกรมเวลานับล้านดังนั้นประสิทธิภาพจึงมีความสำคัญมาก ข้อหลังนี้พิสูจน์ได้ยากมากที่จะนำไปใช้ ฉันพบรหัสในไฟล์ Trunmed.c ของรหัสสำหรับแพ็คเกจสถิติของ R แต่มันค่อนข้างจะอ่านไม่ออก มีใครรู้จักการใช้งาน C ที่เขียนมาอย่างดีสำหรับอัลกอริธึมค่ามัธยฐานการหมุนเวลาเชิงเส้นหรือไม่? แก้ไข: ลิงก์ไปยังโค้ด Trunmed.c http://google.com/codesearch/p?hl=th&sa=N&cd=1&ct=rc#mYw3h_Lb_e0/R-2.2.0/src/library/stats/src/Trunmed.c
114 c  algorithm  r  statistics  median 

30
วิธีค้นหาชุดเหรียญทั้งหมดเมื่อได้รับค่าเงินดอลลาร์
ฉันพบโค้ดส่วนหนึ่งที่ฉันเขียนเพื่อเตรียมสัมภาษณ์เมื่อหลายเดือนก่อน ตามความคิดเห็นที่ฉันมีกำลังพยายามแก้ปัญหานี้: ระบุมูลค่าดอลลาร์เป็นเซนต์ (เช่น 200 = 2 ดอลลาร์ 1000 = 10 ดอลลาร์) ให้ค้นหาการรวมกันของเหรียญทั้งหมดที่รวมกันเป็นมูลค่าดอลลาร์ อนุญาตให้ใช้ได้เฉพาะเพนนี (1 ¢) นิกเกิล (5 ¢) สลึง (10 ¢) และควอเตอร์ (25 ¢) เท่านั้น ตัวอย่างเช่นหากได้รับ 100 คำตอบควรเป็น: 4 quarter(s) 0 dime(s) 0 nickel(s) 0 pennies 3 quarter(s) 1 dime(s) 0 nickel(s) 15 pennies etc. ฉันเชื่อว่าสิ่งนี้สามารถแก้ไขได้ทั้งแบบวนซ้ำและแบบวนซ้ำ วิธีแก้ปัญหาแบบวนซ้ำของฉันค่อนข้างมีปัญหาและฉันก็สงสัยว่าคนอื่นจะแก้ปัญหานี้อย่างไร ส่วนที่ยากของปัญหานี้คือการทำให้มีประสิทธิภาพมากที่สุด

27
จะตรวจสอบได้อย่างไรว่าต้นไม้ไบนารีสมดุลหรือไม่?
เป็นเวลานานจากโรงเรียนเหล่านั้น ได้งานเป็นผู้เชี่ยวชาญด้านไอทีที่โรงพยาบาล พยายามที่จะย้ายไปทำรายการจริงบางอย่างในขณะนี้ ตอนนี้ฉันกำลังทำงานกับต้นไม้ไบนารีและฉันสงสัยว่าอะไรจะเป็นวิธีที่ดีที่สุดในการพิจารณาว่าต้นไม้มีความสมดุลของความสูงหรือไม่ ฉันกำลังคิดบางอย่างจากสิ่งนี้: public boolean isBalanced(Node root){ if(root==null){ return true; //tree is empty } else{ int lh = root.left.height(); int rh = root.right.height(); if(lh - rh > 1 || rh - lh > 1){ return false; } } return true; } นี่เป็นการใช้งานที่ดีหรือไม่? หรือฉันขาดอะไรไป?

17
.NET - คุณจะแยกสตริงที่คั่นด้วย "ตัวพิมพ์ใหญ่" ออกเป็นอาร์เรย์ได้อย่างไร
ฉันจะไปจากสตริงนี้ได้อย่างไร: "ThisIsMyCapsDelimitedString" ... ถึงสตริงนี้: "This Is My Caps Delimited String" แนะนำให้ใช้โค้ดน้อยที่สุดใน VB.net แต่ยินดีต้อนรับ C # ไชโย!


8
ตารางแฮชสามารถเป็น O (1) ได้หรือไม่?
ดูเหมือนจะเป็นความรู้ทั่วไปที่ตารางแฮชสามารถบรรลุ O (1) ได้ แต่นั่นไม่เคยมีเหตุผลสำหรับฉัน ใครช่วยอธิบายหน่อยได้ไหม นี่คือสองสถานการณ์ที่อยู่ในใจ: A. ค่าเป็น int ที่เล็กกว่าขนาดของตารางแฮช ดังนั้นค่าจึงเป็นแฮชของตัวเองดังนั้นจึงไม่มีตารางแฮช แต่ถ้ามีก็จะเป็น O (1) และยังไม่มีประสิทธิภาพ B. คุณต้องคำนวณแฮชของค่า ในสถานการณ์นี้ลำดับคือ O (n) สำหรับขนาดของข้อมูลที่กำลังค้นหา การค้นหาอาจเป็น O (1) หลังจากที่คุณทำงาน O (n) แต่ก็ยังคงออกมาสู่ O (n) ในสายตาของฉัน และเว้นแต่คุณจะมีแฮชที่สมบูรณ์แบบหรือตารางแฮชขนาดใหญ่อาจมีหลายรายการต่อถัง ดังนั้นมันจึงกลายเป็นการค้นหาเชิงเส้นเล็ก ๆ ในบางจุดอยู่ดี ฉันคิดว่าตารางแฮชนั้นยอดเยี่ยม แต่ฉันไม่ได้รับการกำหนด O (1) เว้นแต่จะเป็นเพียงทฤษฎีเท่านั้น บทความของ Wikipedia สำหรับตารางแฮชอ้างอิงเวลาในการค้นหาคงที่อย่างสม่ำเสมอและไม่สนใจค่าใช้จ่ายของฟังก์ชันแฮชโดยสิ้นเชิง นั่นเป็นมาตรการที่ยุติธรรมจริงหรือ? แก้ไข:เพื่อสรุปสิ่งที่ฉันเรียนรู้: เป็นความจริงในทางเทคนิคเนื่องจากฟังก์ชันแฮชไม่จำเป็นต้องใช้ข้อมูลทั้งหมดในคีย์และอาจเป็นเวลาที่คงที่และเนื่องจากตารางที่มีขนาดใหญ่เพียงพอสามารถทำให้การชนกันลงไปใกล้เวลาคงที่ มันเป็นความจริงในทางปฏิบัติเพราะเมื่อเวลาผ่านไปมันจะใช้งานได้ตราบเท่าที่ฟังก์ชันแฮชและขนาดตารางถูกเลือกเพื่อลดการชนกันแม้ว่านั่นมักจะหมายถึงการไม่ใช้ฟังก์ชันแฮชเวลาคงที่

12
การเปลี่ยนแปลงอย่างรวดเร็ว -> จำนวน -> อัลกอริทึมการจับคู่การเปลี่ยนแปลง
ฉันมี n องค์ประกอบ ยกตัวอย่างเช่น 7 องค์ประกอบ 1234567 ฉันรู้ว่ามี 7! = 5040 การเรียงสับเปลี่ยนที่เป็นไปได้ของ 7 องค์ประกอบเหล่านี้ ฉันต้องการอัลกอริทึมที่รวดเร็วซึ่งประกอบด้วยสองฟังก์ชัน: f (ตัวเลข) จับคู่ตัวเลขระหว่าง 0 ถึง 5039 กับการเรียงสับเปลี่ยนที่ไม่ซ้ำกันและ f '(การเรียงสับเปลี่ยน) แมปการเปลี่ยนแปลงกลับไปยังหมายเลขที่สร้างขึ้น ฉันไม่สนใจเกี่ยวกับความสอดคล้องระหว่างตัวเลขและการเรียงสับเปลี่ยนการให้การเรียงสับเปลี่ยนแต่ละครั้งมีหมายเลขเฉพาะของตัวเอง ตัวอย่างเช่นฉันอาจมีฟังก์ชันที่ f(0) = '1234567' f'('1234567') = 0 อัลกอริทึมที่เร็วที่สุดที่นึกถึงคือการแจกแจงการเรียงสับเปลี่ยนทั้งหมดและสร้างตารางการค้นหาในทั้งสองทิศทางดังนั้นเมื่อสร้างตารางแล้ว f (0) จะเป็น O (1) และ f ('1234567') จะเป็น a ค้นหาสตริง อย่างไรก็ตามนี่คือความจำหิวโดยเฉพาะอย่างยิ่งเมื่อ n มีขนาดใหญ่ ใครสามารถเสนออัลกอริทึมอื่นที่จะทำงานได้อย่างรวดเร็วและไม่มีข้อเสียของหน่วยความจำ?

8
น้ำหนักติดลบโดยใช้ Algorithm ของ Dijkstra
ฉันพยายามทำความเข้าใจว่าทำไมอัลกอริทึมของ Dijkstra จึงไม่ทำงานกับน้ำหนักเชิงลบ อ่านตัวอย่างเกี่ยวกับเส้นทางที่สั้นที่สุดฉันกำลังพยายามหาสถานการณ์ต่อไปนี้: 2 A-------B \ / 3 \ / -2 \ / C จากเว็บไซต์: สมมติว่าขอบทั้งหมดชี้จากซ้ายไปขวาหากเราเริ่มต้นด้วย A อัลกอริทึมของ Dijkstra จะเลือกขอบ (A, x) โดยย่อขนาด d (A, A) + ความยาว (ขอบ) คือ (A, B) จากนั้นตั้งค่า d (A, B) = 2 และเลือกขอบอื่น (y, C) ลดขนาด d (A, y) + d (y, C); …

30
ค้นหาองค์ประกอบที่เล็กที่สุด kth ในโครงสร้างการค้นหาแบบไบนารีด้วยวิธีที่เหมาะสมที่สุด
ฉันต้องการค้นหาองค์ประกอบที่เล็กที่สุด kth ในโครงสร้างการค้นหาไบนารีโดยไม่ต้องใช้ตัวแปรคงที่ / ทั่วโลก จะบรรลุอย่างมีประสิทธิภาพได้อย่างไร? วิธีแก้ปัญหาที่ฉันคิดไว้คือการดำเนินการใน O (n) ซึ่งเป็นกรณีที่เลวร้ายที่สุดเนื่องจากฉันวางแผนที่จะทำการลัดเลาะตามลำดับของต้นไม้ทั้งหมด แต่ลึก ๆ แล้วฉันรู้สึกว่าไม่ได้ใช้คุณสมบัติ BST ที่นี่ วิธีแก้ปัญหาสมมติของฉันถูกต้องหรือมีวิธีที่ดีกว่านี้หรือไม่?

5
รากที่สองผกผันอย่างรวดเร็วผิดปกติของ John Carmack (Quake III)
John Carmack มีฟังก์ชันพิเศษในซอร์สโค้ด Quake III ซึ่งคำนวณค่ารากที่สองผกผันของการลอยซึ่งเร็วกว่าปกติ 4 เท่า(float)(1.0/sqrt(x))รวมถึง0x5f3759dfค่าคงที่แปลก ๆ ดูโค้ดด้านล่าง ใครช่วยอธิบายทีละบรรทัดว่าเกิดอะไรขึ้นที่นี่และเหตุใดจึงทำงานได้เร็วกว่าการใช้งานปกติมาก float Q_rsqrt( float number ) { long i; float x2, y; const float threehalfs = 1.5F; x2 = number * 0.5F; y = number; i = * ( long * ) &y; i = 0x5f3759df - ( i >> …

30
ผลคูณคาร์ทีเซียนของอาร์เรย์หลายรายการใน JavaScript
Наэтотвопросестьответына Stack Overflow нарусском : Декартовопроизведениенесколькихмассивов คุณจะใช้ผลิตภัณฑ์คาร์ทีเซียนของหลายอาร์เรย์ใน JavaScript ได้อย่างไร? ตัวอย่างเช่น, cartesian([1, 2], [10, 20], [100, 200, 300]) ควรกลับ [ [1, 10, 100], [1, 10, 200], [1, 10, 300], [2, 10, 100], [2, 10, 200] ... ]

4
เหตุใดจึงต้องใช้ Algorithm ของ Dijkstra หาก Breadth First Search (BFS) สามารถทำสิ่งเดียวกันได้เร็วขึ้น
สามารถใช้ทั้งสองเพื่อค้นหาเส้นทางที่สั้นที่สุดจากแหล่งเดียว BFS ทำงานในO(E+V)ขณะที่ Dijkstra วิ่งเข้าO((V+E)*log(V))มา นอกจากนี้ฉันเคยเห็น Dijkstra ใช้หลายอย่างเช่นในโปรโตคอลการกำหนดเส้นทาง เหตุใดจึงต้องใช้อัลกอริทึมของ Dijkstra หาก BFS สามารถทำสิ่งเดียวกันได้เร็วกว่า


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