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


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.