อัลกอริทึมใดที่ใช้บ่อยที่สุดในทางปฏิบัติ


19

อัลกอริทึมใดที่ใช้บ่อยที่สุด

โปรดเขียนอัลกอริทึมเดียวต่อคำตอบพยายามทำให้คำตอบสั้น (หนึ่งหรือสองบรรทัด)


Kaveh คุณอาจจะต้องรอคำตอบก่อนที่จะส่งจำนวนมาก? :)
— Suresh Venkat

1
@Suresh: ขออภัย :)
— Kaveh

3
บ่อยที่สุดในความหมายอะไร? (จำนวนโปรแกรมคอมพิวเตอร์ที่แตกต่างกันที่ใช้อัลกอริทึมหรือไม่จำนวนชิ้นส่วนของซอฟต์แวร์ที่ติดตั้งที่ใช้อัลกอริทึมจำนวนการประมวลผลของอัลกอริทึมจำนวนข้อมูลที่ประมวลผลโดยใช้อัลกอริทึม? (Academia อุตสาหกรรมพีซีในบ้าน?) เป็นไปได้ไหมที่จะประเมินสิ่งนี้ เราสามารถมีข้อมูลใด ๆ เพื่อสำรองคำตอบได้ไหม?
— Jukka Suomela

1
คำถามที่คลุมเครือเกินไปที่ Jukka Suomela ชี้ให้เห็น หากไม่มีการชี้แจงเพิ่มเติมคำตอบจะไม่ดีไปกว่าสารบัญของตำราเรียนเกี่ยวกับอัลกอริทึม
— Tsuyoshi Ito

1
มีหนังสือเล่มล่าสุด: "เก้าอัลกอริทึมที่เปลี่ยนอนาคต: ความคิดที่แยบยลซึ่งขับเคลื่อนคอมพิวเตอร์ทุกวันนี้" โดย John MacCormick ดูpress.princeton.edu/titles/9528.html
— Alessandro Jacopson

คำตอบ:


18

Fast Fourier Transform ปัญหาอัลกอริทึมได้รับการแก้ไขบ่อยครั้งต่อวันโดยระบบคอมพิวเตอร์จริงหรือไม่? มันจะต้องมีการปิด ดังนั้นผมจึงต้องการเสนอชื่ออัลกอริทึมคูลลีย์-Tukey FFT


ฉันเช่นนี้ FFT จะมองข้ามในการศึกษาด้านวิทยาศาสตร์คอมพิวเตอร์ขั้นพื้นฐาน แต่มันเป็นอย่างแน่นอนอัลกอริทึมที่มีผลกระทบอย่างมากในสังคมสมัยใหม่ของเราและสิ่งที่ทันสมัยมากรอบ ๆ ตัวเราจะกระทืบ FFT ตลอดเวลา
— Jukka Suomela

14

การคูณ

อาจเป็นหนึ่งในอัลกอริธึมที่ไม่น่าสนใจที่สุดที่เก่าแก่ที่สุดและปัญหาที่แก้ไขได้บ่อยกว่า FFT


การคูณไม่ใช่อัลกอริธึม แต่เป็นปัญหากับปัญหาย่อยมากมายที่แก้ไขโดยอัลกอริธึมที่แตกต่างกัน: จำนวนเต็มคงที่และจำนวนจุดลอยตัวที่ดำเนินการโดยฮาร์ดแวร์หรือซอฟต์แวร์ bignums ขนาดตัวแปร (โมดูโลหรือไม่), เมทริกซ์, ...
— Gilles 'ดังนั้น - หยุดความชั่วร้าย'

ฉันอ้างถึงวงจรการคูณฮาร์ดแวร์ใน CPU ที่ทันสมัย ​​(สำหรับจำนวนเต็มและตัวเลข floating-point ทั้งสองนี้ไม่ได้แตกต่างกันในท้ายที่สุด) ความเข้าใจของฉันคือพวกเขามีแนวโน้มที่จะเป็น "เพียงแค่" รุ่นที่ออกแบบมาอย่างชาญฉลาดของวิธีการพื้นฐานเดียวกัน - อัลกอริทึม "การคูณยาว" ซึ่งเป็นที่รู้จักกันแล้วในยุคกลาง
— Jukka Suomela

ฉันคิดว่าการลบ (การเปรียบเทียบ) ใช้บ่อยกว่าการคูณและฉันไม่สามารถเห็นเหตุผลใด ๆ ที่การคูณจะนับเป็นอัลกอริทึมและการบวก / ลบไม่ได้ อย่างไรก็ตามฉันไม่ทราบว่าสิ่งนี้มีคุณสมบัติเป็นคำตอบหรือไม่
— Tsuyoshi Ito

ใช่การเพิ่มและการลบจะถูกใช้บ่อยกว่าการคูณ - แน่นอนว่าอัลกอริทึมการคูณแบบยาวนั้นจะช่วยลดการคูณลงไปได้ อย่างไรก็ตามฉันไม่ทราบว่ามีอัลกอริทึมการบวก / การลบเดียวที่เราสามารถเสนอชื่อได้ที่นี่หรือไม่
— Jukka Suomela

@JukkaSuomela: การเติมเต็มและการลบของทั้งสองจะเป็นตัวเลือกที่ดี
— John Gietzen

13

อัลกอริธึมเส้นทางที่สั้นที่สุดDijkstraและBellman-Ford มีอย่างน้อย 35,000 Autonomous Systems (AS) ที่ใช้งานบนอินเทอร์เน็ตในปี 2010 AS แต่ละตัวกำลังทำงานทั้ง link-state routing protocol (Dijkstra) หรือโปรโตคอลระยะทางเวกเตอร์ (Bellman-Ford) เราเตอร์ภายในหนึ่ง AS มักจะอัพเดทตารางของพวกเขาเป็นระยะทุก ๆ สองสามนาทีพูด 10

ดังนั้นจำนวนการประหาร Dijkstra & Bellman-Ford ต่อวันมีจำนวนอย่างน้อย 5 ล้าน และนั่นเป็นเพียงจากเราเตอร์

เรายังไม่ได้นับการคำนวณเส้นทางที่สั้นที่สุดจาก Google แผนที่และสิ่งที่ชอบซึ่งควรมีสัดส่วนอย่างน้อย 10 เท่า การประหารชีวิตวันละหลายพันล้านครั้งนั้นไม่ได้เกิดขึ้นจริง


การประหารชีวิตวันละหลายพันล้านครั้งอาจฟังดูเยอะ แต่ขอให้ระลึกไว้เสมอว่าเรามีโทรศัพท์มือถือหลายพันล้านใบบนโลกใบนี้ สิ่งเหล่านั้นกำลังทำอะไรอยู่ตลอดเวลา? หรือพวกเขากำลังทำอะไรในระหว่างการโทรแต่ละครั้ง ฉันไม่รู้ แต่สิ่งที่ฉันเดาก็คือพวกเขากำลังทำ FFT มากกว่าเส้นทางที่สั้นที่สุด
— Jukka Suomela

8

14
โดยวิธีการที่มันเป็นกรณีที่ quicksort เป็นอัลกอริทึมการเรียงลำดับที่ใช้กันมากที่สุดในโลกแห่งความจริง? ฉันดูอย่างรวดเร็วเกี่ยวกับการใช้งานฟังก์ชั่น "การเรียงลำดับ" ทั่วไปในภาษาการเขียนโปรแกรมที่ใช้กันทั่วไป Perl: ดูเหมือนว่าจะเปลี่ยนจาก quicksort เป็นการผสานเมื่อเร็ว ๆ นี้ Python: ใช้ Timsort (ไฮบริดเรียงลำดับการผสาน / การแทรก) Java: เคยเป็นการรวมตัวกัน Timsort ในปัจจุบัน ฐานข้อมูลมักจะใช้การเรียงลำดับภายนอก Quicksort เป็นสัตว์ใกล้สูญพันธุ์หรือยัง?
— Jukka Suomela

ฉันคิดว่าเป็นจุดที่ดีมาก มันจะดีถ้ามีใครสามารถแก้ไขคำตอบได้
— Juan Bermejo Vega

@ จวนถึงแม้ว่าจุดที่ Jukka พูดนั้นถูกต้องฉันไม่เห็นเหตุผลที่จะแก้ไขคำตอบ
— Kaveh


7

ฉันคิดว่าอัลกอริทึมที่ใช้มากที่สุดคือการตรวจสอบพาริตี้ (หรืออาจเป็น CRC หรือรหัสการแก้ไขข้อผิดพลาดบางชนิด) เพราะมันปรากฏในการเข้าถึง RAM ทุกครั้ง


ใช้อย่างน้อยหนึ่งครั้งสำหรับทุกแพ็กเก็ตที่ส่งผ่านเครือข่ายที่ใช้ IP
— Claus Broch


4

-meansk.

โดยทั่วไปแล้วคุณควรพิจารณาผู้ชนะรางวัล Kanellakisเพื่อหาแนวคิดที่มีเหตุผลด้านทฤษฎีและปฏิบัติจริง


ขอบคุณสำหรับลิงค์มันดูน่าสนใจมาก แรงจูงใจบางส่วนของคำถามคือการค้นหาชื่ออัลกอริทึมที่จับใจได้ดีสำหรับไซต์ :)
— Kaveh

4

การจับคู่การแสดงออกปกติโดยการแปลงเป็นออโต จำกัด แน่นอน - ฉันเชื่อว่าฟังก์ชัน grep ตามบรรทัดเหล่านี้



3

มันยากที่จะคิดว่าขั้นตอนวิธีการใช้กันอย่างแพร่หลายมากขึ้นกว่าผู้ที่อยู่ในการใช้งานที่ทันสมัยของTCP : คือการหลีกเลี่ยงความแออัด , การส่งอีกครั้งอย่างรวดเร็ว แม้ว่ามันจะขึ้นอยู่กับว่าจะกำหนดสิ่งที่ตรงกับเกณฑ์สำหรับอัลกอริทึม ...


แต่คุณสามารถใช้อัลกอริทึม TCP บ่อยกว่า FFT (ซึ่งมีอยู่แล้วในรายการนี้) ได้หรือไม่? หากคอมพิวเตอร์ของฉันส่งแพ็กเก็ต IP เดียว (TCP หรือไม่) โดยทั่วไปแล้วจะไม่ทำให้เกิดการคำนวณแบบ FFT ทั้งหมดหรือไม่ โดยปกติแพ็คเก็ตจะถูกส่งในบางจุดโดยใช้เทคโนโลยีเช่น WLAN, ADSL และ GSM และฉันคิดว่าส่วนใหญ่ใช้ modulations ที่พึ่งพา FFT อย่างมาก
— Jukka Suomela

ฉันคิดว่าคุณพูดถูก
— Lev Reyzin


2

SHA-1 (และฟังก์ชันแฮชโดยทั่วไป) อาจเอาชนะอัลกอริทึมอื่น ๆ ส่วนใหญ่ในแง่ของจำนวนการประหารชีวิต


2

อัลกอริธึมที่เกี่ยวข้องกับต้นไม้ B + ใช้สำหรับเนื้อหาของฐานข้อมูล


2

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


1

คำตอบนี้ตีความ "บ่อยที่สุด" ในแง่ของรอบการทำงานจริงของ CPU

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

แม้ว่าการพูดอย่างเคร่งครัดอัลกอริทึมที่ใช้บ่อยที่สุดคือไม่ต้องสงสัยเลยว่าสิ่งใดก็ตามที่ถูกดำเนินการโดยระบบ Windows จะรอกระบวนการเมื่อไม่มีสิ่งอื่นเกิดขึ้น ;-)


1

Sprase Matrix Vector ทวีคูณ

... เป็นผลงานคำนวณที่อยู่เบื้องหลังการแก้ปัญหาของระบบเชิงเส้นเกือบทั้งหมด ดังนั้นมันจะถูกเรียกใช้เมื่อใดก็ตาม

  • นักวิทยาศาสตร์ / วิศวกรแก้สมการเชิงอนุพันธ์
  • นักสถิติค้นหาความสัมพันธ์ใหม่ (PCA)
  • Google รันอันดับของหน้า
  • โทรศัพท์ของคุณคาดการณ์ตำแหน่งของคุณจาก GPS, มาตรวัดความเร็ว, ตำแหน่งเสาสัญญาณโทรศัพท์
  • รถของคุณปรับช่วงล่างของคุณในการเคลื่อนไหว
  • ฯลฯ ....

ส่วนใหญ่ของ FLOPs ในซูเปอร์คอมพิวเตอร์หรือคลัสเตอร์ใด ๆ จะถูกใช้ภายในของแผ่นพรมเบาบาง


1

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


1

ต้นไม้ hashing และสีแดงสีดำ

พวกเขากำลังนำไปใช้ใน STL (hash_map, map) และโปรแกรมเมอร์ทุกคนรู้ว่าคอนเทนเนอร์นั้นสะดวกอย่างไม่น่าเชื่อเมื่อใดก็ตามที่คุณต้องการเก็บข้อมูลบางอย่างที่จัดทำดัชนีโดยชนิดข้อมูลเอง



0

การเขียนโปรแกรมแบบไดนามิกการเขียนโปรแกรมแบบไดนามิก

ฉันคิดว่า DP ใช้ "บ่อยกว่า" กว่าอัลกอริทึมอื่น ๆ ที่อ้างถึงในแบบสำรวจจนถึงขณะนี้ ผมสรุป "บ่อยขึ้น" ในแง่ของวิธีการที่มักจะเป็นแนวความคิดขั้นตอนวิธีการที่ไม่น่ารำคาญคือการดำเนินการโดยโปรแกรมเมอร์ในชีวิตจริงมากกว่าจะมีการใช้อัลกอริทึมในการเรียกใช้เฉพาะเวลากี่ครั้ง

DP มีหลากหลายและมีหลายใบหน้า บางครั้งฉันใช้มันค่อนข้างจิตใต้สำนึกและจากนั้นก็ตระหนักในภายหลังว่าฉันทำ DP

แน่นอนว่ามีบางสิ่งที่พบได้ทั่วไปมากกว่า Dynamic Program แต่ส่วนใหญ่จะเป็นโครงสร้างข้อมูล (array, รายการที่เชื่อมโยง, แฮช)


7
นี่เป็นข้อแตกต่างเล็กน้อยจากคำแนะนำอื่น ๆ เนื่องจากเป็นกระบวนทัศน์การออกแบบอัลกอริธึม (คล้ายกับความโลภหรือเจ้าเล่ห์คู่) ไม่ใช่แค่อัลกอริธึมเดียว
— Jukka Suomela

0

การจับคู่สตริงใช้ตลอดเวลาในแอพพลิเคชั่นซอฟต์แวร์และในระดับฐานข้อมูล

ในกรณีที่แน่นอนมีอัลกอริทึมที่เกี่ยวข้องหลายอย่าง (KMP, Boyer-Moore) ที่มีบางอย่างที่บรรลุ sublinear คาดว่ารันไทม์ พวกเขายังน่าสนใจที่จะศึกษาจากมุมมองของ CS

การจับคู่สตริงโดยประมาณนั่นคือการจัดแนวอาจน่าสนใจกว่า คุณรู้หรือไม่คุณสมบัติ "การแก้ไขอัตโนมัติ" นอกจากนี้การค้นหาในข้อมูลสตริงที่มีเสียงดัง (เช่น DNA) จะกระทำโดยใช้การจัดแนว

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