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

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

9
มีสารานุกรมของอัลกอริทึมหรือไม่? [ปิด]
มีสารานุกรมของอัลกอริทึมคล้ายกับคู่มือคณิตศาสตร์หรือไม่? ดูเหมือนว่ามีประโยชน์ที่จะมีจำนวนมากในที่เดียว ฉันรู้ว่าศิลปะการเขียนโปรแกรมคอมพิวเตอร์ถือเป็นแหล่งข้อมูลที่ดี แต่ดูเหมือนว่าไม่มีสารานุกรมเท่าที่ให้คำแนะนำ ผู้ดำเนินรายการหมายเหตุ เรากำลังมองหาคำตอบยาว ๆ ที่ให้คำอธิบายและบริบท อย่าเพิ่งทำรายการหนังสือ: โปรดอธิบายว่าทำไมคุณจึงแนะนำหนังสือหรือแหล่งข้อมูล คำตอบที่ไม่อธิบายอะไรจะถูกลบ ดูอัตนัยที่ดีอัตนัยไม่ดีสำหรับข้อมูลเพิ่มเติม
34 algorithms 

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

1
ฉันรู้ว่า JavaScript ดีจริงๆ แต่ฉันวางระเบิดการสัมภาษณ์ [ปิด]
ดังนั้นฉันกำลังตามล่าหาตำแหน่งใหม่ในฐานะนักพัฒนา Front-End ฉันรู้ว่าจาวาสคริปต์เป็นอย่างดีและสามารถแว็กซ์เกี่ยวกับการปิด, Currying, การสืบทอดต้นแบบ, รูปแบบการออกแบบ, ประสิทธิภาพของแอพและสถาปัตยกรรม Front-End โดยรวม แต่ถึงกระนั้นฉันยังคงจบลงด้วยการสัมภาษณ์งานวางระเบิด (FYI งานส่วนใหญ่ที่ฉันสัมภาษณ์อยู่สำหรับการสร้าง SPA ด้วยกรอบ MVC บางประเภท) โดยปกติแล้วการทดสอบการเข้ารหัสเป็นตัวอย่างโค้ดขนาดเล็กของสิ่งที่ฉันไม่เคยเจออย่างมืออาชีพ เช่นเขียนฟังก์ชั่นเพื่อแก้ปัญหาคณิตศาสตร์บางอย่าง นอกเหนือจากความเชื่องช้าในการรับรหัสขณะถือโทรศัพท์ด้วยมือเดียวและมีคนแปลกหน้าดูหน้าจอของคุณและดูตัวละครทุกตัวที่คุณพิมพ์ฉันมักจะไม่เห็นสิ่งนี้ในโลกแห่งความเป็นจริง นี่เป็นทักษะที่ร้ายแรงที่ฉันขาดหรือเป็นผู้สัมภาษณ์ถามคำถามที่ไม่เกี่ยวข้องหรือไม่ ฉันเดาว่าฉันควรทำงานกับการเขียนโปรแกรมฟังก์ชั่นและอัลกอริทึมของฉัน แต่ฉันไม่ได้พบแหล่งข้อมูลที่ดีมากมายบนเว็บ (หรือในการพิมพ์) ข้อเสนอแนะใด ๆ ?

5
อัลกอริทึมการแบ่งและพิชิต - ทำไมไม่แยกส่วนมากกว่าสอง
ในขั้นตอนวิธีแบ่งแยกและเอาชนะเช่น quicksort และ mergesort ใส่มักจะ (อย่างน้อยในตำราเบื้องต้น) แยกเป็นสองและทั้งสองมีขนาดเล็กชุดข้อมูลจะได้รับไพ่แล้วด้วยซ้ำ มันสมเหตุสมผลสำหรับฉันว่าสิ่งนี้ทำให้การแก้ไขปัญหาได้เร็วขึ้นหากทั้งสองส่วนใช้เวลาน้อยกว่าครึ่งในการจัดการกับชุดข้อมูลทั้งหมด แต่ทำไมไม่แยกชุดข้อมูลออกเป็นสามส่วน? สี่? n ? ฉันเดาว่างานของการแบ่งข้อมูลในชุดย่อยหลายชุดทำให้ไม่คุ้มค่า แต่ฉันขาดสัญชาตญาณเพื่อดูว่าควรหยุดที่สองชุดย่อย ฉันยังได้เห็นการอ้างอิงจำนวนมากถึง QuickSort 3 ทาง เมื่อไหร่จะเร็วกว่านี้? สิ่งที่ใช้ในการปฏิบัติ?

6
ฉันต้องการเขียนอัลกอริทึม "ultimate shuffle" เพื่อเรียงลำดับคอลเลกชัน mp3 ของฉัน
ฉันกำลังมองหาข้อเสนอแนะ pseudocode สำหรับจัดเรียงไฟล์ mp3 ของฉันในทางที่หลีกเลี่ยงชื่อและศิลปินซ้ำ ฉันฟัง crooners - Frank Sinatra, Tony Bennett, Ella Fitzgerald ฯลฯ ร้องเพลงมาตรฐานเก่า ศิลปินแต่ละคนบันทึกเพลงเดียวกันหลายเพลง - Fly Me To The Moon, The Way You Look Tonight, Stardust ฯลฯ เป้าหมายของฉันคือการจัดเรียงเพลง (หรือสั่งซื้อเพลย์ลิสต์) ด้วยพื้นที่สูงสุดระหว่างศิลปินและชื่อเพลง ดังนั้นถ้าฉันมี 2,000 เพลงและ 20 เพลงเป็นโดยเอลล่าฉันอยากจะได้ยินเธอเพียงครั้งเดียวในทุก ๆ 100 เพลง หากศิลปิน 10 คนร้องเพลง Fly Me To The Moon ฉันอยากได้ยินทุก …

3
คอมพิวเตอร์ควอนตัมจะเปลี่ยนการเขียนโปรแกรมอย่างไร [ปิด]
การเขียนโปรแกรมอัลกอริทึมควอนตัมแตกต่างกันอย่างไร? ภาษาเช่น C จะเป็นอย่างไรถ้ามันถูกออกแบบมาสำหรับ qubits ประเภทจะเปลี่ยนหรือไม่

4
การพูดว่าอัลกอริทึมคือ Sound and Complete หมายความว่าอย่างไร
ผมได้ยินการตีความที่แตกต่างกันของเสียงและสมบูรณ์ ฉันเข้าใจว่าความสมบูรณ์หมายถึงการหาทางออกถ้ามี มันหมายความว่าอะไรที่จะบอกว่าอัลกอริทึมเป็นเสียง การพูดว่าอัลกอริทึมคือ Sound and Complete หมายความว่าอย่างไร

7
วิธีการค้นหารายการสตริง / ระเบียนที่มีขนาดใหญ่มากอย่างรวดเร็วบนฐานข้อมูล
ฉันมีปัญหาดังต่อไปนี้: ฉันมีฐานข้อมูลที่มีมากกว่า 2 ล้านบันทึก แต่ละระเบียนมีเขตข้อมูลสตริง X และฉันต้องการแสดงรายการของระเบียนที่เขตข้อมูล X ประกอบด้วยสตริงที่แน่นอน แต่ละระเบียนมีขนาดประมาณ 500 ไบต์ เพื่อให้เป็นรูปธรรมมากขึ้น: ใน GUI ของแอปพลิเคชันของฉันฉันมีช่องข้อความที่ฉันสามารถป้อนสตริงได้ ด้านบนของฟิลด์ข้อความฉันมีตารางที่แสดงเรคคอร์ด (N แรกเช่น 100) ที่ตรงกับสตริงในฟิลด์ข้อความ เมื่อฉันพิมพ์หรือลบอักขระหนึ่งตัวในฟิลด์ข้อความเนื้อหาของตารางจะต้องได้รับการอัปเดตทันที ฉันสงสัยว่ามีวิธีที่มีประสิทธิภาพในการทำเช่นนี้โดยใช้โครงสร้างดัชนีที่เหมาะสมและ / หรือแคช ตามที่อธิบายไว้ข้างต้นฉันต้องการแสดงเฉพาะรายการแรกที่ตรงกับแบบสอบถาม ดังนั้นสำหรับ N ที่มีขนาดเล็กพอก็ไม่ควรเป็นปัญหาใหญ่ในการโหลดไอเท็มที่ตรงกันจากฐานข้อมูล นอกจากนี้การแคชรายการในหน่วยความจำหลักสามารถทำให้การดึงข้อมูลเร็วขึ้น ฉันคิดว่าปัญหาหลักคือวิธีค้นหารายการที่ตรงกันอย่างรวดเร็วโดยกำหนดสตริงรูปแบบ ฉันสามารถใช้สิ่งอำนวยความสะดวกบางอย่างของ DBMS หรือฉันต้องสร้างดัชนีในหน่วยความจำด้วยตัวเองบ้างไหม? ความคิดใด ๆ แก้ไข ฉันได้ทำการทดลองครั้งแรก ฉันแบ่งระเบียนออกเป็นไฟล์ข้อความต่างๆ (ไม่เกิน 200 รายการต่อไฟล์) และวางไฟล์ในไดเรกทอรีต่าง ๆ (ฉันใช้เนื้อหาของเขตข้อมูลเดียวเพื่อกำหนดโครงสร้างไดเรกทอรี) ฉันจบด้วยไฟล์ประมาณ 50,000 ไฟล์ในไดเรกทอรีประมาณ 40000 ฉันได้เรียกใช้ …

10
มีเหตุผลหรือไม่ที่จะสมมติว่าปริมาณทางกายภาพใด ๆ ที่สามารถแทนด้วยจำนวนเต็ม 64- บิตโดยไม่ล้นหรือต่ำกว่า?
อัลกอริทึมการค้นหาแบบไบนารีดั้งเดิมใน JDK ใช้จำนวนเต็ม 32 บิตและมีข้อบกพร่องมากเกินไปหาก(low + high) > INT_MAX( http://googleresearch.blogspot.com/2006/06/extra-extra-extra-read-all-about-it-nearly.html ) . หากเราเขียนอัลกอริทึมการค้นหาแบบไบนารี่เดียวกันโดยใช้ (ลงนาม) 64- บิตเราสามารถสันนิษฐานได้ว่าlow + highจะไม่เกิน INT64_MAX เพราะเป็นไปไม่ได้ที่ร่างกายจะมีหน่วยความจำ 10 ^ 18 ไบท์หรือไม่ เมื่อใช้ (ลงนาม) จำนวนเต็ม 64- บิตเพื่อแสดงปริมาณทางกายภาพมันมีเหตุผลที่จะถือว่าอันเดอร์โฟล์และล้นไม่สามารถเกิดขึ้นได้?

6
เหตุใด Quicksort จึงดีกว่าอัลกอริธึมการเรียงลำดับอื่น ๆ ในทางปฏิบัติ
นี่คือ repost ของคำถามเกี่ยวกับ cs.SEโดยJanoma หน่วยกิตและเครดิตทั้งหมดของเขาหรือของซีเอส ในหลักสูตรอัลกอริธึมมาตรฐานเราถูกสอนว่าquicksortคือ O (n log n) โดยเฉลี่ยและ O (n²) ในกรณีที่แย่ที่สุด ในเวลาเดียวกันอัลกอริธึมการเรียงลำดับอื่น ๆ กำลังศึกษาซึ่งเป็น O (n log n) ในกรณีที่เลวร้ายที่สุด (เช่นการผสานและheapsort ) และแม้แต่เวลาเชิงเส้นในกรณีที่ดีที่สุด (เช่นbubbleort ) แต่มีความต้องการหน่วยความจำเพิ่มเติม หลังจากมองผ่าน ๆ ในเวลาที่วิ่งเร็วขึ้นมันเป็นเรื่องธรรมดาที่จะบอกว่า quicksort ไม่ควรมีประสิทธิภาพเหมือนกับคนอื่น ๆ นอกจากนี้ให้พิจารณาว่านักเรียนเรียนรู้ในหลักสูตรการเขียนโปรแกรมขั้นพื้นฐานที่การเรียกซ้ำโดยทั่วไปไม่ดีนักเพราะอาจใช้หน่วยความจำมากเกินไป ฯลฯ ดังนั้น (และแม้ว่านี่จะไม่ใช่ข้อโต้แย้งจริง ๆ ) สิ่งนี้ทำให้เกิดความคิดว่า ดีจริงๆเพราะเป็นอัลกอริทึมแบบเรียกซ้ำ เหตุใด quicksort จึงมีประสิทธิภาพสูงกว่าอัลกอริทึมการเรียงลำดับอื่น ๆ ในทางปฏิบัติ มันเกี่ยวข้องกับโครงสร้างของข้อมูลจริงหรือไม่? มันเกี่ยวข้องกับการทำงานของหน่วยความจำในคอมพิวเตอร์หรือไม่? ฉันรู้ว่าความทรงจำบางอย่างนั้นเร็วกว่าวิธีอื่น …

2
O (…) คืออะไรและฉันจะคำนวณได้อย่างไร
ช่วยด้วย! ฉันมีคำถามที่ฉันต้องการวิเคราะห์ Big-O ของอัลกอริทึมหรือรหัสบางอย่าง ฉันไม่แน่ใจว่า Big-O คืออะไรหรือเกี่ยวข้องกับ Big-Theta หรือวิธีอื่น ๆ ในการวิเคราะห์ความซับซ้อนของอัลกอริทึม ฉันไม่แน่ใจว่า Big-O อ้างอิงถึงเวลาในการเรียกใช้รหัสหรือจำนวนหน่วยความจำที่ใช้ (การแลกเปลี่ยนพื้นที่ / เวลา) ฉันมีการบ้านวิทยาการคอมพิวเตอร์ที่ฉันต้องใช้ลูปบางทีอัลกอริทึมแบบเรียกซ้ำและมากับ Big-O สำหรับมัน ฉันกำลังทำงานกับโปรแกรมที่ฉันมีตัวเลือกระหว่างสองโครงสร้างข้อมูลหรืออัลกอริทึมกับ Big-O ที่รู้จักกันดีและไม่แน่ใจว่าจะเลือกตัวเลือกใด ฉันจะเข้าใจวิธีการคำนวณและใช้ Big-O กับโปรแกรมการบ้านหรือความรู้ทั่วไปของวิทยาการคอมพิวเตอร์ได้อย่างไร หมายเหตุ: คำถามนี้เป็นเป้าหมายแบบดัชชู่ที่เป็นที่ยอมรับสำหรับคำถาม Big-O อื่น ๆตามที่ชุมชนกำหนด เป็นความตั้งใจโดยทั่วไปที่จะสามารถเก็บข้อมูลที่เป็นประโยชน์จำนวนมากสำหรับคำถาม Big-O ได้ โปรดอย่าใช้ข้อเท็จจริงที่ว่านี้เป็นข้อบ่งชี้ว่าคำถามที่คล้ายกันเป็นที่ยอมรับได้


8
รหัสที่สวยงามคืออะไร? [ปิด]
ฉันมักจะอ่านว่านักพัฒนาจะต้องเขียนโค้ดที่สวยงาม แต่สำหรับผู้เริ่มต้นในขณะที่ฉันยังคงคลุมเครือของรหัสที่สวยงามและคุณจำได้อย่างไร คำถามที่ควันหลงคือ: จะเขียนโค้ดที่สวยงามได้อย่างไรและอะไรคือนิสัยในการปฏิบัติเพื่อปรับปรุงคุณภาพของโค้ดของคุณ? สิ่งที่ฉันควรสนใจเกี่ยวกับการทำให้รหัสที่ฉันเขียนสวยงาม (และสิ่งที่ shoud ฉันเรียนรู้)

5
ปริศนาน้ำพุ Champaign
แก้วน้ำเปล่าเรียงตามลำดับต่อไปนี้: เมื่อคุณเทของเหลวลงในแก้วที่ 1 ถ้ามันเต็มแล้วของเหลวที่เพิ่มเข้ามาจะถูกใส่ลงในแก้ว 2 และ 3 ในปริมาณที่เท่ากัน เมื่อแก้ว 2 เต็มแล้วของเหลวพิเศษจะถูกปล่อยออกมาเป็น 4 และ 5 เป็นต้น เมื่อให้ของเหลว N ลิตรและความจุสูงสุดของแก้วแต่ละแก้วคือ 1 ลิตรให้ปริมาณของของเหลวในแก้วใด ๆ ถ้าคุณล้างของเหลว N ลิตรโดยเทลงในแก้วโดยเติมฟังก์ชันgetWaterInBucket(int N, int X)ที่ X คือหมายเลขแก้ว ตัวอย่างเช่นถ้าฉันต้องการมี 4 ลิตรที่จุดเริ่มต้นและฉันต้องการค้นหาน้ำในแก้ว 3 ฟังก์ชั่นคือgetWaterInBucket(4, 3) ฉันจะแก้ปัญหานี้โดยทางโปรแกรมได้อย่างไร ฉันพยายามหาวิธีแก้ปัญหาทางคณิตศาสตร์โดยใช้สามเหลี่ยมของปาสกาล สิ่งนี้ไม่ได้ผล ฉันถือว่ามันเป็นต้นไม้ดังนั้นฉันจึงสามารถเพิ่มพารามิเตอร์เช่นนี้getWaterInBucket(BTree root, int N, int X)แล้วลองแก้ปัญหาแบบเรียกซ้ำสำหรับแต่ละระดับ แต่ไม่อนุญาตให้ใช้พารามิเตอร์ในปัญหานี้ มีบางอย่างชัดเจนหรือไม่?

4
คุณสามารถใช้ Pi เป็นเครื่องมือสร้างตัวเลขสุ่มอย่างหยาบได้หรือไม่?
ฉันเพิ่งเห็นคำถามนี้ที่ math.SE มันทำให้ฉันคิด สามารถใช้ Pi เป็นเครื่องมือสร้างตัวเลขสุ่มแบบสุ่มได้หรือไม่? ฉันหมายถึงผลลัพธ์เป็นที่รู้จักกันดี (คำนวณว่า pi ได้รับมานานเท่าไหร่แล้วตอนนี้?) แต่ Pi ก็ดูเหมือนจะสุ่มเมื่อใช้ตัวเลข 1 หลักในแต่ละครั้ง สิ่งนี้สมเหตุสมผลหรือไม่?

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