ปรับใช้อัลกอริทึมหลัก


307

เพื่อแสดงให้เห็นถึงความสำคัญของอัลกอริทึม (เช่นสำหรับนักเรียนและอาจารย์ที่ไม่ได้ทำทฤษฏีหรือแม้กระทั่งจากสาขาที่แตกต่างกันโดยสิ้นเชิง) บางครั้งมันก็มีประโยชน์ที่จะมีรายการตัวอย่างที่มีอัลกอริธึมหลักในเชิงพาณิชย์ หรือซอฟต์แวร์ / ฮาร์ดแวร์ที่ใช้กันอย่างแพร่หลาย

ฉันกำลังมองหาตัวอย่างดังกล่าวที่ตรงตามเกณฑ์ต่อไปนี้:

  1. ซอฟต์แวร์ / ฮาร์ดแวร์ที่ใช้อัลกอริทึมควรใช้งานอย่างกว้างขวางในขณะนี้

  2. ตัวอย่างควรเฉพาะเจาะจง กรุณาให้การอ้างอิงถึงระบบที่เฉพาะเจาะจงและอัลกอริทึมเฉพาะ
    ตัวอย่างเช่นใน "อัลกอริทึม X มีประโยชน์สำหรับการประมวลผลภาพ" คำว่า "การประมวลผลภาพ" นั้นไม่เฉพาะเจาะจงเพียงพอ ใน "การค้นหาของ Google ใช้อัลกอริธึมกราฟ" คำว่า "อัลกอริทึมกราฟ" นั้นไม่เจาะจงพอ

  3. อัลกอริทึมควรจะสอนในระดับปริญญาตรีทั่วไปหรือปริญญาเอก คลาสในอัลกอริทึมหรือโครงสร้างข้อมูล เป็นการดีที่อัลกอริทึมจะครอบคลุมในตำราเรียนอัลกอริทึมทั่วไป เช่น "ระบบที่รู้จักกันดี X ใช้อัลกอริทึมที่รู้จักกันน้อย Y" ไม่ดี


ปรับปรุง:

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


ความคิดเห็นไม่ได้มีไว้สำหรับการอภิปรายเพิ่มเติม การสนทนานี้ได้รับการย้ายไปแชท
Bjørn Kjos-Hanssen

คำตอบ:


473

อัลกอริทึมที่เป็นตัวขับเคลื่อนหลักที่อยู่เบื้องหลังระบบคือในความคิดของฉันง่ายต่อการค้นหาในหลักสูตรที่ไม่ใช่อัลกอริธึมด้วยเหตุผลเดียวกับทฤษฎีบทที่มีการใช้งานแบบทันทีจะพบได้ง่ายกว่าในคณิตศาสตร์ประยุกต์ มันหายากสำหรับปัญหาในทางปฏิบัติที่จะมีโครงสร้างที่แน่นอนของปัญหานามธรรมในการบรรยาย เพื่อให้เป็นที่ถกเถียงกันฉันไม่เห็นเหตุผลว่าทำไมเนื้อหาของหลักสูตรอัลกอริธึมที่ทันสมัยเช่นการคูณของ Strassen การทดสอบ AKS primality หรืออัลกอริทึม Moser-Tardos นั้นเกี่ยวข้องกับปัญหาในทางปฏิบัติระดับต่ำของการใช้ฐานข้อมูลวิดีโอ ระบบควบคุมความแออัดของเครือข่ายหรือระบบอื่น ๆ คุณค่าของหลักสูตรเหล่านี้คือการเรียนรู้ว่ามีวิธีการที่ซับซ้อนในการใช้ประโยชน์จากโครงสร้างของปัญหาเพื่อค้นหาวิธีแก้ไขที่มีประสิทธิภาพ อัลกอริธึมขั้นสูงเป็นที่ที่เราพบอัลกอริธึมง่ายๆซึ่งการวิเคราะห์นั้นไม่สำคัญ ด้วยเหตุนี้ฉันจะไม่ยกเลิกอัลกอริธึมแบบสุ่มอย่างง่ายหรือ PageRank

ฉันคิดว่าคุณสามารถเลือกซอฟต์แวร์ชิ้นใหญ่ ๆ และค้นหาอัลกอริธึมขั้นพื้นฐานและขั้นสูงที่ใช้ในนั้น จากกรณีศึกษาฉันได้ทำสิ่งนี้เพื่อเคอร์เนล Linux และแสดงตัวอย่างจาก Chromium

โครงสร้างข้อมูลและอัลกอริทึมพื้นฐานในเคอร์เนล Linux

การเชื่อมโยงกับรหัสที่มาบน GitHub

  1. รายการที่เชื่อมโยง , รายการที่เชื่อมโยงเป็นทวีคูณ , ล็อคฟรีรายการที่เชื่อมโยง
  2. B + Treesพร้อมความคิดเห็นที่บอกคุณถึงสิ่งที่คุณไม่สามารถหาได้ในตำราเรียน

    การใช้ B + Tree ค่อนข้างง่าย ฉันเขียนเป็นแบบฝึกหัดการเรียนรู้เพื่อทำความเข้าใจว่า B + Trees ทำงานอย่างไร กลายเป็นประโยชน์เช่นกัน

    ...

    มีการใช้เทคนิคที่ไม่พบในตำราเรียน ค่าต่ำสุดคือด้านขวาไม่ใช่ทางซ้าย สล็อตที่ใช้ทั้งหมดภายในโหนดอยู่ทางด้านซ้ายสล็อตที่ไม่ได้ใช้ทั้งหมดมีค่า NUL การดำเนินการส่วนใหญ่จะวนซ้ำหนึ่งครั้งในทุกสล็อตและยุติใน NUL แรก

  3. ลำดับความสำคัญเรียงรายการที่ใช้สำหรับmutexes , ไดรเวอร์ฯลฯ

  4. ต้นไม้สีแดงสีดำจะถูกนำมาใช้สำหรับการจัดตารางการจัดการหน่วยความจำเสมือนเพื่อติดตามอธิบายไฟล์และไดเรกทอรีรายการ ฯลฯ
  5. ช่วงต้นไม้
  6. ต้นไม้ Radixใช้สำหรับการจัดการหน่วยความจำ , การค้นหาที่เกี่ยวข้องกับ NFS และฟังก์ชันการทำงานที่เกี่ยวข้องกับเครือข่าย

    การใช้งานทั่วไปของต้นไม้ radix คือการจัดเก็บพอยน์เตอร์ไปยังหน้าโครงสร้าง

  7. ลำดับความสำคัญกองซึ่งเป็นตัวอักษรการใช้งานตำราที่ใช้ในระบบกลุ่มควบคุม

    ฮีปลำดับความสำคัญขนาดคงที่แบบแทรกเท่านั้นแบบง่ายประกอบด้วยพอยน์เตอร์โดยอิงตาม CLR บทที่ 7

  8. ฟังก์ชันแฮชที่มีการอ้างอิงถึง Knuth และกับกระดาษ

    Knuth แนะนำช่วงเวลาในอัตราส่วนทองคำโดยประมาณให้เป็นจำนวนเต็มสูงสุดที่สามารถแทนได้ด้วยคำว่าเครื่องสำหรับการแฮชแบบทวีคูณ Chuck Lever ยืนยันประสิทธิผลของเทคนิคนี้:

    http://www.citi.umich.edu/techreports/reports/citi-tr-00-1.pdf

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

  9. บางส่วนของรหัสเช่นไดรเวอร์นี้ใช้ฟังก์ชันแฮชของตนเอง

    ฟังก์ชันแฮชโดยใช้อัลกอริธึมการหมุนแบบหมุน

    Knuth, D. ศิลปะการเขียนโปรแกรมคอมพิวเตอร์, เล่ม 3: การเรียงลำดับและการค้นหาบทที่ 6.4 แอดดิสันเวสลีย์ 2516

  10. ตารางแฮใช้ในการดำเนินinodes , การตรวจสอบความสมบูรณ์ของระบบไฟล์ฯลฯ
  11. บิตเรย์ซึ่งใช้สำหรับจัดการกับสถานะอินเตอร์รัปต์ ฯลฯ และมีคุณลักษณะใน Knuth Vol 4

  12. Semaphoresและล็อคสปิน

  13. การค้นหาแบบไบนารี่ใช้สำหรับการจัดการอินเตอร์รัปต์ลงทะเบียนการค้นหาแคชฯลฯ

  14. ค้นหาแบบทวิภาคด้วย B-trees

  15. ความลึกการค้นหาครั้งแรกและตัวแปรที่ใช้ในการกำหนดค่าไดเรกทอรี

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

  16. การค้นหาแรกโดยใช้ความกว้างเพื่อตรวจสอบความถูกต้องของการล็อคที่รันไทม์

  17. ผสานการเรียงลำดับในรายการที่เชื่อมโยงจะใช้สำหรับการเก็บขยะ , การจัดการระบบไฟล์ฯลฯ

  18. การเรียงลำดับฟองถูกนำมาใช้อย่างน่าอัศจรรย์เช่นกันในห้องสมุดไดรเวอร์

  19. Knuth มอร์ริสแพรตต์จับคู่สตริง ,

    ใช้อัลกอริทึมการจับคู่สตริงเชิงเส้นเนื่องจาก Knuth, Morris และ Pratt [1] อัลกอริทึมของพวกเขาหลีกเลี่ยงการคำนวณที่ชัดเจนของฟังก์ชั่นการเปลี่ยนแปลง DELTA ทั้งหมด เวลาจับคู่คือ O (n) สำหรับ n เป็นความยาว (ข้อความ) โดยใช้ฟังก์ชั่นเสริม PI [1..m] สำหรับ m ความยาว (รูปแบบ) ซึ่งคำนวณล่วงหน้าจากรูปแบบในเวลา O (m) อาร์เรย์ PI ช่วยให้ฟังก์ชันการเปลี่ยนแปลง DELTA สามารถคำนวณได้อย่างมีประสิทธิภาพ "ในทันที" ตามต้องการ สำหรับการพูดถึงสถานะใด ๆ "q" = 0,1, ... , m และอักขระใด ๆ "a" ใน SIGMA ค่า PI ["q"] มีข้อมูลที่ไม่เกี่ยวข้องกับ "a" และจำเป็นต้องใช้ คำนวณ DELTA ("q", "a") 2. เนื่องจากอาร์เรย์ PI มีเพียงรายการ m เท่านั้นในขณะที่ DELTA มีรายการ O (m | SIGMA |) เราจึงบันทึกปัจจัยของ | SIGMA | ในเวลาก่อนการประมวลผลโดยการคำนวณ PI แทน DELTA

    [1] Cormen, Leiserson, Rivest, Stein แนะนำขั้นตอนวิธี, รุ่นที่ 2, MIT Press

    [2] ดูทฤษฎีระบบอัตโนมัติ จำกัด

  20. รูปแบบ Boyer-Moore จับคู่กับการอ้างอิงและคำแนะนำสำหรับเมื่อต้องการทางเลือก

    ใช้อัลกอริทึมการจับคู่สตริง Boyer-Moore:

    [1] อัลกอริธึมการค้นหาสตริงด่วน RS Boyer และ Moore การสื่อสารของสมาคมเพื่อการคำนวณเครื่องจักร, 20 (10), 1977, pp. 762-772 http://www.cs.utexas.edu/users/moore/publications/fstrpos.pdf

    [2] คู่มือของอัลกอริทึมการจับคู่สตริงที่แน่นอน, Thierry Lecroq, 2004 http://www-igm.univ-mlv.fr/~lecroq/string/string.pdf

    หมายเหตุ: เนื่องจาก Boyer-Moore (BM) ทำการค้นหาการจับคู่จากขวาไปซ้ายจึงอาจเป็นไปได้ว่าการจับคู่อาจกระจายไปทั่วบล็อกจำนวนมากในกรณีนี้อัลกอริทึมนี้จะไม่พบความบังเอิญใด ๆ

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

    สมมติว่าคุณกำลังใช้โครงสร้างพื้นฐานตำราค้นหาสำหรับการกรอง NIDS หรือ
    จุดประสงค์ด้านความปลอดภัยที่คล้ายกันแล้วไปที่ KMP มิฉะนั้นถ้าคุณสนใจเรื่องประสิทธิภาพจริงๆบอกว่าคุณแบ่งประเภทแพ็กเก็ตเพื่อใช้นโยบายคุณภาพการให้บริการ (QoS) และคุณไม่ต้องสนใจเรื่องการจับคู่ที่เป็นไปได้ที่แพร่กระจายไปทั่วชิ้นส่วนต่างๆ

โครงสร้างข้อมูลและอัลกอริทึมใน Chromium Web Browser

การเชื่อมโยงกับรหัสที่มารหัสของ Google ฉันจะไปไม่กี่รายการ ฉันขอแนะนำให้ใช้คุณลักษณะการค้นหาเพื่อค้นหาอัลกอริทึมหรือโครงสร้างข้อมูลที่คุณชื่นชอบ

  1. ต้นไม้เล่น

    ต้นไม้ถูกกำหนดพารามิเตอร์ด้วยนโยบายการจัดสรร (Allocator) นโยบายนี้ใช้สำหรับการจัดสรรรายการใน C free store หรือเขตพื้นที่ ดูโซน

  2. แผนภาพ Voronoiใช้ในการสาธิต
  3. แท็บขึ้นอยู่กับขั้นตอนวิธี Bresenham ของ
นอกจากนี้ยังมีโครงสร้างข้อมูลและอัลกอริทึมดังกล่าวในรหัสของบุคคลที่สามที่รวมอยู่ในรหัส Chromium

  1. ต้นไม้ไบนารี
  2. ต้นไม้สีแดง - ดำ

    บทสรุปของ Julian Walker

    ต้นไม้สีแดงดำเป็นสัตว์ที่น่าสนใจ พวกเขาเชื่อว่าจะง่ายกว่าต้นไม้ AVL (คู่แข่งโดยตรงของพวกเขา) และอย่างรวดเร็วก่อนดูเหมือนว่าจะเป็นเช่นนี้เพราะการแทรกเป็นเรื่องง่าย อย่างไรก็ตามเมื่อเริ่มเล่นกับอัลกอริธึมการลบต้นไม้สีดำสีแดงจะกลายเป็นเรื่องยุ่งยากมาก อย่างไรก็ตามน้ำหนักถ่วงของความซับซ้อนที่เพิ่มเข้ามานี้คือทั้งการแทรกและการลบสามารถทำได้โดยใช้อัลกอริทึมแบบ pass, top-down นี่ไม่ใช่กรณีที่มีต้นไม้ AVL ซึ่งอัลกอริธึมการแทรกเท่านั้นที่สามารถเขียนจากบนลงล่าง การลบจากทรี AVL ต้องใช้อัลกอริธึมจากล่างขึ้นบน

    ...

    ต้นไม้สีดำสีแดงเป็นที่นิยมเนื่องจากโครงสร้างข้อมูลส่วนใหญ่มีชื่อแปลก ๆ ตัวอย่างเช่นใน Java และ C ++ โครงสร้างแผนผังไลบรารีจะถูกนำไปใช้กับต้นไม้สีดำสีแดง ต้นไม้สีแดงสีดำนั้นเปรียบได้กับความเร็วของต้นไม้ AVL ในขณะที่ความสมดุลไม่ดีนักงานที่ใช้ในการรักษาสมดุลมักจะดีกว่าในต้นไม้สีดำสีแดง มีความเข้าใจผิดบางอย่างที่ลอยอยู่รอบ ๆ แต่ส่วนใหญ่แล้วโฆษณาเกี่ยวกับต้นไม้สีแดงดำนั้นถูกต้อง

  3. ต้นไม้ AVL
  4. การจับคู่สตริง Rabin-Karpใช้สำหรับการบีบอัด
  5. คำนวณคำต่อท้ายของออโตมาตา
  6. ตัวกรอง Bloomดำเนินการโดย Apple Inc.
  7. อัลกอริทึมของ Bresenham

ไลบรารีภาษาโปรแกรม

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

  1. STL C ++รวมถึงรายการสแต็คคิว, แผนที่, เวกเตอร์และอัลกอริทึมสำหรับการเรียงลำดับการค้นหาและการจัดการกอง
  2. Java APIนั้นกว้างขวางและครอบคลุมมากขึ้น
  3. Boost ไลบรารี c ++รวมถึงขั้นตอนวิธีการเช่นบอยเยอร์มัวร์และนูมอร์ริสแพรตต์อัลกอริทึมการจับคู่สาย

ขั้นตอนวิธีการจัดสรรและการจัดตารางเวลา

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

  1. ใช้น้อยที่สุดเมื่อเร็ว ๆ นี้สามารถนำมาใช้ในหลายวิธี การดำเนินรายการที่ใช้ในลินุกซ์
  2. ความเป็นไปได้อื่น ๆ มีความสำคัญอย่างแรก, อย่างน้อยใช้บ่อย, และ Round Robin
  3. ตัวแปรของ FIFO ถูกใช้โดยระบบ VAX / VMS
  4. อัลกอริทึม ClockโดยRichard Carrใช้สำหรับการเปลี่ยนเฟรมหน้าใน Linux
  5. โปรเซสเซอร์ Intel i860 ใช้นโยบายการเปลี่ยนแบบสุ่ม
  6. แคชเปลี่ยนการปรับตัวถูกนำมาใช้ในบางตัวควบคุมการจัดเก็บข้อมูล IBM และถูกนำมาใช้ใน PostgreSQL แต่เพียงสั้น ๆ เนื่องจากความกังวลสิทธิบัตร
  7. ขั้นตอนวิธีการจัดสรรหน่วยความจำบัดดี้ซึ่งจะกล่าวถึงโดยนูใน TAOCP ฉบับ 1 ใช้ในลินุกซ์และ jemalloc จัดสรรพร้อมกันใช้โดย FreeBSD และในFacebook

Core utils ในระบบ * nix

  1. grepและawkทั้งดำเนินการก่อสร้าง ธ อมป์สัน McNaughton-ยามาดะของ NFAs จากการแสดงออกปกติซึ่งเห็นได้ชัดแม้กระทั่งเต้นการดำเนินงาน Perl
  2. tsortใช้การจัดเรียงทอพอโลยี
  3. fgrepใช้อัลกอริทึมการจับคู่สตริง Aho-Corasick
  4. GNU grep , การดำเนินการขั้นตอนวิธีการบอยเยอร์มัวร์ตามที่ผู้เขียนไมค์ Haertel
  5. crypt (1) บน Unix ใช้ตัวแปรของอัลกอริทึมการเข้ารหัสในเครื่อง Enigma
  6. Unix diffนำไปใช้งานโดย Doug McIllroy ซึ่งเป็นต้นแบบที่เขียนร่วมกับ James Hunt ทำงานได้ดีกว่าอัลกอริธึมการเขียนโปรแกรมแบบไดนามิกมาตรฐานที่ใช้ในการคำนวณระยะทางของ Levenshtein รุ่น Linuxคำนวณระยะทางที่สั้นแก้ไข

อัลกอริทึมการเข้ารหัสลับ

นี่อาจเป็นรายการที่ยาวมาก อัลกอริทึมการเข้ารหัสลับมีการใช้งานในซอฟต์แวร์ทั้งหมดที่สามารถทำการสื่อสารที่ปลอดภัยหรือการทำธุรกรรม

  1. ต้นไม้ Merkleเฉพาะเสือต้นไม้แฮตัวแปรที่ถูกนำมาใช้ในการใช้งานแบบ peer-to-peer เช่นGTK GnutellaและLimeWire
  2. MD5ใช้สำหรับตรวจสอบแพคเกจซอฟต์แวร์และใช้สำหรับการตรวจสอบความสมบูรณ์ของระบบ * nix ( การนำลินุกซ์ไปใช้ ) และรองรับบน Windows และ OS X
  3. OpenSSLใช้อัลกอริธึมการเข้ารหัสมากมายรวมถึง AES, Blowfish, DES, SHA-1, SHA-2, RSA, DES, ฯลฯ

คอมไพเลอร์

  1. การแยกวิเคราะห์ LALRนั้นดำเนินการโดย yacc และ bison
  2. อัลกอริธึม Dominator ถูกใช้ในคอมไพเลอร์ปรับให้เหมาะสมที่สุดโดยยึดตามฟอร์ม SSA
  3. lexและflexรวบรวมการแสดงออกปกติใน NFAs

การบีบอัดและการประมวลผลภาพ

  1. อัลกอริทึมLempel-Zivสำหรับรูปแบบภาพ GIF ถูกนำไปใช้ในโปรแกรมจัดการภาพโดยเริ่มจากยูทิลิตี้ * nix ที่แปลงเป็นโปรแกรมที่ซับซ้อน
  2. การเข้ารหัสความยาวรันใช้เพื่อสร้างไฟล์ PCX (ใช้โดยโปรแกรม Paintbrush ดั้งเดิม) ไฟล์ BMP ที่ถูกบีบอัดและไฟล์ TIFF
  3. การบีบอัดเวฟเล็ตเป็นพื้นฐานสำหรับ JPEG 2000 ดังนั้นกล้องดิจิตอลทั้งหมดที่ผลิตไฟล์ JPEG 2000 จะใช้อัลกอริทึมนี้
  4. การแก้ไขข้อผิดพลาด Reed-Solomon นั้นใช้งานในเคอร์เนล Linux , ไดรฟ์ซีดี, เครื่องอ่านบาร์โค้ดและถูกรวมเข้ากับการแปลงภาพจาก Voyager

ข้อขัดแย้งขับเคลื่อนการเรียนรู้ข้อ

ตั้งแต่ปี 2000 เวลาทำงานของนักแก้ปัญหา SAT เกี่ยวกับมาตรฐานอุตสาหกรรม (โดยปกติจะมาจากอุตสาหกรรมฮาร์ดแวร์แม้ว่าจะมีการใช้แหล่งข้อมูลอื่นด้วย) ก็ลดลงเกือบทุกปี ส่วนที่สำคัญมากของการพัฒนานี้คืออัลกอริทึมการเรียนรู้ข้อขัดแย้งขับเคลื่อนที่รวมอัลกอริทึมการจำกัด การเผยแพร่บูลีนในเอกสารต้นฉบับของเดวิส Logemann และเลิฟแลนด์ด้วยเทคนิคการเรียนรู้ประโยคที่เกิดขึ้นในการเขียนโปรแกรมข้อ จำกัด และการวิจัยปัญญาประดิษฐ์ สำหรับการสร้างแบบจำลองเฉพาะทางอุตสาหกรรม SAT ถือเป็นปัญหาง่าย ( ดูการสนทนานี้) สำหรับฉันนี่เป็นหนึ่งในเรื่องราวความสำเร็จที่ยิ่งใหญ่ที่สุดในช่วงไม่กี่ปีที่ผ่านมาเพราะมันรวมความก้าวหน้าของอัลกอริทึมที่แพร่กระจายในช่วงหลายปีที่ผ่านมาความคิดด้านวิศวกรรมที่ชาญฉลาดการประเมินผลการทดลอง บทความ CACM โดยมาลิกและ Zhangคือการอ่านที่ดี อัลกอริทึมนี้ได้รับการสอนในมหาวิทยาลัยหลายแห่ง (ฉันเคยเข้าเรียนสี่ครั้งในกรณีนี้) แต่โดยทั่วไปแล้วจะอยู่ในชั้นเรียนแบบตรรกะหรือแบบเป็นทางการ

การประยุกต์ใช้ตัวแก้ SAT นั้นมีมากมาย IBM, Intel และ บริษัท อื่น ๆ มีการใช้งานตัวแก้ไข SAT ของตนเอง ผู้จัดการแพคเกจใน OpenSUSE ยังใช้แก้ SAT


5
@ HuckBennett, CDCL เป็นอัลกอริทึมแปรผันตามฮิวริสติก แต่ไม่ใช่ฮิวริสติก มันมีพฤติกรรมที่อธิบายถึงกรณีที่เลวร้ายที่สุด แต่มันก็ไม่ได้แสดงว่า ยิ่งกว่านั้นเราไม่สามารถพิสูจน์ได้ดีกว่าและดีที่สุดที่เราสามารถทำได้ในทางปฏิบัติดังนั้นฉันรู้สึกว่านักวิทยาศาสตร์คอมพิวเตอร์ทุกคนควรรู้เกี่ยวกับมัน! สำหรับ LRU, FIFO เป็นต้นพวกเขาเป็นฮิวริสติก แต่เช่นเดียวกับ ARC อาจต้องใช้อัลกอริทึมที่ฉลาดหรือโครงสร้างข้อมูลในการดำเนินการ
วีเจย์ D

9
ความคิดเห็นดังกล่าวจะไม่นำไปใช้กับ Simplex: เริ่มแรกเข้าใจไม่ดีและแสดงให้เห็นในภายหลังว่ามีความเป็นเอกซ์โพเนนเชียล แต่ใช้งานได้จริงในทางปฏิบัติ CDCL นั้นน่าสนใจสำหรับการวิเคราะห์อัลกอริธึมเพราะคุณต้องผ่านการพิสูจน์ความซับซ้อนเพื่อให้ได้ตระกูลของสูตรที่แสดงพฤติกรรมของกรณีที่เลวร้ายที่สุดและเพื่อแสดงว่ามันอาจรวบรัดมากกว่าความละเอียดที่หลากหลาย มีส่วนขยายต่าง ๆ เช่นการแบ่งสมมาตรและเทคนิค autarky ซึ่งการวิเคราะห์ดังกล่าวยังคงเปิดอยู่
วีเจย์

28
นี่เป็นสมบัติสำหรับนักเรียน
neo1691

2
@EmanueleViola ฉันได้เพิ่มตัวอย่างอีกสองสามข้อ ตอนนี้โพสต์มีความยาวดังนั้นฉันไม่ต้องการที่จะขยาย บางทีคุณควรถามคำถามใหม่โดยเฉพาะเกี่ยวกับการใช้งานตัวกรอง Dijkstra, Simplex, Bloom ซึ่งเป็นส่วนหนึ่งของระบบจริงเช่น Linux, Chrome, เว็บเซิร์ฟเวอร์เป็นต้นฉันคิดว่าคุณมีแนวโน้มที่จะได้รับคำตอบที่ดีถ้าคุณเจาะจง
วีเจย์ D

4
ข่าวแฮ็กเกอร์และ r / การเขียนโปรแกรม
วีเจย์ D

40

PageRankเป็นหนึ่งในอัลกอริธึมที่รู้จักกันดีที่สุด พัฒนาโดย Larry Page ผู้ร่วมก่อตั้งและผู้เขียนร่วมของ Google โดยเป็นพื้นฐานของเครื่องมือค้นหาดั้งเดิมของ Google และได้รับการยอมรับอย่างกว้างขวางในการช่วยให้พวกเขาได้รับผลลัพธ์การค้นหาที่ดีกว่าคู่แข่งในเวลานั้น

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

M

Mkπ0kπ0M


7
ฉันไม่คิดว่านี่เป็นเนื้อหาขั้นตอนวิธีทั่วไป
มนู

14
ฉันเรียนรู้เกี่ยวกับ PageRank เป็นครั้งแรกในชั้นเรียนอัลกอริทึม อันที่จริงฉันคิดว่าอาจารย์เลือกเพราะมันเป็นตัวอย่างที่ดีของ "อัลกอริทึมที่ใช้ในทางปฏิบัติ" หากคุณ จำกัด ตัวอย่างให้กับวัสดุประเภท "ครึ่งแรกของ CLRS" รายการตัวอย่างจะยาวเกินไปหรือเล็กเกินไป - quicksort, B-trees และอัลกอริทึมของ Dijkstra นั้นแพร่หลาย
Huck Bennett

2
เราสอน PageRank ให้กับนักศึกษาระดับปริญญาตรี
Aaron Roth

6
ฉันสอนให้กับนักศึกษาระดับปริญญาตรีด้วย (ทั้งในชั้นเรียนอัลกอริทึมที่จำเป็นและในวิชาเลือกกราฟที่มีความเชี่ยวชาญมากกว่า)
David Eppstein

2
ฉันเรียน PageRank ในฐานะนักศึกษาระดับปริญญาตรีในวิชาเลือก
วีเจย์ D

33

ฉันจะพูดถึงการใช้งานซอฟต์แวร์ CPLEX ที่ใช้กันอย่างแพร่หลาย (หรือคล้ายกัน) ของวิธีการ / อัลกอริทึม Simplex สำหรับการแก้ปัญหาการเขียนโปรแกรมเชิงเส้น เป็นอัลกอริธึมที่ใช้มากที่สุดในการวิจัยเศรษฐกิจและการปฏิบัติการ

"หากใครจะใช้สถิติเกี่ยวกับปัญหาทางคณิตศาสตร์ที่ใช้เวลาส่วนใหญ่ของคอมพิวเตอร์ในโลกแล้ว (ไม่นับปัญหาการจัดการฐานข้อมูลเช่นการเรียงลำดับและการค้นหา) คำตอบอาจเป็นโปรแกรมเชิงเส้น " (L. Lovász, ใหม่ อัลกอริธึมการเขียนโปรแกรมเชิงเส้นดีกว่าหรือแย่กว่าวิธีซิมเพล็ก? Math. Intel lucerencer 2 (3) (1979/80) 141-146)

อัลกอริธึม Simplex นั้นมีอิทธิพลอย่างมากในทางทฤษฎี ดูตัวอย่างเช่น(พหุนาม) Hirsch การคาดคะเน

ฉันเดานักศึกษาระดับปริญญาตรีหรือปริญญาเอกโดยทั่วไป คลาสในอัลกอริทึมเกี่ยวข้องกับอัลกอริทึม Simplex (รวมถึงอัลกอริธึมพื้นฐานจากพีชคณิตเชิงเส้นเช่นวิธีกำจัดเกาส์)

(อัลกอริทึมที่ประสบความสำเร็จอื่น ๆ รวมถึง Quicksort สำหรับการเรียงลำดับแสดงอยู่ใน อัลกอริทึมจากหนังสือ )


"การวิจัยเศรษฐกิจและการดำเนินงาน" ไม่เจาะจงเพียงพอ CPLEX ไม่ใช่ประเภทของตัวอย่างที่ฉันกำลังมองหาอย่างใดอย่างหนึ่งเพราะมันเป็นเพียงการใช้งานของอัลกอริทึม; มันจะแตกต่างกันถ้าพูดคอมไพเลอร์ gcc ใช้วิธีการ simplex
มนู

12
ฉันคิดว่า "ปัญหาการเขียนโปรแกรมเชิงเส้น" นั้นเฉพาะเจาะจงมากเมื่อเราพูดเกี่ยวกับเศรษฐกิจและ นอกจากนี้โดย CPLEX ฉันหมายถึงอัลกอริทึมที่อยู่เบื้องหลังการใช้งาน
vb le

16
"วันนี้ บริษัท ขนาดใหญ่ส่วนใหญ่ใช้การเขียนโปรแกรมเชิงเส้นเพื่อกำหนดราคาผลิตภัณฑ์และจัดการห่วงโซ่อุปทาน บริษัท ขนส่งใช้เพื่อเลือกวิธีที่ถูกที่สุดในการรวบรวมประสานงานและจัดส่งเส้นทางของผลิตภัณฑ์จำนวนมากจากซัพพลายเออร์ที่จำหน่ายทั่วโลก อุตสาหกรรมใช้สำหรับการสำรวจผสมกำหนดการผลิตและการจัดจำหน่ายอุตสาหกรรมเหล็กและเหล็กกล้าใช้เพื่อประเมินแร่เหล็กสำรวจการเพิ่มของเตาอบโค้กและผลิตภัณฑ์ที่เลือก ... " news.stanford.edu/news/2005/may25/ dantzigobit-052505.html
Sasho Nikolov

ขอบคุณ แต่ฉันพบว่าคำพูดคลุมเครือชะมัด ฉันคิดว่าถ้าฉันบอกว่าหน้าชั้นเรียนครึ่งหนึ่งของคนนั้นจะผล็อยหลับไป ;-) มันจะแตกต่างกันถ้าเราพูดอะไรเช่น: UPS ใช้ LP เพื่อจัดส่งแพ็คเกจดังต่อไปนี้ ... ฉันไม่ได้พูดตัวอย่างดังกล่าว ไม่สำคัญที่จะค้นพบ แต่เนื่องจาก "บริษัท ขนาดใหญ่ส่วนใหญ่ใช้ LP" ฉันหวังว่าอย่างน้อยเราจะสามารถชี้ไปที่หนึ่งได้
มนู

10
ออกจากหัวของฉันตั้งแต่ปี 2007 LAX (สนามบิน) ได้ใช้ซอฟต์แวร์สำหรับการแก้ปัญหาเกม Stackelberg เพื่อกำหนดเวลาเจ้าหน้าที่รักษาความปลอดภัย การแก้ซีรี่ส์ขนาดใหญ่เป็นส่วนหนึ่งของสิ่งที่ทั้งเห็นเช่นteamcore.usc.edu/ARMOR-LAX นอกจากนั้นฉันจะถามใครสักคนจากฝ่ายวิจัยการปฏิบัติการของคุณ: พวกเขามักจะมีเรื่องราวเกี่ยวกับสงครามมากมายเกี่ยวกับการใช้ LP ในชีวิตจริง
Sasho Nikolov

30

ดังที่ฉันเข้าใจโปรแกรมการจับคู่ผู้อยู่อาศัยแห่งชาติเป็นเวลานานเป็นเพียงการประยุกต์ใช้อัลกอริทึมของGale-Shapleyสำหรับปัญหาการแต่งงานที่มั่นคง มันได้รับการปรับปรุงเล็กน้อยเพื่อจัดการรายละเอียดเพิ่มเติมบางอย่างเช่นการมอบหมายพิธีวิวาห์ (หรือที่เรียกว่า "ปัญหาสองตัว") ฯลฯ


ฉันไม่แน่ใจว่าการแต่งงานที่มั่นคงเป็นวัสดุขั้นตอนวิธีทั่วไป
มนู

16
มันอยู่ในหนังสือออกแบบอัลกอริทึม Tardos และ Kleinberg และในอัลกอริธึมแบบสุ่มของ Motwani และหนังสือทั้งสองเล่มถูกนำมาใช้อย่างกว้างขวาง การแต่งงานที่มั่นคงอาจไม่ได้รับการสอนในระดับสากลในหลักสูตรอัลกอริธึม แต่แน่นอนว่ามันถูกสอนในหลาย ๆ เรื่อง
Sasho Nikolov

10
การค้นหาอย่างรวดเร็วเผยให้เห็นว่ามันปรากฏในCS70 , MIT's 6.042 , CMSC451 ของ UMD ของ Berkeleyฯลฯ ...
mhum

1
ที่น่าสนใจเมื่อคุณเพิ่มในการมอบหมายงานพิธีวิวาห์จะกลายเป็นปัญหา NP-สมบูรณ์: arxiv.org/abs/1308.4534 อย่างไรก็ตามในทางปฏิบัติสิ่งนี้ดูเหมือนจะไม่ทำให้เกิดปัญหามากเกินไป: en.wikipedia.org/wiki/ …
Joshua Grochow

2
@EmanueleViola ในขณะที่มันอาจจะไม่ได้รับการคุ้มครองแบบดั้งเดิมรวมอยู่ในหนังสือ Kleinberg / Tardos ได้ทำให้มันเป็นที่นิยมมากขึ้น (และถ้าไม่ควรจะเป็น!)
Suresh Venkat

24

หากคุณยังรวมถึงหลักสูตรระดับปริญญาเอกหลักสูตร CS ระดับบัณฑิตศึกษาจำนวนมาก (ส่วนใหญ่) จะรวมหลักสูตรในสาขาการเข้ารหัสด้วย หากคุณมีหลักสูตรในทฤษฎีการเข้ารหัสคุณจะครอบคลุมรหัส Reed-Solomonซึ่งเป็นส่วนประกอบสำคัญของการทำงานของแผ่นดิสก์ขนาดกะทัดรัดและการเข้ารหัส Huffmanซึ่งใช้ในรูปแบบไฟล์ JPEG, MP3 และ ZIP คุณอาจครอบคลุมLempel-Zivซึ่งใช้ในรูปแบบ GIF ทั้งนี้ขึ้นอยู่กับทิศทางของหลักสูตร โดยส่วนตัวแล้วฉันได้ Lempel-Ziv ในหลักสูตรอัลกอริทึมระดับปริญญาตรี แต่ฉันคิดว่ามันอาจผิดปกติ


1
และฉันได้รับการบรรยายเกี่ยวกับการเข้ารหัส Huffman ในระดับปริญญาตรีซึ่งจำเป็นสำหรับโครงการ
Brian S

Huffman เป็นหนึ่งในบทแรกของ CLRS ดังนั้นจึงควรมีคุณสมบัติแน่นอน
Sasho Nikolov

21

GNU grepเป็นเครื่องมือบรรทัดคำสั่งสำหรับค้นหาไฟล์อินพุตหนึ่งไฟล์ขึ้นไปสำหรับบรรทัดที่มีการจับคู่กับรูปแบบที่ระบุ เป็นที่ทราบกันดีว่าgrepนั้นเร็วมาก! นี่คือคำพูดจากผู้เขียน Mike Haertel (นำมาจากที่นี่ ):

GNU grep uses the well-known Boyer-Moore algorithm, which looks first for the
final letter of the target string, and uses a lookup table to tell it how far
ahead it can skip in the input whenever it finds a non-matching character.

19

โดยทั่วไปแล้วรางวัล Kanellakisนั้นได้รับจาก ACM สำหรับการค้นพบทางทฤษฎีที่แม่นยำซึ่งมีผลกระทบอย่างมากในทางปฏิบัติ

2012 ได้รับรางวัลสำหรับการแฮ็บที่มีความอ่อนไหวในพื้นที่ซึ่งได้กลายเป็นวิธีการไปสู่การลดมิติในการขุดข้อมูลสำหรับปัญหาที่อยู่ใกล้เพื่อนบ้าน (และค่อนข้างง่ายต่อการสอน - อย่างน้อยอัลกอริทึมเอง)


ฉันคิดว่านี่สามารถสอนได้ แต่ไม่ได้สอนอย่างกว้างขวาง
มนู

3
โชคร้าย แต่จริง อย่างไรก็ตามตัวแปรของ LSH (เช่นร่างการนับนาทีและญาติ) เริ่มปรากฏในหลักสูตร "data ขนาดใหญ่" หรือ "data mining" ฉันสอนตัวกรองบลูมในชั้นเรียนอัลกอริทึมของฉัน
Suresh Venkat

จากประสบการณ์ส่วนตัว LSH ไม่ได้ปรับขนาดเราบนอินสแตนซ์ของ "ข้อมูลขนาดใหญ่" (รายการ 100 ล้านรายการ)
lynxoid

1
@lynxoid นั่นเป็นการอภิปราย / คำถามแยกต่างหาก :) มีตัวอย่างเพียงพอของที่มันไม่ทำงานที่ฉันคิดว่ามันเกี่ยวข้องกับคำถามนี้โดยเฉพาะ
Suresh Venkat

18

ε

ตัวอย่างของการใช้ในอุตสาหกรรมของโครงสร้างข้อมูลเหล่านี้คือ:

  • ระบบSawzallของ Google สำหรับการวิเคราะห์ข้อมูลที่ไม่มีโครงสร้างใช้ Count Sketch เพื่อใช้งานฟังก์ชั่น 'รายการยอดนิยม'
  • ระบบ "ฐานข้อมูลสตรีม" ของGigascopeของ AT&T สำหรับการตรวจสอบการรับส่งข้อมูลของเครือข่ายจะใช้ร่างร่าง CountMin
  • ระบบการตรวจสอบอย่างต่อเนื่อง (CMON) ของ Sprint ใช้ระบบCountMin

นี่เป็นเว็บไซต์ที่รวบรวมข้อมูลเกี่ยวกับแอปพลิเคชั่นของ CountMin

เท่าที่สอนฉันรู้ว่าเทคนิคการวาดภาพขั้นพื้นฐานถูกสอนที่ Princeton ในหลักสูตรคณิตศาสตร์ไม่ต่อเนื่องระดับปริญญาตรี ฉันได้รับการสอนร่าง CountMin ในหลักสูตรอัลกอริทึมแรกของฉัน ไม่ว่าในกรณีใดการวิเคราะห์ของ CountMin นั้นง่ายกว่าการวิเคราะห์สำหรับอัลกอริธึมแบบสุ่มอื่น ๆ เกือบทั้งหมด: มันเป็นแอพพลิเคชั่นที่ใช้ความเป็นอิสระแบบคู่ที่ตรงไปตรงมาและความไม่เท่าเทียมของมาร์คอฟ หากนี่ไม่ใช่เนื้อหามาตรฐานในหลักสูตรอัลกอริทึมส่วนใหญ่ฉันคิดว่าเป็นเพราะเหตุผลทางประวัติศาสตร์


1
ตัวอย่างที่ยอดเยี่ยม (แม้ว่าตอนนี้จะไม่ใช่แกนหลักค่อนข้างมาก)
มนู

16

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

  • เมื่อเร็ว ๆ นี้ในปี 2550 พันธมิตรเพื่อการบริจาคจับคู่ได้ใช้อัลกอริทึมของอับราฮัมบลัมและแซนด์โฮล์ม พวกเขาอาจยังใช้อยู่ แต่ฉันไม่สามารถค้นพบโดยการค้นหาออนไลน์ แม้ว่าอัลกอริทึมนี้แทบจะไม่ครอบคลุมในหลักสูตร "มาตรฐาน" แต่ก็รวมความคิดพื้นฐานหลายอย่างที่ได้รับการสอนในหลักสูตรดังกล่าวเพื่อให้อัลกอริทึมที่ดีพอสำหรับปัญหาที่โดยทั่วไปแล้ว NP-complete (ตัวแปรของ Cycle Cover )

  • National Kidney Registry ยังใช้อัลกอริทึมมาตรฐานบางอย่างรวมถึง CPLEX (ณ จุดหนึ่ง) นี้นำไปสู่การดำเนินการจริงห่วงโซ่ของการปลูกการเชื่อมโยง 60 คน

นี่เป็นหนึ่งในตัวอย่างที่ฉันโปรดปรานไม่ใช่เพียงความสำเร็จของอัลกอริธึม แต่เป็นความสำคัญของการศึกษาอัลกอริธึมสำหรับปัญหา NP-complete แท้จริงแล้วพวกเขาสามารถช่วยชีวิตและทำไปแล้ว!


นอกจากนี้อัลกอริธึมรุ่นที่ง่ายกว่านี้ยังใช้เพื่อแลกเปลี่ยนเกมกระดาน: okasaki.blogspot.co.uk/2008/03/what-heck-is-math-trade.html
Radu GRIGore

15

อัลกอริทึมของ Viterbi ซึ่งยังคงใช้กันอย่างแพร่หลายในการรู้จำเสียงและแอปพลิเคชั่นอื่น ๆ อีกมากมาย: http://en.wikipedia.org/wiki/Viterbi_algorithmอัลกอริธึมเองคือการโปรแกรมแบบไดนามิกพื้นฐาน

จากวิกิพีเดีย: "อัลกอริทึม Viterbi ถูกเสนอโดย Andrew Viterbi ในปี 1967 เป็นอัลกอริทึมการถอดรหัสสำหรับรหัส convolutional ผ่านลิงค์การสื่อสารดิจิตอลที่มีเสียงดัง [1] อัลกอริทึมพบการประยุกต์สากลในการถอดรหัสรหัส Convolutional ที่ใช้ทั้งในระบบดิจิตอล โมเด็ม dial-up, ดาวเทียม, การสื่อสารในห้วงอวกาศและ 802.11 LAN ไร้สายตอนนี้มันถูกใช้โดยทั่วไปในการรู้จำเสียงพูด, การสังเคราะห์เสียงพูด, การจำคำศัพท์, การจำคำหลัก, ภาษาศาสตร์คอมพิวเตอร์และชีวสารสนเทศศาสตร์เช่นการพูดเป็นข้อความ การรับรู้) สัญญาณอะคูสติกถือเป็นลำดับเหตุการณ์ที่สังเกตและสตริงข้อความถูกพิจารณาว่าเป็น "สาเหตุที่ซ่อนอยู่" ของสัญญาณอะคูสติกอัลกอริทึม Viterbi ค้นหาสตริงข้อความที่เป็นไปได้มากที่สุดที่ให้สัญญาณอะคูสติก "


13
  1. A * ใช้ในอุปกรณ์นำทางส่วนบุคคลจำนวนมาก (หรือที่รู้จักกันในชื่อหน่วย GPS)
  2. A * ถูกกำหนดไว้อย่างดีมากและถูกนำไปใช้อย่างตรงไปตรงมา
  3. A * ไม่ได้เป็นเรื่องเล็กน้อย แต่ก็ไม่ได้รับปริญญาเอก เพื่อทำความเข้าใจ

A * ได้รับการสอนบ่อยครั้งในการออกแบบเกม ฉันไม่คิดว่าเกม 3 มิติที่ทันสมัยมักใช้ A * สำหรับการนำทาง NPC แต่เกม 2D / isometric รวมถึงเกมเก่าใช้ประโยชน์จากอัลกอริทึม
Brian S

@BrianS คุณรู้ไหมว่าตัวอย่างของขั้นตอนวิธีการหาเส้นทางที่ใช้ในเกม 3D โดยเฉพาะศัตรู NPC ในเกม (เช่น Shooter npc) ฉันจำการอ่านบางอย่างเช่น ... การแบ่งแผนที่ในภาคหกเหลี่ยมและใช้มันเป็นโหนดแทนที่จะเป็นสี่เหลี่ยม และนั่นทำให้การเคลื่อนไหวราบรื่นขึ้น
Goodwine

@ Goodwine ขออภัยฉันไม่มีตัวอย่างจริง ๆ ของอัลกอริธึมการค้นหาเส้นทางในเกม 3 มิติ ประสบการณ์ส่วนตัวของฉันอยู่กับสภาพแวดล้อมที่เหมือน "คิวบ์" (แผนที่ที่สร้างจากคิวบ์ซึ่งตัวละครยืนอยู่ - โดยทั่วไปคือ 2D แม้จะมีการเรนเดอร์ 3D) และ Dummy AIs ที่ใช้สำหรับทดสอบตัวละครของผู้เล่น
Brian S

12

ตรวจสอบโครงการ BonnTools ของ Jens Vygen สำหรับการออกแบบชิป http://www.or.uni-bonn.de/~vygen/projects.html ฉันได้ยินเรื่องนี้บ้างแล้วก็ดูที่เอกสารของพวกเขาด้วย พวกเขาใช้การปัดเศษแบบสุ่มในสไตล์ของ Raghavan-Thompson รวมถึงวิธีการปรับปรุงน้ำหนักแบบทวีคูณสำหรับการแก้ปัญหา LP ไหลหลายหน่วยขนาดใหญ่ อย่างไรก็ตามเช่นเดียวกับโครงการขนาดใหญ่พวกเขาจำเป็นต้องทำวิศวกรรมด้วยเช่นกัน แต่วิธีการนั้นขึ้นอยู่กับอัลกอริทึมที่รู้จักกันดี


ฉันจะดู แต่ไม่ฟังเหมือนวัสดุอัลกอริธึมทั่วไป
มนู

8
อืมการปัดเศษแบบสุ่มโดยทั่วไปจะสอนในหลักสูตรระดับปริญญาเอกอัลกอริทึมไม่ใช่?
Chandra Chekuri

2
ทำไมต้องปัดเศษแบบสุ่ม Sanjeev Arora, Elad Hazan และ Satyen Kale คิดว่าแม้แต่วิธีการปรับปรุงน้ำหนักแบบ mulplicative ก็เป็นพื้นฐานพอที่จะสอนในระดับ UG :) "เรารู้สึกว่าอัลกอริทึม meta ของเราและการวิเคราะห์นั้นง่ายและมีประโยชน์มากพอที่พวกเขาจะถูกมองว่าเป็นเครื่องมือพื้นฐาน สอนให้นักเรียนทุกอัลกอริทึมพร้อมกับการหารและพิชิตการเขียนโปรแกรมแบบไดนามิกการสุ่มตัวอย่างและสิ่งที่คล้ายกัน " ( เปรียบเทียบ cs.princeton.edu/~arora/pubs/MWsurvey.pdf )
Jagadish

11

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


10

ฉันค่อนข้างประหลาดใจที่มีอัลกอริธึมแฟนซีทั้งหมดข้างต้นไม่มีใครพูดถึงอัลกอริธึมการบีบอัดตระกูล Lempel-Ziv ที่น่าเคารพ (คิดค้นในปี 1977/78)

  1. สิ่งเหล่านี้ถูกนำไปใช้ทุกที่ - ส่งข้อความถึงรูปภาพเพื่อทำการประมวลผล มีความเป็นไปได้ค่อนข้างมากที่ LZ * เป็นตระกูลอัลกอริทึมที่มีคนใช้มากที่สุด
  2. การบีบอัดพจนานุกรมเป็นการค้นพบครั้งยิ่งใหญ่ในทฤษฎีการบีบอัด
  3. อัลกอริธึมในครอบครัวค่อนข้างตรงไปตรงมาและเข้าใจง่าย

ปรับปรุง

เห็นได้ชัดว่ามันถูกกล่าวสั้น ๆ แล้ว


10

การสลายตัวของค่าเอกพจน์ (SVD) มีการเชื่อมต่อที่แข็งแกร่งกับการวิเคราะห์ปัจจัยทางสถิติหรือการวิเคราะห์องค์ประกอบหลักและสามารถเข้าใจได้ในพีชคณิตเชิงเส้นระดับปริญญาตรีหรือระดับสถิติและมีคุณสมบัติทางทฤษฎีที่สำคัญมากมาย มันยังมีบทบาทในอัลกอริธึมการบีบอัดรูปภาพ มันเล่นเป็นองค์ประกอบสำคัญในรายการที่ชนะในการประกวดรางวัล Netflix $ 1M (หนึ่งในการแข่งขันการบันทึกข้อมูลที่ใหญ่ที่สุดในโลก) และขณะนี้มีการใช้งานบนไซต์ของพวกเขาเพื่อทำนายการจัดอันดับผู้ใช้ เป็นที่ทราบกันว่ามีความเกี่ยวข้องอย่างสูงกับเครือข่ายประสาทเทียมที่จัดโดย Hebbianซึ่งเกิดขึ้นในทฤษฎีทางชีววิทยา

มีการเชื่อมต่อบางอย่างกับการไล่ระดับสีซึ่งใช้กันอย่างแพร่หลายในการเรียนรู้ของเครื่องและเครือข่ายประสาทเทียมและเป็นเทคนิคการเพิ่มประสิทธิภาพที่ใช้อย่างกว้างขวางซึ่งในกรณีนี้วิธีการของนิวตันเป็นรูปแบบ 2d พื้นฐาน มีอัลกอริทึมการไล่ระดับสีสำหรับการรับ SVD


10

การค้นหาเส้นทางของออยเลอรีอยู่ที่ฐานของการประชุมจีโนมซึ่งเป็นงานที่ปฏิบัติกันโดยทั่วไปเมื่อทำงานกับจีโนมเต็มรูปแบบ (ในชีวสารสนเทศศาสตร์, ยา, นิติเวช, นิเวศวิทยา)

อัพเดทลืมสิ่งนี้ชัดเจน: UPS, FedEx, USPS ทุกคนต้องแก้ปัญหาพนักงานขายที่เดินทางทุกคืน ประหยัดเวลาและเงินสำหรับพวกเขาในการส่งไดรเวอร์ในเส้นทางที่เหมาะสม

UPDATE2ปัญหาชุดจุดสุดยอดข้อเสนอแนะขั้นต่ำจะใช้สำหรับการแก้ปัญหาการหยุดชะงักในหลาย ๆ ระบบ


คุณแน่ใจหรือว่า TSP เป็นปัญหาที่ บริษัท จัดส่งพัสดุพยายามแก้ไข ฉันคิดว่าความท้าทายในทางปฏิบัติที่ใหญ่กว่าคือเครื่องหลังและปัญหาการบรรจุอื่น ๆ
András Salamon

การมอบหมายให้คนขับเปลี่ยนไปทุกวัน (เช่นคนที่แต่งตัวประหลาดของ UPS ไม่จำเป็นต้องไปที่บ้านหลังเดียวกันทุกวัน) ดังนั้นเส้นทางจะต้องมีการอัพเดททุกวัน มันไม่ใช่ TSP ที่บริสุทธิ์ - มีข้อ จำกัด เพิ่มเติมเช่นถนนเดินรถทางเดียวไม่มีรถกลับรถส่งพัสดุภัณฑ์ที่ด้านหนึ่งของถนน แต่ไม่ใช่ที่อื่น
lynxoid

ฉันว่าการบรรจุก็สำคัญเช่นกัน
lynxoid

9

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


8

หนังสือเล่มใหม่นี้มีมูลค่าการพิจารณาว่าเป็นคำตอบที่สมบูรณ์ / ละเอียดสำหรับคำถามในรูปแบบที่สะดวกขยาย / รวบรวมและสามารถใช้เป็นวัสดุเสริมสำหรับชั้นเรียนอัลกอริทึม [บางส่วนของสิ่งเหล่านี้ถูกกล่าวถึงแล้ว; ความทับซ้อนที่แข็งแกร่งนั้นโดดเด่น]


การอ้างอิงครั้งที่ 2 มีพื้นเพมาจากมกราคม / กุมภาพันธ์ 2000 เรื่อง Computing in Science & Engineering สิ่งพิมพ์ร่วมของ American Institute of Physics และ IEEE Computer Society เรียบเรียงโดยบรรณาธิการแขกรับเชิญ Jack Dongarra จากมหาวิทยาลัยเทนเนสซีและห้องปฏิบัติการแห่งชาติ Oak Ridge และ Francis Sullivan จากศูนย์วิทยาศาสตร์คอมพิวเตอร์ที่สถาบันเพื่อการวิเคราะห์การป้องกัน
vzn

7

การค้นหาสตริงKnuth-Morris-Prattใช้กันอย่างแพร่หลายเฉพาะและสอนในระดับปริญญาตรี / บัณฑิต CS


2
จะดีถ้าคุณสามารถชี้ไปที่การใช้งานเฉพาะ บางอย่างเช่น MS Word ใช้ KMP
มนู

6

คิดถึงอัลกอริทึมพื้นฐานมาก ๆ

  1. เครื่องกำเนิดตัวเลขสุ่มพบได้ทุกที่และโดยเฉพาะในทุกเกม
  2. ฐานข้อมูลประกอบด้วยอัลกอริธึมมากมายรวมถึง B +, HASH, คิวลำดับความสำคัญ, การแสดงออกปกติ, criptography, การเรียงลำดับ ฯลฯ ... เพื่อนของฉันบอกว่า SGBD อยู่ด้านบนสุดของห่วงโซ่อาหารคอมพิวเตอร์
  3. การเรียงลำดับถูกใช้ทุกที่ตัวอย่างเช่นใน Excel มันถูกใช้จริงตลอดเวลาในชีวิตจริง แต่โดยปกติแล้วมนุษย์มักใช้อัลกอริธึมแบบเฉพาะกิจ
  4. พาริตี้บิตใช้รอบตัว
  5. การเข้ารหัส Huffman อยู่ในซอฟต์แวร์บีบอัดและส่งข้อมูล
  6. สแต็ค (LIFO) ถูกใช้ทุกที่ ภายในภาษาการเขียนโปรแกรมในซีพียู ฯลฯ ...

ยินดีที่ได้แสดงว่าพวกเขาปรากฏตัวในชีวิตจริง:

A. หลายกลุ่มใช้อัลกอริธึมแบบต้นไม้เพื่อสื่อสารโดยการแบ่งรายชื่อโทรศัพท์ในแบบลำดับชั้นในหมู่คน B. รถยนต์ในสี่แยกมักใช้อัลกอริธึมรอบโรบิน (ตามวิธีสมัครใจ) C. สถานที่ส่วนใหญ่เป็นธนาคารและ โรงพยาบาลจัดระเบียบลูกค้าของพวกเขาในอัลกอริทึม FIFO


4
การเรียงลำดับไม่ใช่อัลกอริทึม มันเป็นงานนั่นคือสิ่งที่คุณต้องการที่จะดำเนินการซึ่งคุณต้องออกแบบ (หรือในทางปฏิบัติให้เลือก) อัลกอริทึม
David Richerby

สิ่งเหล่านี้ดูเหมือนจะไม่ใช่ตัวอย่างที่เฉพาะเจาะจงตามที่ร้องขอในคำถาม
Kaveh

SGBD == RDBMS FYI สำหรับผู้ที่ไม่รู้
Autodidact

6

ปัญหาอัลกอริทึมที่น่าสนใจเกิดขึ้นในแอพพลิเคชั่นทางการแพทย์ของ CT scan ใน Computed Tomography (CT) ร่างกายจะได้รับรังสีเอกซ์จากมุมที่แตกต่างกัน ที่ปลายด้านหนึ่งของสแกนเนอร์จะมีเครื่องส่งสัญญาณ X-ray และอีกปลายหนึ่งของเซ็นเซอร์ จากชุดของการสแกนภาพจะถูกสร้างขึ้นใหม่เพื่อให้แพทย์ตรวจสอบ!

กรองกลับมาฉาย อัลกอริทึมเป็นพื้นฐานสำหรับการฟื้นฟูของภาพจากชุดของสแกน อัลกอริทึมนี้เป็นรูปแบบของปัญหาการประมาณค่าที่ "สัญญาณ" ถูกสุ่มตัวอย่างต่ำกว่าอัตรา Nyquist อัลกอริทึมนี้อยู่ในการใช้งาน "เบื้องหลัง" ที่โรงพยาบาลและพื้นฐานกรองกลับประมาณการใช้คณิตศาสตร์ในระดับปริญญาตรีเช่นแปลงฟูริเยร์เพื่อให้บรรลุฟูริเยร์ Slice ทฤษฎีบท


6

ตัวอย่างของ FFT

ฉันเคยช่วยอัลกอริทึม FFT กับภาษาของระบบที่แตกต่างกัน

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

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

ขออภัยฉันต้องให้อยู่ในระดับสูง


5

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



2

วิกิพีเดียมีคอลเลกชันที่ดีของอัลกอริทึม / การใช้งานที่จัดขึ้นหรือน้อยลงในรายการ Microsoft จัดทำเอกสารที่ถูกอ้างถึงเป็นอันดับต้น ๆแต่ไม่มีคำอธิบายที่ชัดเจนเกี่ยวกับสาขาวิทยาศาสตร์คอมพิวเตอร์หรือแอปพลิเคชัน นอกจากนี้ยังมีรายการลำดับเหตุการณ์จากการประชุม CS ที่แตกต่างกัน _http: //jeffhuang.com/best_paper_awards.html_ รวบรวมโดยศาสตราจารย์หวาง

การจัดกลุ่มสเปกตรัมเป็นอัลกอริธึมการจัดกลุ่มที่สง่างามรู้จักกันในชื่ออัลกอริทึมการตัดแบบปกติที่ Jianbo Shi และ Jitendra Malik แนะนำสำหรับการแบ่งส่วนภาพ มันยังได้รับการพัฒนาอย่างดีในแอพพลิเคชั่นการจัดกลุ่มข้อมูลซึ่งเป็นจุดเชื่อมต่อที่ดีระหว่างสองชุมชน


-2

อีกสองตัวอย่างที่ชื่นชอบส่วนตัวอื่น ๆ ที่ฝังแน่นในวิทยาการคอมพิวเตอร์ แต่อาจมองข้ามได้ง่ายโดยนักทฤษฎีนามธรรมซึ่งได้รับความก้าวหน้าอย่างมาก / การเปลี่ยนแปลงและมีผลกระทบในทางปฏิบัติ / นำไปใช้ใหญ่ในชีวิตประจำวันในช่วงสองสามทศวรรษที่ผ่านมา ตอนนี้คนรุ่นหนึ่งโตขึ้นโดยไม่รู้ว่าโลกไม่มีอยู่ โดยทั่วไปหมวดหมู่ของการสร้างแบบจำลองและการจำลอง

  • ขั้นตอนวิธีการจำลองฟิสิกส์ ส่วนใหญ่ใช้กฎของนิวตัน แต่ใช้กฎหมายอื่น ๆ (เช่นพลศาสตร์ของไหล) ใช้ในหลากหลายแอพพลิเคชั่นตั้งแต่แอพพลิเคชั่นวิศวกรรม, วิดีโอเกมและบางครั้งภาพยนตร์ สิ่งนี้มีความรับผิดชอบในการปรับปรุงความปลอดภัยประสิทธิภาพหรือความน่าเชื่อถือของรถยนต์และเครื่องบินอย่างมีนัยสำคัญผ่านการออกแบบการทดสอบเสมือนจริง / เพื่อจำลองความเครียด กิจการที่เกี่ยวข้องกันพื้นที่การวิจัยที่สำคัญอย่างต่อเนื่องจากชีวสารสนเทศที่มีผลกระทบมากในการออกแบบยาชีววิทยาเช่น ฯลฯ การป้องกันโรค: โปรตีนพับ / โครงสร้างการพยากรณ์ โปรดทราบว่าในปีนี้รางวัลโนเบลสาขาเคมีได้รับรางวัลสำหรับการจำลองทางเคมีของ Karplus, Levitt, Warshel อัลกอริธึมการจำลองทางฟิสิกส์มีส่วนเกี่ยวข้องอย่างมากกับความปลอดภัย / การทดสอบอาวุธนิวเคลียร์ เช่นที่ห้องปฏิบัติการ Los Alamos

  • raytracing / ขั้นตอนวิธีการ เรื่องนี้เริ่มต้นจากหัวข้อวิจัยเพียงไม่กี่ทศวรรษที่ผ่านมา [เพื่อนได้รับปริญญาโทในการเขียนขั้นตอนวิธีการเขียน raytracing CS] แต่กลายเป็นเรื่องที่นำไปใช้อย่างมากในเกมและธุรกิจการสร้างภาพยนตร์ เทคนิคพิเศษในภาพยนตร์ อุตสาหกรรมเหล่านี้ได้อย่างแท้จริงพันล้านดอลลาร์ลงทุนและขี่บนขั้นตอนวิธีการเหล่านี้และ บริษัท ขนาดใหญ่ทั้งหมดจะขึ้นอยู่กับการควบคุมพวกเขาเช่นพิกซาร์ ส่วนใหญ่ใช้ในขั้นต้นเช่นภาพยนตร์ scifi เทคนิคนี้ใช้กันอย่างแพร่หลายในปัจจุบันเป็นประจำแม้ในภาพยนตร์ "ทั่วไป" ตัวอย่างเช่นเมื่อเร็ว ๆ นี้The Great Gatsby พึ่งพาผลกระทบ CGI อย่างมากเพื่อวาดสภาพแวดล้อมที่น่าเชื่อหรือน่าสนใจปรับแต่งภาพยนตร์ / ตัวละคร ฯลฯ


-3

รหัส Rosetta แสดงอัลกอริทึมที่ใช้โดยการเขียนโปรแกรมงาน (692) และโดยภาษาโปรแกรม (518) ด้วย Semantic MediaWiki


นี่เป็นตัวอย่างของ "อัลกอริธึมหลัก ... ที่ปรับใช้ในเชิงพาณิชย์ซอฟต์แวร์ของรัฐหรือซอฟต์แวร์ที่ใช้กันอย่างแพร่หลาย"
David Richerby

มันจะมีประโยชน์ในการอ้างอิงข้ามการใช้งานของแต่ละขั้นตอนวิธีการที่ดีเยี่ยมที่ระบุไว้ในคำตอบอื่น ๆ ที่นี่เพื่อ Wikipedia / DBpedia URIs ไม่มี Wikipedia / DBpedia URIs สำหรับอัลกอริทึมเหล่านี้ทั้งหมด แต่มีหน้ารหัส Rosetta
Wes Turner

bigocheatsheet.comยังแสดงรายการ Big-O ซับซ้อนและลิงก์ไปยังบทความ Wikipedia สำหรับอัลกอริทึมค่อนข้างน้อย
Wes Turner

คำถามถามถึงตัวอย่างของอัลกอริธึมหลักที่ใช้ในซอฟต์แวร์ชิ้นสำคัญ "นี่คือเว็บไซต์ที่มีอัลกอริทึมที่ใช้งานในหลายล้านภาษา" ไม่ตอบคำถามนั้นเลย ในความเป็นจริงมันตรงข้ามกับคำถามที่ค้นหา
David Richerby

การอ้างอิงที่มีประโยชน์และเกี่ยวข้องกับบริบท
Wes Turner

-5

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

ในการบริการลูกค้าและเขตไอทีดูเหมือนว่าจะมีปรากฏการณ์ที่สังเกตเห็นมานานที่ผ่านมาใน AI ที่เรียกว่า"การย้ายเสา" นี่เป็นปรากฏการณ์ทางจิตวิทยาที่สนามค่อนข้างก้าวหน้าอย่างรวดเร็ว แต่ผู้คนปรับจิตใจอย่างรวดเร็วเพื่อ "ปกติใหม่" และใช้ความก้าวหน้าที่แท้จริงหรือแม้กระทั่งการพัฒนาเป็นโลกีย์หรือไม่ธรรมดาในการหวนกลับหลังจากที่ประสบความสำเร็จคือ downplayed หรือย่อเล็กสุด คำถามนี้ได้รับการตอบรับอย่างสูงในวิธีที่อัลกอริธึมย้ายจาก R&D ไปสู่ ​​"การปรับใช้" การอ้างถึงผู้เขียนคำถามในความคิดเห็นในภายหลัง:

ในความเป็นจริงเศษส่วนเล็กน้อยของโค้ดทั้งหมดที่เขียนถูกนำมาใช้คือสิ่งที่น่าสนใจจากมุมมองอัลกอริทึม

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

บางครั้งอัลกอริทึมที่แพร่หลายที่สุดก็ถูกมองข้ามเช่นกัน! อินเทอร์เน็ตและ WWW เป็นสภาพแวดล้อมขนาดใหญ่ / ใกล้ - นิเวศวิทยาสำหรับอัลกอริทึม ยังค่อนข้างอายุเพียงประมาณ 2 ทศวรรษ (คิดค้น ~ 1991) มันเติบโตอย่างหนาแน่นและชี้แจงในระยะเวลาอันสั้น การเติบโตของเว็บไซต์ WWW อาจยิ่งกว่ากฎหมาย Moores เลขชี้กำลังที่มีชื่อเสียง

อินเทอร์เน็ต / WWW ได้รับการสนับสนุนโดยอัลกอริทึมที่ซับซ้อนมากมาย อินเทอร์เน็ตมีอัลกอริธึมการเราต์ที่ซับซ้อนที่รวมอยู่ในเราเตอร์ บางทฤษฎีขั้นสูงมีผลบังคับใช้มีเช่นในขั้นตอนวิธีการกำหนดเส้นทาง อัลกอริธึมเหล่านี้เป็นเรื่องของการวิจัยที่ล้ำสมัยและล้ำสมัยเมื่อหลายสิบปีที่ผ่านมา

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

ก็ยังใช้ความซับซ้อนข้อผิดพลาดการตรวจสอบ / แก้ไข อินเทอร์เน็ตอาจเป็นระบบที่ใหญ่ที่สุดและทนทานต่อความผิดพลาดส่วนใหญ่ที่เคยสร้างโดยมนุษย์

ถัดไปมีกรณีที่ชัดเจนที่จะทำให้อัลกอริทึมที่เปิดใช้งาน WWW นั้นล้ำหน้า HTTP & เว็บเซิร์ฟเวอร์ได้รับการปรับแต่ง / ปรับให้เหมาะสมและใช้โปรโตคอลความปลอดภัย / การเข้ารหัสขั้นสูง (HTTPS) ตรรกะการแสดงผลของหน้าเว็บมีความก้าวหน้าอย่างมากในHTML5 & CSS3พร้อมกับภาษาโปรแกรมจาวาสคริปต์

CSS ที่ค่อนข้างใหม่นั้นมีหลักการต่าง ๆ ที่คล้ายกับการเขียนโปรแกรม OOPเช่นการใช้ซ้ำและการสืบทอด การพูดของการเรียงพิมพ์TeXเป็นระบบเรียงพิมพ์ทางวิทยาศาสตร์ที่สำคัญภายในที่ซับซ้อน (ไม่แตกต่างจากภาษาการเขียนโปรแกรม) ที่คิดค้นโดย Knuth ซึ่งตอนนี้สามารถแสดงผลได้บนหน้าเว็บ

อีกหนึ่งพื้นที่ที่ค่อนข้างใหม่ของขั้นตอนวิธีการสร้างบนอินเทอร์เน็ตที่ยังคงเกิดขึ้นใหม่เหล่านั้นขึ้นอยู่กับปัญญารวม ซอฟต์แวร์ stackexchange นั้นเป็นตัวอย่างของระบบปัญญารวมที่ซับซ้อน เครือข่ายสังคมยังแสดงคุณสมบัติที่สำคัญของหน่วยข่าวกรองส่วนรวมและมีการเพิ่มคุณสมบัติอย่างต่อเนื่องเพื่อเพิ่มความฉลาด (เช่น facebook "Likes" มีอายุเพียงไม่กี่ปี) ระบบการจัดเรตจะขึ้นอยู่กับอัลกอริธึมการกรองแบบทำงานร่วมกันและยังคงมีการพัฒนาบนพื้นฐานของการวิจัยและการใช้งานใหม่

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


การอ้างอิงจำนวนมากสามารถเพิ่มในสิ่งนี้ได้ นี่คือการเริ่มต้น: DARPA และการปฏิวัติอินเทอร์เน็ตโดย Waldrop
vzn

อ้างอิงในการเพิ่มประสิทธิภาพอินเทอร์เน็ตอีกชีวประวัติของ Danny Lewinผู้ร่วมก่อตั้งของ Akamai "อัจฉริยะที่เปลี่ยนอินเทอร์เน็ต"
vzn

-8

อัลกอริทึมที่ประสบความสำเร็จอย่างน่าทึ่ง (ฮาร์ดแวร์) คือการเปิดเครื่องใหม่

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

การเปิดเครื่องใหม่เป็นสาเหตุที่อะไรก็ตามที่มีซีพียูทำงานอยู่ไม่ว่าจะพิจารณาแบบฝังหรือไม่ก็ตาม

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


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