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

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


30
ฉันจะตรวจสอบว่าอาร์เรย์มีค่าใน JavaScript ได้อย่างไร
วิธีที่รัดกุมและมีประสิทธิภาพมากที่สุดในการค้นหาว่าอาร์เรย์ JavaScript มีค่าคืออะไร? นี่เป็นวิธีเดียวที่ฉันรู้: function contains(a, obj) { for (var i = 0; i < a.length; i++) { if (a[i] === obj) { return true; } } return false; } มีวิธีที่ดีกว่าและรัดกุมกว่านี้หรือไม่ คำถามนี้เกี่ยวข้องกับคำถาม Stack Overflow มากที่สุดวิธีที่ดีที่สุดในการค้นหารายการในอาร์เรย์ JavaScript หรือไม่ indexOfซึ่งอยู่ในการหาวัตถุในอาร์เรย์ใช้

30
ฉันจะจับคู่ถุงเท้าจากกองได้อย่างมีประสิทธิภาพได้อย่างไร
เมื่อวานฉันจับคู่ถุงเท้าจากผ้าที่สะอาดและคิดวิธีที่ฉันทำมันไม่มีประสิทธิภาพมาก ฉันทำการค้นหาที่ไร้เดียงสา - เลือกถุงเท้าหนึ่งอันและ "วนซ้ำ" กองเพื่อหาคู่ เรื่องนี้ต้องมีการทำซ้ำมากกว่า n / 2 * n / 4 n = 2 /8 ถุงเท้าโดยเฉลี่ย ในฐานะนักวิทยาศาสตร์คอมพิวเตอร์ฉันคิดว่าฉันจะทำอะไรได้บ้าง แน่นอนว่าการคัดแยก (ตามขนาด / สี / ... ) เป็นสิ่งสำคัญที่จะทำให้ได้โซลูชั่น O (NlogN) การแฮ็กหรือโซลูชันอื่น ๆ ที่ไม่ใช่สถานที่ไม่ใช่ตัวเลือกเพราะฉันไม่สามารถทำซ้ำถุงเท้าของฉันได้ (แม้ว่ามันอาจจะดีถ้าฉันทำได้) ดังนั้นคำถามคือโดยทั่วไป: ด้วยnถุงเท้าคู่หนึ่งที่ประกอบด้วย2nองค์ประกอบ (สมมติว่าถุงเท้าแต่ละคู่มีคู่ที่ตรงกันหนึ่งคู่) วิธีที่ดีที่สุดในการจับคู่พวกเขาให้มีประสิทธิภาพคืออะไรกับพื้นที่พิเศษลอการิทึมมากที่สุด? (ฉันเชื่อว่าฉันสามารถจำจำนวนข้อมูลนั้นได้หากจำเป็น) ฉันจะขอบคุณคำตอบที่กล่าวถึงประเด็นต่อไปนี้: วิธีแก้ปัญหาเชิงทฤษฎีทั่วไปสำหรับถุงเท้าจำนวนมาก จำนวนถุงเท้าที่แท้จริงนั้นไม่ใหญ่มากฉันไม่เชื่อคู่สมรสของฉันและฉันมีมากกว่า 30 คู่ (และมันค่อนข้างง่ายที่จะแยกแยะความแตกต่างระหว่างถุงเท้าของฉันและเธอ; สิ่งนี้สามารถใช้ได้เช่นกัน?) มันเทียบเท่ากับปัญหาความแตกต่างขององค์ประกอบหรือไม่

14
อัลกอริธึมที่เหมาะสมที่สุดสำหรับเกม 2048 คืออะไร?
ฉันได้สะดุดเมื่อเร็ว ๆ นี้เมื่อเกม2048 คุณรวมไพ่ที่คล้ายกันโดยเลื่อนพวกมันไปในทิศทางใดก็ได้ในสี่ทิศทางเพื่อสร้างแผ่น "ใหญ่กว่า" หลังจากที่ย้ายแต่ละกระเบื้องใหม่จะปรากฏขึ้นในตำแหน่งที่ว่างเปล่าสุ่มที่มีค่าเป็นอย่างใดอย่างหนึ่งหรือ2 เกมสิ้นสุดลงเมื่อกล่องทั้งหมดจะเต็มไปและมีการเคลื่อนไหวที่สามารถผสานกระเบื้องไม่มีหรือคุณสร้างกระเบื้องที่มีค่าของ42048 หนึ่งฉันต้องปฏิบัติตามกลยุทธ์ที่กำหนดไว้อย่างดีเพื่อให้บรรลุเป้าหมาย ดังนั้นฉันคิดว่าจะเขียนโปรแกรมสำหรับมัน อัลกอริทึมปัจจุบันของฉัน: while (!game_over) { for each possible move: count_no_of_merges_for_2-tiles and 4-tiles choose the move with a large number of merges } สิ่งที่ฉันกำลังทำอยู่คือ ณ จุดใดฉันจะพยายามผสานรวมไพ่กับค่า2และ4นั่นคือฉันพยายามมี2และ4เรียงต่อกันอย่างน้อยที่สุดเท่าที่จะทำได้ ถ้าฉันลองแบบนี้ไพ่อื่น ๆ ทั้งหมดจะถูกรวมเข้าด้วยกันโดยอัตโนมัติและกลยุทธ์ดูดี แต่เมื่อฉันใช้อัลกอริทึมนี้จริง ๆ ฉันจะได้รับเพียงประมาณ 4000 คะแนนก่อนที่เกมจะยุติ คะแนนสูงสุด AFAIK มากกว่า 20,000 คะแนนเล็กน้อยซึ่งใหญ่กว่าคะแนนปัจจุบันของฉันเล็กน้อย มีอัลกอริทึมที่ดีกว่าข้างต้นหรือไม่?


24
การประมวลผลภาพ: การปรับปรุงอัลกอริทึมสำหรับการรับรู้ 'Coca-Cola Can'
หนึ่งในโครงการที่น่าสนใจที่สุดที่ผมเคยทำงานอยู่ในคู่ที่ผ่านมาของปีที่ผ่านมาเป็นโครงการเกี่ยวกับการประมวลผลภาพ เป้าหมายคือการพัฒนาระบบเพื่อให้สามารถรู้จัก'กระป๋อง' ของ Coca-Cola (โปรดทราบว่าฉันกำลังเน้นคำว่า 'กระป๋อง' คุณจะเห็นว่าทำไมในหนึ่งนาที) คุณสามารถดูตัวอย่างด้านล่างโดยที่สามารถรู้จักในสี่เหลี่ยมสีเขียวพร้อมสเกลและการหมุน ข้อ จำกัด บางประการเกี่ยวกับโครงการ: พื้นหลังอาจมีเสียงดังมาก สามารถจะมีขนาดหรือหมุนหรือรสนิยมแม้กระทั่ง (ภายในขอบเขตที่เหมาะสม) ภาพอาจมีความเลือนในระดับหนึ่ง (รูปทรงอาจไม่ตรงทั้งหมด) อาจมีขวด Coca-Cola ในภาพและอัลกอริทึมควรตรวจจับความสามารถเท่านั้น! ความสว่างของภาพอาจแตกต่างกันมาก (ดังนั้นคุณไม่สามารถเชื่อถือได้ "มากเกินไป" ในการตรวจจับสี) สามารถจะถูกซ่อนไว้บางส่วนที่ด้านข้างหรือตรงกลางและอาจจะเป็นส่วนหนึ่งที่ซ่อนอยู่เบื้องหลังขวด ในภาพอาจจะไม่สามารถทำได้ซึ่งในกรณีนี้คุณต้องไม่พบอะไรเลยและเขียนข้อความโดยบอกว่าเป็นเช่นนั้น ดังนั้นคุณสามารถจบลงด้วยสิ่งที่ยุ่งยากเช่นนี้ (ซึ่งในกรณีนี้อัลกอริทึมของฉันล้มเหลวโดยสิ้นเชิง): ฉันทำโครงการนี้เมื่อไม่นานมานี้และสนุกกับการทำมันมากและฉันก็มีการนำไปใช้ที่เหมาะสม นี่คือรายละเอียดบางอย่างเกี่ยวกับการใช้งานของฉัน: ภาษา : เสร็จใน C ++ โดยใช้ไลบรารีOpenCV การประมวลผลล่วงหน้า : สำหรับการประมวลผลภาพล่วงหน้าเช่นเปลี่ยนภาพให้อยู่ในรูปแบบดิบมากขึ้นเพื่อมอบให้กับอัลกอริทึมฉันใช้ 2 วิธี: การเปลี่ยนโดเมนสีจาก RGB เป็นHSVและการกรองตามเฉดสี "สีแดง" ความอิ่มตัวของสีเหนือขีด จำกัด ที่กำหนดเพื่อหลีกเลี่ยงสีที่มีลักษณะคล้ายสีส้มและการกรองค่าต่ำเพื่อหลีกเลี่ยงโทนมืด ผลลัพธ์ที่ได้คือภาพขาวดำไบนารีซึ่งพิกเซลสีขาวทั้งหมดจะเป็นตัวแทนของพิกเซลที่ตรงกับเกณฑ์นี้ เห็นได้ชัดว่ายังมีอึมากในภาพ แต่จะช่วยลดจำนวนมิติที่คุณต้องทำงานด้วย …

20
อัลกอริทึมที่ดีที่สุดสำหรับการเอาชนะ GetHashCode คืออะไร
ใน. NET GetHashCodeวิธีนี้ถูกใช้ในหลาย ๆ ที่ทั่วทั้งไลบรารีคลาสฐาน. NET การใช้อย่างถูกต้องเป็นสิ่งสำคัญโดยเฉพาะอย่างยิ่งในการค้นหารายการอย่างรวดเร็วในคอลเลกชันหรือเมื่อพิจารณาความเท่าเทียมกัน มีอัลกอริทึมมาตรฐานหรือวิธีปฏิบัติที่ดีที่สุดเกี่ยวกับวิธีการใช้GetHashCodeสำหรับคลาสที่กำหนดเองของฉันดังนั้นฉันจึงไม่ลดประสิทธิภาพการทำงานหรือไม่

30
คำถามสัมภาษณ์ง่ายขึ้นยากขึ้น: ตัวเลขที่ระบุ 1..100, ค้นหาหมายเลขที่หายไปที่ระบุว่า k หายไปอย่างแน่นอน
ฉันมีประสบการณ์การสัมภาษณ์งานที่น่าสนใจสักพัก คำถามเริ่มง่ายจริงๆ: ไตรมาสที่ 1 : เรามีถุงที่มีตัวเลข1, 2, 3, ... 100, แต่ละหมายเลขปรากฏขึ้นหนึ่งครั้งดังนั้นจึงมี 100 หมายเลข ตอนนี้จะมีการสุ่มเลือกหมายเลขหนึ่งออกจากกระเป๋า ค้นหาหมายเลขที่หายไป ฉันเคยได้ยินคำถามสัมภาษณ์นี้มาก่อนแน่นอนดังนั้นฉันจึงตอบอย่างรวดเร็วไปตาม: A1 : ผลรวมของตัวเลข1 + 2 + 3 + … + Nคือ(N+1)(N/2)(ดูWikipedia: ผลรวมของชุดเลขคณิต ) สำหรับผลรวมคือN = 1005050 5050ดังนั้นหากตัวเลขทั้งหมดที่มีอยู่ในถุงรวมจะตรง เนื่องจากหมายเลขหนึ่งหายไปผลรวมจะน้อยกว่านี้และความแตกต่างคือจำนวนนั้น ดังนั้นเราสามารถหาจำนวนที่ขาดหายไปในO(N)เวลาและO(1)สถานที่ เมื่อมาถึงจุดนี้ฉันคิดว่าฉันทำได้ดี แต่จู่ ๆ คำถามก็ถึงจุดเปลี่ยนที่ไม่คาดคิด: Q2 : ถูกต้อง แต่ตอนนี้คุณจะทำอย่างไรถ้าหมายเลขสองหายไป? ฉันไม่เคยเห็น / ได้ยิน / พิจารณาการเปลี่ยนแปลงนี้มาก่อนดังนั้นฉันจึงตื่นตระหนกและไม่สามารถตอบคำถามได้ ผู้สัมภาษณ์ยืนยันในการรู้กระบวนการคิดของฉันดังนั้นฉันจึงบอกว่าบางทีเราสามารถรับข้อมูลเพิ่มเติมได้โดยเปรียบเทียบกับผลิตภัณฑ์ที่คาดหวังหรืออาจทำครั้งที่สองหลังจากรวบรวมข้อมูลบางอย่างจากการผ่านครั้งแรก ฯลฯ …
1146 algorithm  math 

7
อัลกอริทึมทรีต่อท้ายของ Ukkonen เป็นภาษาอังกฤษธรรมดา
ตอนนี้ฉันรู้สึกหนานิดหน่อย ฉันใช้เวลาหลายวันพยายามคลุมศีรษะของฉันอย่างเต็มที่เกี่ยวกับการสร้างต้นไม้ต่อท้าย แต่เนื่องจากฉันไม่มีภูมิหลังทางคณิตศาสตร์คำอธิบายมากมายทำให้ฉันหลงเพราะพวกเขาเริ่มใช้สัญลักษณ์ทางคณิตศาสตร์มากเกินไป คำอธิบายที่ดีที่สุดที่ฉันพบคือการค้นหาสตริงอย่างรวดเร็วด้วยคำต่อท้ายต้นไม้แต่เขาคัดสรรจุดต่าง ๆ และบางแง่มุมของอัลกอริทึมยังไม่ชัดเจน คำอธิบายทีละขั้นตอนของอัลกอริทึมที่นี่ใน Stack Overflow จะมีค่าสำหรับคนอื่น ๆ นอกเหนือจากฉันฉันแน่ใจ สำหรับการอ้างอิงนี่เป็นบทความของ Ukkonen เกี่ยวกับอัลกอริทึม: http://www.cs.helsinki.fi/u/ukkonen/SuffixT1withFigs.pdf ความเข้าใจพื้นฐานของฉันจนถึงตอนนี้: ฉันต้องวนซ้ำคำนำหน้า P แต่ละตัวของสตริง T ที่กำหนด ฉันต้องวนซ้ำคำต่อท้ายแต่ละ S ในคำนำหน้า P และเพิ่มเข้าไปในต้นไม้ ในการเพิ่มคำต่อท้าย S ลงบนต้นไม้ฉันจำเป็นต้องวนซ้ำอักขระแต่ละตัวใน S ด้วยการวนซ้ำซึ่งประกอบด้วยการเดินลงสาขาที่มีอยู่ซึ่งเริ่มต้นด้วยชุดอักขระ C เดียวกันใน S และอาจแบ่งขอบเป็นโหนดสืบทอดเมื่อฉัน ถึงตัวละครที่แตกต่างกันในคำต่อท้ายหรือถ้าไม่มีขอบที่ตรงกันที่จะเดินลง เมื่อไม่พบการจับคู่ขอบเพื่อเดินลงสำหรับ C ขอบใบใหม่จะถูกสร้างขึ้นสำหรับ C อัลกอริธึมพื้นฐานดูเหมือนจะเป็น O (n 2 ) ดังที่อธิบายไว้ในคำอธิบายส่วนใหญ่เนื่องจากเราจำเป็นต้องก้าวผ่านคำนำหน้าทั้งหมดจากนั้นเราต้องก้าวผ่านคำต่อท้ายสำหรับคำนำหน้าแต่ละคำ อัลกอริธึมของ Ukkonen นั้นมีความพิเศษเพราะเทคนิคตัวชี้ส่วนต่อท้ายที่เขาใช้แม้ว่าฉันคิดว่านั่นเป็นสิ่งที่ฉันมีปัญหาในการทำความเข้าใจ …

30
การลบรายการที่ซ้ำในรายการ
ค่อนข้างมากฉันต้องเขียนโปรแกรมเพื่อตรวจสอบว่ารายการนั้นมีรายการที่ซ้ำกันหรือไม่และหากมีการลบรายการเหล่านั้นออกและส่งคืนรายการใหม่ด้วยรายการที่ไม่ซ้ำ / ลบออก นี่คือสิ่งที่ฉันมี แต่พูดตามตรงฉันไม่รู้จะทำอย่างไร def remove_duplicates(): t = ['a', 'b', 'c', 'd'] t2 = ['a', 'c', 'd'] for t in t2: t.append(t.remove()) return t

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

9
วิธีค้นหาความซับซ้อนของเวลาของอัลกอริทึม
คำถาม จะค้นหาความซับซ้อนของเวลาในอัลกอริทึมได้อย่างไร ฉันทำอะไรก่อนโพสต์คำถามบน SO ฉันได้ผ่านนี้ , นี้และการเชื่อมโยงอื่น ๆ อีกมากมาย แต่ไม่มีที่ไหนที่ฉันสามารถหาคำอธิบายที่ชัดเจนและตรงไปตรงมาสำหรับวิธีการคำนวณความซับซ้อนของเวลา ฉันรู้อะไร ? พูดถึงโค้ดที่ง่ายเหมือนด้านล่าง: char h = 'y'; // This will be executed 1 time int abc = 0; // This will be executed 1 time พูดเพื่อวนเหมือนด้านล่าง: for (int i = 0; i < N; i++) { Console.Write('Hello World !'); } …

23
บิ๊กโอคุณคำนวณ / ประเมินมันอย่างไร
คนส่วนใหญ่ที่มีปริญญาใน CS จะรู้แน่นอนว่าBig O หมายถึงอะไร มันช่วยให้เราวัดว่าอัลกอริทึมปรับขนาดได้ดีแค่ไหน แต่ฉันอยากรู้คุณจะคำนวณหรือประมาณความซับซ้อนของอัลกอริทึมของคุณได้อย่างไร

30
จะนับจำนวนบิตที่ตั้งค่าเป็นจำนวนเต็ม 32 บิตได้อย่างไร?
8 บิตที่เป็นตัวแทนของหมายเลข 7 มีลักษณะดังนี้: 00000111 ตั้งสามบิต อัลกอริทึมในการกำหนดจำนวนบิตที่ตั้งไว้ในจำนวนเต็ม 32- บิตคืออะไร?

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

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