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

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

8
Heap vs Binary Search Tree (BST)
ฮีปและ BST แตกต่างกันอย่างไร เมื่อใดจึงควรใช้ฮีปและเมื่อใช้ BST ถ้าคุณต้องการที่จะได้รับองค์ประกอบในการเรียงลำดับ BST จะดีกว่ากอง?

30
C ++: ปัดเศษขึ้นเป็นพหุคูณใกล้เคียงที่สุดของตัวเลข
ตกลง - ฉันเกือบจะอายโพสต์ที่นี่ (และฉันจะลบถ้าใครโหวตให้ปิด) เพราะดูเหมือนว่าคำถามพื้นฐาน นี่เป็นวิธีที่ถูกต้องในการปัดเศษขึ้นเป็นทวีคูณของตัวเลขใน C ++ หรือไม่? ฉันรู้ว่ามีคำถามอื่น ๆ ที่เกี่ยวข้องกับเรื่องนี้ แต่ฉันสนใจเป็นพิเศษที่จะรู้ว่าอะไรคือวิธีที่ดีที่สุดในการทำ C ++: int roundUp(int numToRound, int multiple) { if(multiple == 0) { return numToRound; } int roundDown = ( (int) (numToRound) / multiple) * multiple; int roundUp = roundDown + multiple; int roundCalc = roundUp; return (roundCalc); …
168 c++  algorithm  rounding 

18
อัลกอริธึมการค้นหาสตริงย่อยที่เร็วที่สุดคืออะไร
ตกลงดังนั้นฉันไม่ฟังเหมือนคนงี่เง่าฉันจะระบุปัญหา / ข้อกำหนดเพิ่มเติมอย่างชัดเจน: Needle (pattern) และ haystack (text to search) เป็นทั้งสตริง C-style ที่สิ้นสุดด้วยค่า null ไม่มีข้อมูลความยาวให้; หากจำเป็นจะต้องคำนวณ ฟังก์ชั่นควรกลับตัวชี้ไปที่การแข่งขันครั้งแรกหรือNULLหากไม่พบการแข่งขัน ไม่อนุญาตให้ใช้กรณีที่ล้มเหลว ซึ่งหมายความว่าอัลกอริทึมใด ๆ ที่มีความต้องการพื้นที่เก็บข้อมูลไม่คงที่ (หรือขนาดใหญ่คงที่) จะต้องมีกรณีสำรองสำหรับความล้มเหลวในการจัดสรร การใช้งานจะต้องอยู่ใน C แม้ว่าคำอธิบายที่ดีของอัลกอริทึม ... รวมถึงสิ่งที่ฉันหมายถึงโดย "เร็วที่สุด": กำหนดO(n)ที่n= ความยาวกองหญ้า (แต่อาจเป็นไปได้ที่จะใช้แนวคิดจากอัลกอริทึมซึ่งโดยปกติO(nm)(ตัวอย่างเช่นแฮชการกลิ้ง) หากรวมกับอัลกอริธึมที่แข็งแกร่งกว่าเพื่อให้ได้O(n)ผลลัพธ์ที่กำหนดขึ้นมา ไม่เคยทำ (วัดได้; นาฬิกาสองสามนาฬิกาif (!needle[1])ฯลฯ ไม่เป็นไร) แย่กว่าอัลกอริธึมกำลังเดรัจฉานไร้เดียงสาโดยเฉพาะอย่างยิ่งในเข็มสั้น ๆ ซึ่งน่าจะเป็นกรณีที่พบบ่อยที่สุด (ค่าโสหุ้ยการประมวลผลล่วงหน้าที่ไม่มีเงื่อนไขอย่างหนักนั้นไม่ดีเช่นเดียวกับที่พยายามปรับปรุงค่าสัมประสิทธิ์เชิงเส้นสำหรับเข็มทางพยาธิวิทยาด้วยค่าใช้จ่ายของเข็มที่มีแนวโน้ม) ได้รับเข็มและกองหญ้าโดยพลการประสิทธิภาพเทียบเคียงหรือดีกว่า (ไม่เลวร้ายยิ่งกว่าการค้นหานานกว่า 50%) เทียบกับอัลกอริทึมที่ใช้งานกันอย่างแพร่หลายอื่น ๆ นอกเหนือจากเงื่อนไขเหล่านี้ฉันยังคงนิยามคำว่า "เร็วที่สุด" ที่เปิดกว้าง …
165 c  algorithm  string  substring 

5
อัลกอริทึม Diff? [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้มีแนวโน้มที่จะเรียกร้องการอภิปรายการโต้แย้งการหยั่งเสียงหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา ฉันดูบ้าไปแล้วสำหรับคำอธิบายของอัลกอริธึม diff ที่ใช้งานได้และมีประสิทธิภาพ ที่ใกล้เคียงที่สุดที่ฉันได้รับคือลิงก์ไปยัง RFC 3284 (จากหลายบทความของ Eric Sink บล็อก) ซึ่งอธิบายในแง่ที่เข้าใจได้อย่างสมบูรณ์แบบรูปแบบข้อมูลที่เก็บผลลัพธ์ต่าง ๆ อย่างไรก็ตามไม่ได้กล่าวถึงว่าโปรแกรมจะบรรลุผลลัพธ์เหล่านี้อย่างไรในขณะที่ทำโปรแกรม ฉันพยายามค้นคว้าเรื่องความอยากรู้อยากเห็นแบบส่วนตัวเพราะฉันแน่ใจว่าจะต้องมีการแลกเปลี่ยนเมื่อใช้อัลกอริธึม diff ซึ่งค่อนข้างชัดเจนในบางครั้งเมื่อคุณดู diffs และสงสัยว่า "ทำไมโปรแกรม diff จึงเลือกสิ่งนี้เป็นการเปลี่ยนแปลง แทนที่จะเป็นเช่นนั้น "... ฉันจะหาคำอธิบายเกี่ยวกับอัลกอริทึมที่มีประสิทธิภาพที่จะสิ้นสุดการแสดงผล VCDIFF ได้อย่างไร อย่างไรก็ตามถ้าคุณพบคำอธิบายของอัลกอริทึมจริงที่ใช้โดย DiffMerge ของ SourceGear นั่นจะดีกว่า หมายเหตุ: การเรียงลำดับทั่วไปที่ยาวที่สุดดูเหมือนจะไม่ได้เป็นอัลกอริธึมที่ VCDIFF ใช้ดูเหมือนว่าพวกเขากำลังทำอะไรที่ฉลาดกว่าโดยใช้รูปแบบข้อมูลที่ใช้
164 algorithm  diff  vcdiff 

21
FastPass ของ Disney นั้นถูกต้องและ / หรือมีทฤษฎีคิวที่เป็นประโยชน์
ที่ Disney World พวกเขาใช้ระบบที่ชื่อว่าFastpassเพื่อสร้างบรรทัดที่สองและสั้นกว่าสำหรับการขี่ยอดนิยม แนวคิดคือคุณสามารถรอในบรรทัดมาตรฐานบ่อยครั้งด้วยการรอนานกว่าหนึ่งชั่วโมงหรือคุณสามารถรับ FastPass ซึ่งอนุญาตให้คุณกลับมาในช่วงเวลาที่กำหนด (โดยปกติจะใช้เวลาสองสามชั่วโมงต่อมา) และรอเพียง 10 นาที นาทีหรือน้อยกว่า คุณสามารถ "รอ" สำหรับการนั่งครั้งละหนึ่งครั้งด้วย FastPass ฉันพยายามคิดทฤษฎีคิวหลังแนวคิดนี้ แต่คำอธิบายเดียวที่ฉันพบคือมันถูกออกแบบมาเพื่อดึงคนออกจากสายและทำสิ่งต่าง ๆ ที่จะนำรายได้เพิ่มเติม (ช้อปปิ้งกิน ฯลฯ ) นี่คือสาเหตุที่ FastPass ถูกใช้งานหรือมีปัญหาประสิทธิภาพของผู้เข้าชมจริง ๆ มีแอปพลิเคชันซอฟต์แวร์ที่ใช้ตรรกะที่คล้ายกันหรือไม่ มีแอปพลิเคชันซอฟต์แวร์ที่ควรใช้ตรรกะที่คล้ายกันหรือไม่ ส่วนหนึ่งของปัญหาที่ฉันเห็นเมื่อใช้บางสิ่งที่คล้ายกันในซอฟต์แวร์คือมันขึ้นอยู่กับผู้ใช้ที่เลือกคิวของพวกเขา ทำกับรอบการรอที่เร็วกว่าในซอฟต์แวร์ฉันคิดว่าแอปพลิเคชันที่ดีของทฤษฎีนี้จะต้องมีแอพพลิเคชั่นที่ฉลาดพอที่จะรู้ว่าคิวใดที่จะวางคนตามความต้องการของพวกเขาโดยไม่ต้องเลือกผู้ใช้ปลายทาง

12
ใช้ Random และ Order เป็นอัลกอริธึมการสับเปลี่ยนที่ดีหรือไม่
ฉันได้อ่านบทความเกี่ยวกับขั้นตอนวิธีการสับเปลี่ยนต่างๆมากกว่าที่Coding สยองขวัญ ฉันได้เห็นว่ามีคนทำสิ่งนี้เพื่อสลับรายการ: var r = new Random(); var shuffled = ordered.OrderBy(x => r.Next()); นี่เป็นอัลกอริทึมสลับที่ดีหรือไม่ มันทำงานอย่างไรกันแน่? มันเป็นวิธีที่ยอมรับได้ของการทำเช่นนี้?
164 c#  algorithm  shuffle 

14
เพื่อนบ้านที่ใกล้ที่สุดในข้อมูลมิติสูง?
ฉันได้ถามคำถามสองสามวันย้อนหลังเกี่ยวกับวิธีค้นหาเพื่อนบ้านที่ใกล้ที่สุดสำหรับเวกเตอร์ที่กำหนด เวกเตอร์ของฉันตอนนี้มีขนาด 21 มิติและก่อนที่ฉันจะดำเนินการต่อไปเนื่องจากฉันไม่ได้มาจากโดเมนของการเรียนรู้ของเครื่องจักรและคณิตศาสตร์ฉันเริ่มถามคำถามพื้นฐานบางอย่างกับตัวเอง: ระยะทางแบบยุคลิดเป็นตัวชี้วัดที่ดีสำหรับการค้นหาเพื่อนบ้านที่ใกล้ที่สุดหรือไม่? ถ้าไม่ใช่ตัวเลือกของฉันคืออะไร นอกจากนี้แล้วจะมีวิธีการอย่างไรในการตัดสินใจเลือกขีด จำกัด ที่ถูกต้องในการพิจารณา k-neighbour มีการวิเคราะห์บางอย่างที่สามารถทำได้เพื่อหาค่านี้หรือไม่? ก่อนหน้านี้ฉันได้รับคำแนะนำให้ใช้ kd-Trees แต่หน้าวิกิพีเดียกล่าวอย่างชัดเจนว่าสำหรับมิติสูง kd-Tree นั้นเกือบจะเทียบเท่ากับการค้นหาที่โหดร้าย ในกรณีนั้นวิธีที่ดีที่สุดในการค้นหาเพื่อนบ้านที่ใกล้ที่สุดในชุดข้อมูลจุดล้านอย่างมีประสิทธิภาพคืออะไร? ใครช่วยอธิบายคำถามข้างต้นบางส่วน (หรือทั้งหมด) ได้บ้าง

2
หมายเลข 161803398 A เป็น 'พิเศษ' หรือไม่ ด้านในของคณิตศาสตร์สุ่ม ()
ฉันสงสัยว่าคำตอบคือ ' เพราะคณิตศาสตร์ ' แต่ฉันหวังว่าบางคนสามารถให้ข้อมูลเชิงลึกมากขึ้นในระดับพื้นฐาน ... วันนี้ฉันไปโผล่มาในซอร์สโค้ด BCL ดูว่ามีบางคลาสที่ฉันใช้มาก่อนอย่างไรบ้าง ฉันไม่เคยคิดเกี่ยวกับวิธีการสร้างตัวเลขสุ่ม (หลอก) มาก่อนดังนั้นฉันจึงตัดสินใจว่าจะทำอย่างไร แหล่งข้อมูลเต็มรูปแบบที่นี่: http://referencesource.microsoft.com/#mscorlib/system/random.cs#29 private const int MSEED = 161803398; ค่า MSEED นี้ใช้ทุกครั้งที่มีการสุ่มคลาส () คลาส อย่างไรก็ตามฉันเห็น 'หมายเลขเวทมนตร์' นี้ - 161803398 - และฉันไม่มีความคิดที่ผิดพลาดว่าเพราะเหตุใดจึงเลือกหมายเลขนั้น ไม่ใช่จำนวนเฉพาะหรือกำลังสองไม่ใช่จำนวนครึ่งทางที่ดูเหมือนจะสำคัญกว่า ฉันดูมันเป็นเลขฐานสองและเลขฐานสิบหกและมันก็ดูเหมือนตัวเลขกับฉัน ฉันพยายามค้นหาหมายเลขใน Google แต่ไม่พบอะไรเลย
162 c#  .net  algorithm  random 

9
มีวิธีวัดว่าเรียงรายการอย่างไร
มีวิธีวัดว่าเรียงรายการอย่างไร ฉันหมายถึงมันไม่เกี่ยวกับการรู้ว่ารายการเรียงลำดับหรือไม่ (บูลีน) แต่สิ่งที่เหมือนอัตราส่วนของ "การจัดเรียง" สิ่งที่ต้องการค่าสัมประสิทธิ์สหสัมพันธ์ในสถิติ ตัวอย่างเช่น, หากรายการของรายการอยู่ในลำดับจากนั้นอัตราจะเป็น 1.0 หากรายการถูกเรียงจากมากไปน้อยอัตราของมันจะเป็น -1.0 หากรายการเกือบเรียงจากน้อยไปมากอัตราของมันจะเป็น 0.9 หรือค่าใกล้เคียงกับ 1 หากไม่มีการเรียงลำดับรายการทั้งหมด (สุ่ม) อัตราจะใกล้เคียงกับ 0 ฉันกำลังเขียนห้องสมุดเล็ก ๆ ใน Scala เพื่อฝึกฝน ฉันคิดว่าอัตราการเรียงลำดับจะมีประโยชน์ แต่ฉันไม่พบข้อมูลเกี่ยวกับสิ่งนั้น บางทีฉันอาจไม่รู้เงื่อนไขที่เพียงพอสำหรับแนวคิด

14
JavaScript - รับวันแรกของสัปดาห์จากวันที่ปัจจุบัน
ฉันต้องการวิธีที่เร็วที่สุดเพื่อให้ได้วันแรกของสัปดาห์ ตัวอย่างเช่น: วันนี้คือวันที่ 11 พฤศจิกายนและวันพฤหัสบดี และฉันต้องการวันแรกของสัปดาห์นี้คือวันที่ 8 พฤศจิกายนและวันจันทร์ ฉันต้องการวิธีที่เร็วที่สุดสำหรับฟังก์ชั่นแผนที่ MongoDB ความคิดใด ๆ

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

4
เหตุใดจึงต้องการเริ่มต้น + (สิ้นสุด - เริ่ม) / 2 เหนือ (เริ่ม + จบ) / 2 เมื่อคำนวณตรงกลางของอาร์เรย์?
ฉันเคยเห็นโปรแกรมเมอร์ใช้สูตร mid = start + (end - start) / 2 แทนที่จะใช้สูตรที่ง่ายกว่า mid = (start + end) / 2 สำหรับการค้นหาองค์ประกอบกลางในอาร์เรย์หรือรายการ ทำไมพวกเขาถึงใช้อดีต?
160 c  algorithm 

30
วิธีผสานสองอาร์เรย์ที่เรียงลำดับไว้ในอาร์เรย์ที่เรียงลำดับแล้ว [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้นี้ ปิดให้บริการใน2 ปีที่ผ่านมา ปรับปรุงคำถามนี้ นี่เป็นคำถามของฉันในการสัมภาษณ์และนี่คือวิธีการแก้ปัญหาที่ฉันมีให้: public static int[] merge(int[] a, int[] b) { int[] answer = new int[a.length + b.length]; int i = 0, j = 0, k = 0; while (i < a.length && j < b.length) { if (a[i] < b[j]) { answer[k] = …

12
วิธีที่เร็วที่สุดในการแผ่หรือไม่ยุบวัตถุ JSON ที่ซ้อนกัน
ฉันโยนรหัสบางอย่างเข้าด้วยกันเพื่อทำให้วัตถุ JSON ที่ซับซ้อนและไม่ยุบ / แบนซ้อนกัน มันใช้งานได้ แต่มันช้าไปหน่อย (ทริกเกอร์คำเตือน 'long script') สำหรับชื่อที่แบนฉันต้องการ "." ในฐานะตัวคั่นและ [INDEX] สำหรับอาร์เรย์ ตัวอย่าง: un-flattened | flattened --------------------------- {foo:{bar:false}} => {"foo.bar":false} {a:[{b:["c","d"]}]} => {"a[0].b[0]":"c","a[0].b[1]":"d"} [1,[2,[3,4],5],6] => {"[0]":1,"[1].[0]":2,"[1].[1].[0]":3,"[1].[1].[1]":4,"[1].[2]":5,"[2]":6} ฉันสร้างเกณฑ์มาตรฐานที่ ~ จำลองกรณีการใช้ของฉันhttp://jsfiddle.net/WSzec/ รับวัตถุ JSON ที่ซ้อนกัน แผ่มัน มองผ่านและอาจแก้ไขได้ในขณะที่แบน ยกเลิกการย่อกลับเป็นรูปแบบซ้อนต้นฉบับที่จะส่งไป ฉันต้องการโค้ดที่เร็วกว่า: สำหรับการชี้แจงรหัสที่ทำให้เกณฑ์มาตรฐาน JSFiddle ( http://jsfiddle.net/WSzec/ ) เร็วขึ้นอย่างมาก (~ 20% + น่าจะดี) ใน …

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

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