อัลกอริทึมจากหนังสือ


358

Paul Erdos พูดคุยเกี่ยวกับ "หนังสือ" ที่ซึ่งพระเจ้าเก็บหลักฐานอันงดงามที่สุดของทฤษฎีบทคณิตศาสตร์แต่ละอันไว้ นี้ยังเป็นแรงบันดาลใจหนังสือ (ซึ่งผมเชื่อว่าตอนนี้อยู่ในฉบับที่ 4): หลักฐานจากหนังสือ

ถ้าพระเจ้ามีหนังสือที่คล้ายกันสำหรับอัลกอริทึมคุณคิดว่าอัลกอริทึมแบบใด

หากเป็นไปได้โปรดจัดหาข้อมูลอ้างอิงที่สามารถคลิกได้และข้อมูลเชิงลึกที่สำคัญซึ่งทำให้ใช้งานได้

กรุณาหนึ่งอัลกอริทึมต่อคำตอบโปรด


11
เป็นคำถามที่ดีมาก! [แก้ไข:} หนึ่งคำถาม เราจะวาดเส้นแบ่งระหว่างอัลกอริธึมและโครงสร้างข้อมูลได้อย่างไร จะเกิดอะไรขึ้นถ้าข้อมูลเชิงลึกที่สำคัญของอัลกอริทึมนั้นสัมพันธ์กับโครงสร้างข้อมูล (เช่น UNION FIND ในฟังก์ชัน Ackermann)
Ross Snider

4
แหล่งที่ดีและผู้สมัครหนังสือเล่มนี้อาจเป็น "สารานุกรมอัลกอริทึม" springer.com/computer/theoretical+computer+science/book/ ......
Marcos Villagra

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

49
@supercooldave คุณไม่ต้องเชื่อในพระเจ้า แต่คุณควรเชื่อในหนังสือของเขา ;-)
Ross Snider

10
ในระหว่างการบรรยายในปี 1985 แอร์ดิชกล่าวว่า "คุณไม่ต้องเชื่อในพระเจ้า แต่คุณควรเชื่อในหนังสือ"
Robert Massaioli

คำตอบ:


116

Union-findเป็นปัญหาที่สวยงามที่อัลกอริธึม / โครงสร้างข้อมูลที่ดีที่สุด ( Disjoint Set Forest ) ยึดสปาเก็ตตี้ ในขณะที่เรียบง่ายและใช้งานง่ายมากพอที่จะอธิบายให้เด็กฉลาดได้ แต่ต้องใช้เวลาหลายปีกว่าจะรู้ตัว ในที่สุดพฤติกรรมของมันถูกค้นพบจะเกี่ยวข้องกับการผกผัน Ackermann ฟังก์ชั่นการทำงานที่มีการค้นพบการทำเครื่องหมายการเปลี่ยนแปลงในมุมมองเกี่ยวกับการคำนวณ (และในความเป็นจริงรวมอยู่ในฮิลแบร์ตเมื่อวันที่ไม่มีที่สิ้นสุด )

Wikipedia ให้การแนะนำที่ดีเกี่ยวกับป่าละเม็ดที่แยกออกจากกัน


109

การจับคู่สตริง Knuth-Morris-Pratt รหัสแปดบรรทัดที่ลื่นที่สุดที่คุณเคยเห็น


4
เป็นความคิดที่เหลือเชื่อที่จะรู้ว่านั่นเป็นสิ่งที่ไม่ชัดเจนในบางครั้งและชัดเจนในขณะนี้เพราะพวกเขาคิดมันและเราเรียนรู้ ... ฉันคิดว่าเราควรใช้ทฤษฎีประวัติศาสตร์คาร์กับคณิตศาสตร์และวิทยาการคอมพิวเตอร์ .
Ritwik Bose

1
โดยคำอธิบายฉันจะบอกว่าสิ่งนี้เกี่ยวข้องกับการค้นหาสตริงย่อยอย่างรวดเร็วของ Boyer-Moore
บาร์ต

2
@Mechko ความจริงที่ว่าอัลกอริทึมนี้ถูกค้นพบพร้อมกันและเป็นอิสระจากคนที่แยกจากกันเป็นข้อบ่งชี้ว่ามันชัดเจนในระดับหนึ่ง ไม่ว่าจะเป็นสิ่งที่ "ชัดเจน" เป็นฟังก์ชั่นของข้อ จำกัด ของโครงการและสภาพแวดล้อมการเขียนโปรแกรมที่กว้างขึ้น หากคุณต้องการ (1) การค้นหาข้อความที่รวดเร็วและ (2) คุณตระหนักถึงความสำคัญของอัลกอริทึม O (n) อย่างแท้จริงและ (3) คุณเคยเจอข้อความที่มีการจับคู่บางส่วนมาก่อนและ (4) คุณมีเวลา ทำสิ่งที่ "ถูกต้อง" จากนั้นอัลกอริทึมนี้อาจเห็นได้ชัด
Matt Gallagher

ในการสัมภาษณ์ Knuth กล่าวว่าความคิดของอัลกอริทึมนั้นมาจากการศึกษาหุ่นยนต์ จำกัด สองทางของ Stephen Cook สำหรับ Palindromes
Kaveh

@Kaveh โปรดอ่านส่วนที่ 7 (หมายเหตุประวัติศาสตร์) จากกระดาษ KMP ดั้งเดิม มันมีข้อสังเกตที่ดี เกี่ยวกับมอร์ริสเขียนโปรแกรมแก้ไขข้อความซึ่ง "ซับซ้อนเกินไปสำหรับผู้พัฒนาระบบคนอื่น ๆ ที่จะเข้าใจ" เกี่ยวกับ Knuth "เป็นครั้งแรกในประสบการณ์ของ Knuth ที่ทฤษฎีออโตมาตะได้สอนเขาถึงวิธีการแก้ปัญหาการเขียนโปรแกรมจริงดีกว่าที่เขาสามารถแก้ได้ก่อน" และ "Knuth ก็รู้สึกอายที่จะเรียนรู้ว่ามอร์ริสค้นพบอัลกอริธึมแล้วโดยไม่ทราบว่าทฤษฎีบทของคุก;" สนุก.
Hendrik Jan

93

อัลกอริธึมของ Blum, Floyd, Pratt, Rivest และ Tarjanเพื่อค้นหาองค์ประกอบที่kของรายการที่ไม่เรียงลำดับในเวลาเชิงเส้นเป็นอัลกอริธึมที่สวยงามและใช้ได้เฉพาะเพราะตัวเลขนั้นเหมาะสมกับทฤษฎีบทหลักเท่านั้น มันจะเป็นดังนี้:

  1. เรียงลำดับห้าองค์ประกอบแต่ละอย่าง
  2. เลือกมัธยฐานในแต่ละ
  3. เกิดขึ้นอีกเพื่อหาค่ามัธยฐานของรายการนี้
  4. Pivot บนค่ามัธยฐานของค่ามัธยฐาน (ใน Quicksort)
  5. เลือกด้านที่เหมาะสมของรายการและตำแหน่งในรายการนั้นและเกิดขึ้นอีก

3
นี่เป็นหนึ่งในอัลกอริทึมที่ฉันโปรดปราน ฉันชอบสัญชาตญาณของสิ่งที่ฉันเรียนรู้จากหนังสือที่ไม่ตรงกันของ Chazelle: ชุดของค่ามัธยฐานของกลุ่มขององค์ประกอบนั้นเหมือนกับ -net สำหรับช่วงเวลาในรายการลำดับของตัวเลขที่ป้อน ดังนั้นอัลกอริทึมดังต่อไปนี้กระบวนทัศน์ทั่วไป: คำนวณ net fast แก้ปัญหาบนเน็ต recurse ในบางส่วนของอินพุตเพื่อปรับแก้ปัญหาจนกว่าคุณจะมีทางออกที่แน่นอน มันเป็นเทคนิคที่มีประโยชน์มากϵ ϵ1/ϵϵϵ
Sasho Nikolov

5
BTW เมื่อคุณเปรียบเทียบขนาดของกลุ่มค่าคงที่นั้นไม่ได้วิเศษขนาดนั้น แน่นอนว่าพวกเขาได้รับการปรับให้เหมาะสมเพื่อให้สิ่งที่ถูกต้องในทฤษฎีบทหลัก
Sasho Nikolov

การติดตั้ง Ruby, gist.github.com/chadbrewbaker/7202412มีรุ่นของอัลกอริทึมที่ใช้พื้นที่ (ค่าคงที่, บันทึก) หรือไม่หรือคุณต้องใช้พื้นที่รอยต่อเชิงเส้นเพื่อเก็บค่ามัธยฐานหรือไม่?
Chad Brewbaker

2
การอ้างว่า "สิ่งนี้ใช้ได้ผลเพราะตัวเลขที่ถูกต้องเพื่อให้พอดีกับทฤษฎีบทหลัก" นั้นไม่เป็นความจริง หากคุณแทนที่หมายเลขที่มีขนาดใหญ่จำนวนมันเป็นเรื่องง่ายที่จะเห็นว่าตัวเลขสองที่จะต้องมียอดรวมน้อยกว่าบรรจบและดังนั้นสิ่งที่มีขนาดใหญ่เพียงพอทำงาน เป็นเพียงตัวเลขแรกที่ใช้งานได้มันไม่ใช่หมายเลขเดียว n 1 3 / 4 0 n 55n13/40n5
Will Sawin

88

การค้นหาแบบไบนารี่เป็นอัลกอริทึมที่เรียบง่ายสวยงามและมีประโยชน์ที่สุดเท่าที่ฉันเคยพบมา


ฉันจะแทนที่สง่างามด้วยการหยั่งรู้ ไม่มีอะไรที่งดงามเกี่ยวกับมัน ความเรียบง่ายคือความงามที่แท้จริง
Robert Massaioli

@ Robert Massaili: ฉันแทนที่สง่างามด้วยความสวยงาม คุณพูดถูก
michalmocny


ในหลักสูตรอัลกอริทึมระดับบัณฑิตศึกษาครั้งแรกของฉันเรามี 15 นาทีแบบทดสอบที่เราต้องแก้ปัญหาด้วยมือ 2-3 คำถามแรกนั้นรวมถึงแผนภูมิการค้นหาแบบไบนารีและคำถามสองข้อเกี่ยวกับกอง ฉันอายและตกใจที่รู้ว่าฉันได้รับปัญหาการค้นหาแบบไบนารี่ผิดก่อนที่จะถูกบอกว่าในชั้นเรียนประมาณ 30 คนมีคำตอบที่ถูกต้องสองข้อ แต่ถึงแม้จะรู้ว่าความจริงที่ว่ามันใช้เวลา 15 ปีสำหรับชุมชนมืออาชีพเพื่อให้ถูกต้องคือเซ
Stella Biderman

84

ฉันประหลาดใจที่ไม่เห็นอัลกอริทึมของ Floyd-Warshallสำหรับเส้นทางที่สั้นที่สุดสำหรับทุกคู่ที่นี่:

d[]: 2D array. d[i,j] is the cost of edge ij, or inf if there is no such edge.

for k from 1 to n:
  for i from 1 to n:
    for j from 1 to n:
      d[i,j] = min(d[i,j], d[i,k] + d[k,j])

หนึ่งในอัลกอริธึมที่ไม่สำคัญและสั้นที่สุดที่ชัดเจนและการทำงานนั้นเร็วมากเมื่อคุณพิจารณาว่าอาจมีขอบนั่นจะเป็นลูกโปสเตอร์ของฉันสำหรับการเขียนโปรแกรมแบบไดนามิก!O ( n 2 )O(n3)O(n2)


2
อัลกอรึทึมนี้สามารถทำให้เป็นเรื่องทั่วไปได้อย่างเป็นระเบียบ ดูเช่นr6.ca/blog/20110808T035622Z.htmlและcl.cam.ac.uk/~sd601/papers/semirings.pdf
Mikhail Glushenkov


73

อาจดูเหมือนเล็กน้อย (โดยเฉพาะเมื่อเปรียบเทียบกับคำตอบอื่น ๆ ) แต่ฉันคิดว่าQuicksortนั้นสง่างามจริงๆ ฉันจำได้ว่าเมื่อฉันเห็นมันครั้งแรกฉันคิดว่ามันซับซ้อนจริงๆ แต่ตอนนี้ดูเหมือนง่ายเกินไป


10
Quicksort ยังตั้งคำถามที่น่าสนใจเกี่ยวกับสิ่งที่สำคัญของอัลกอริทึมคืออะไร เช่นการใช้ Haskell ที่หรูหรามาตรฐานดูเหมือนว่านิยามรหัสหลอกมาตรฐาน แต่มันมีความซับซ้อนเชิงซีมโทติคที่แตกต่างกัน ดังนั้น Quicksort เป็นเพียงแค่เกี่ยวกับการแบ่งและพิชิตหรือเป็นตัวชี้ที่ชาญฉลาดในสถานที่ - เล่นซอเป็นส่วนสำคัญของ Quicksort? Quicksort สามารถนำมาใช้ในการตั้งค่าที่ใช้งานได้จริงหรือต้องการความเสถียรหรือไม่?
Jörg W Mittag

2
ความคิดของ "แก่นแท้" หรือ "ศีลธรรม" ของอัลกอริทึมนั้นมาจากกระดาษที่สวยงามThe Sieve of Eratosthenes แท้โดย Melissa E. O'Neill ( cs.hmc.edu/~oneill/papers/Sieve-JFP pdf ) และการสนทนาด่วนมาจากการอภิปราย LtU ของกระดาษนั้น ( lambda-the-ultimate.org/node/3127 ) โดยเฉพาะเริ่มต้นที่ความคิดเห็นนี้: lambda-the-ultimate.org/node/3127/#comment-45549
Jörg W Mittag

8
@ Jörg: การใช้ quicksort ในรายการที่เชื่อมโยงนั้นมีความสมเหตุสมผลอย่างสมบูรณ์และมีเวลาทำงานแบบ asymptoticเช่นเดียวกับการนำไปใช้งานแบบ on-place ในอาร์เรย์ ค่าเฉลี่ยและในกรณีที่เลวร้ายที่สุด สำหรับการใช้พื้นที่นั้นแตกต่างกันอย่างแน่นอน แต่ต้องบอกว่าแม้แต่รุ่น "in-place" ก็ต้องการพื้นที่เพิ่มเติมไม่คงที่ (call stack!) ซึ่งเป็นความจริงที่ถูกมองข้ามไป
Konrad Rudolph

นอกจากนี้ยังเป็นเรื่องที่ควรกล่าวถึง Dual-Pivot Quicksort ของ Vladimir Yaroslavskiy นั่นควรจะเป็น quicksort ต้นฉบับเร็วกว่าเดิมอย่างน้อย 20% permalink.gmane.org/gmane.comp.java.openjdk.core-libs.devel/ …
SaveTheRbtz

ในทางทฤษฎี Quicksort นั้นง่าย (สามารถสรุปได้ใน 4 ขั้นตอน) และสามารถปรับให้เหมาะสมอย่างมาก แต่ในทางปฏิบัติมันยากที่จะเขียนโค้ดได้อย่างถูกต้อง นี่คือเหตุผลที่มันไม่ได้รับคะแนนของฉัน
Dennis


50

การทดสอบเบื้องต้นของMiller-Rabin (และการทดสอบที่คล้ายกัน) ควรอยู่ใน The Book ความคิดคือการใช้ประโยชน์จากคุณสมบัติของ primes (เช่นการใช้ทฤษฎีบทเล็ก ๆ ของแฟร์มาต์) เพื่อค้นหาพยานหมายเลขที่ไม่สำคัญ หากไม่พบพยานหลังจากมีการทดสอบแบบสุ่มมากพอจำนวนนั้นจะถูกจัดประเภทว่าดีเยี่ยม

ในหมายเหตุนั้นการทดสอบ AKS primalityที่แสดงให้เห็นว่า PRIMES นั้นเป็น P น่าจะอยู่ใน The Book!


49

การทดสอบเอกลักษณ์พหุนามด้วยSchwartz-Zippel บทแทรก :

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

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

ไม่ทราบว่าอัลกอริทึมสำหรับการกำหนดปัญหานั้นทำงานในเวลาพหุนาม


สิ่งนี้น่าจะแนะนำมานานแล้ว! ขอบคุณ!
arnab

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

ฉันคิดค้นอัลกอริทึมแบบเดียวกันอย่างอิสระในขณะที่ฉันกำลังทำงานบนกระดาษเมื่อสองสามปีก่อนจนกระทั่งมีคนถามฉันว่ามันไม่ใช่บทแทรกของ Schwartz-Zippel? และฉันก็บอกว่านั่นคืออะไร :)
Helium

46

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


1
นอกจากนี้ยังเป็นพื้นฐานของการดำเนินการตาม Prolog!
muad

1
ประเด็นเกี่ยวกับ BFS กับสแต็คที่ฉันหายไปคืออะไร? ฉันคิดว่าคำตอบคือ "ใช่คุณได้ DFS"
Omar Antolín-Camarena

1
ดูเหมือนว่าทุกคนจะคิดว่าปัญหานี้เป็นเรื่องเล็กน้อย ดูเหมือนว่าทุกคนจะคิดว่าคำตอบคือ "ใช่" ซึ่งผิด คำตอบคือ "ขึ้นอยู่กับว่าการใช้ BFS ใดที่คุณเริ่มต้นด้วย" ดูcs.stackexchange.com/questions/329/… (นี่เป็นคำถามที่ฉันโพสต์เพื่อช่วยในช่วงเบต้าของ CS.SE)
Radu GRIGore

นอกจากนี้ยังมีการกล่าวถึงสั้น ๆ ที่นี่: ics.uci.edu//~eppstein/161/960215.html
Radu GRIGore

42

อัลกอริธึมของ Dijkstra : ปัญหาพา ธ สั้นที่สุดของแหล่งเดียวสำหรับกราฟที่มีต้นทุนพา ธ ขอบที่ไม่ติดลบ มันถูกใช้ทุกที่และเป็นหนึ่งในอัลกอริธึมที่สวยที่สุดในนั้น อินเทอร์เน็ตไม่สามารถกำหนดเส้นทางได้หากไม่มี - เป็นส่วนหลักของโปรโตคอลการกำหนดเส้นทาง IS-IS และ OSPF (Open Shortest Path First)

  1. กำหนดค่าระยะทางให้กับโหนดทุกโหนด ตั้งค่าเป็นศูนย์สำหรับโหนดเริ่มต้นของเราและเป็นอินฟินิตี้สำหรับโหนดอื่น ๆ ทั้งหมด
  2. ทำเครื่องหมายโหนดทั้งหมดว่าไม่ได้เข้าชม ตั้งค่าโหนดเริ่มต้นเป็นปัจจุบัน
  3. สำหรับโหนดปัจจุบันให้พิจารณาเพื่อนบ้านที่ไม่ได้เข้าชมทั้งหมดและคำนวณระยะทางเบื้องต้น (จากโหนดเริ่มต้น) ตัวอย่างเช่นหากโหนดปัจจุบัน (A) มีระยะทาง 6 และขอบเชื่อมต่อกับโหนดอื่น (B) คือ 2 ระยะห่างจาก B ถึง A จะเท่ากับ 6 + 2 = 8 หากระยะทางนี้น้อยกว่าระยะทางที่บันทึกไว้ก่อนหน้า (ระยะอนันต์ในจุดเริ่มต้นศูนย์สำหรับโหนดเริ่มต้น) ให้เขียนทับระยะทาง
  4. เมื่อเราเสร็จสิ้นการพิจารณาเพื่อนบ้านทั้งหมดของโหนดปัจจุบันทำเครื่องหมายว่าเข้าเยี่ยมชม โหนดที่เยี่ยมชมจะไม่ถูกตรวจสอบอีกครั้ง ระยะทางที่บันทึกไว้ในตอนนี้ถือเป็นที่สุดและน้อยที่สุด
  5. หากโหนดทั้งหมดได้รับการเข้าชมแล้วให้ดำเนินการเสร็จสิ้น มิฉะนั้นให้ตั้งค่าโหนดที่ไม่ได้เข้าชมด้วยระยะทางที่เล็กที่สุด (จากโหนดเริ่มต้น) เป็น "โหนดปัจจุบัน" ถัดไปและดำเนินการต่อจากขั้นตอนที่ 3


40

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

รูปแบบการเข้ารหัสเกิดจากการสังเกตหลายครั้ง

  • เพื่อให้ได้รูปแบบการเข้ารหัส homomorphic อย่างเต็มรูปแบบเราเพียงต้องการที่จะมีรูปแบบที่เป็น homomorphic มากกว่าการเพิ่มและการคูณ นี่เป็นเพราะการเพิ่มและการคูณ (mod 2) นั้นเพียงพอที่จะรับ AND, OR และ NOT Gates (และทำให้ทัวริงสมบูรณ์)
  • ถ้าเป็นเช่นนั้นจะต้องมีโครงการ แต่เนื่องจากข้อ จำกัด บางอย่างสามารถดำเนินการสำหรับวงจรที่มีความลึกแน่นอนบางอย่างจากนั้นหนึ่งสามารถhomomorphicallyประเมินการถอดรหัสและขั้นตอน reencyption เพื่อรีเซ็ตข้อ จำกัด เชิงลึกวงจรโดยไม่ต้องเสียสละความเป็นส่วนตัวที่สำคัญ
  • ด้วยการ "บีบ" ความลึกของรุ่นวงจรของฟังก์ชั่นการถอดรหัสสำหรับรูปแบบหนึ่งอาจเปิดใช้งานรูปแบบเดิม จำกัด ให้ จำกัด วงจรตื้นจำนวนการคำนวณโดยพลการ

ในวิทยานิพนธ์ของเขา Craig Gentry ได้แก้ไขปัญหาการเข้ารหัส (และงดงาม) อันยาวนานในการเข้ารหัส ความจริงที่ว่าโครงร่าง homomorphic เต็มรูปแบบนั้นมีอยู่เรียกร้องให้เรารับรู้ว่ามีโครงสร้างบางอย่างในการคำนวณที่เราอาจเพิกเฉย

http://crypto.stanford.edu/craig/craig-thesis.pdf

http://eprint.iacr.org/2009/616.pdf

http://portal.acm.org/citation.cfm?id=1666420.1666445



38

อัลกอริทึมของ Strassenสำหรับการคูณเมทริกซ์


อาจจะรอจนกว่าเราจะรู้ว่าเหมาะสมหรือไม่
โทมัส Ahle

อย่างน้อยก็ไม่เหมาะ ... ฉันคิดว่าการรวมอัลกอริทึมของ Strassen บังคับให้คุณใส่อัลกอริทึมของ Karatsuba ก่อน
ทิโมธีซัน

35

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


+1 เพราะยังมีบทหนึ่งในบทพิสูจน์ที่ตีพิมพ์จากหนังสือเกี่ยวกับการแต่งงาน ...
ixtmixilix

34

อัลกอริธึมเชิงเส้นเวลาสำหรับการสร้างอาร์เรย์ต่อท้ายมีความสวยงามอย่างแท้จริงแม้ว่าจะไม่ได้รับการยอมรับจริง ๆ ก็สมควรได้รับhttp://www.cs.helsinki.fi/u/tpkarkka/publications/icalp03.pdf


ผมไม่คิดว่ามันได้รับการยอมรับมันสมควร - สิ่งที่ทำให้คุณคิดอย่างอื่น? ตัวอย่างเช่นมันถูกนำไปใช้ในไลบรารีการวิเคราะห์ลำดับ C ++ SeqAn
Konrad Rudolph

เป็นมูลค่าการกล่าวขวัญว่าขณะนี้มีจำนวนของขั้นตอนวิธีการสร้างอาร์เรย์เชิงเส้นและไม่ใช่เชิงเส้นอื่น ๆ ที่แม้จะไม่มีที่อยู่ใกล้สวยอาจจะเร็วกว่ามากในทางปฏิบัติ "วิธีที่มีประสิทธิภาพและหลากหลายในการคัดแยกคำต่อท้าย", วารสารอัลกอริทึมการทดลอง (JEA), เล่มที่ 12, มิถุนายน 2008 มีผลการทดลองตามแนวเหล่านี้
Raphael

@ ราฟาเอล: ฉันค่อนข้างระวังความจริงที่ว่าในหน้า 3 ของกระดาษ JEA พวกเขาให้เฉพาะสิ่งที่พวกเขา "เชื่อ" เป็นขอบเขต "หลวม" ของ O (n ^ 2 log n) ... คุณรู้จักเอกสารใด ๆ ที่มีขั้นตอนวิธีเชิงเส้นตรงเวลาที่เร็วกว่าในทางปฏิบัติมากกว่า อัลกอริทึมเอียง?
user651

32

การกำจัดแบบเกาส์เซียน เสร็จสิ้นขั้นตอนการวางนัยทั่วไปจากอัลกอริธึม GCD ของ Euclidean ไปจนถึง Knuth-Bendix


BTW ลำดับการสรุปคืออะไรและอัลกอริธึมของ Buchberger สำหรับ Grobner พื้นฐานอยู่ที่ใด (ดูเหมือนว่าคล้ายคลึงกับ Knuth-Bendix แต่ฉันเคยเห็นมีคนเอ่ยถึงว่ามันเป็นการกำจัดแบบเกาส์ generalizes ... )
ShreevatsaR

6
ลำดับคือ: Euclidean GCD -> Gaussian Elimination -> Buchberger -> Knuth-Bendix เราสามารถใส่ (แทนการกำจัดแบบเกาส์) ส่วนพหุนาม univariate และโมดูโล่ (ในคำสั่งทั่วไปมันคือ 'แยก' จากการกำจัดแบบเกาส์จีอีคือระดับหลายตัวแปร 1, พหุนามแบบหลายตัวแปรแบบไม่ จำกัด ทั่วไปกระโดดเป็นที่ใหญ่ที่สุดจาก EGCD เพื่อ GE หรือแหวนพหุนามเนื่องจากการเพิ่มขึ้นของตัวแปรและจากนั้นยังมีขนาดใหญ่จากการ Buchberger KB เพราะลายเซ็นไม่ จำกัด .
มิทช์

+1: อัลกอริธึมแบบยุคลิดแก้ขวานสมการที่โด่งดังที่สุด = 1 ในคณิตศาสตร์ ทำไมมันไม่ปรากฏใน CS บ่อยขึ้นเป็นเรื่องลึกลับ
Tegiri Nenashi

32

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

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

ทฤษฎีบทที่ 1: ...
พิสูจน์: ชัดเจน

ทฤษฎีบทที่ 2: ...
พิสูจน์: ชัดเจน

ทฤษฎีบทที่ 3: ...
พิสูจน์: ชัดเจน


4
ทฤษฎีบทที่ 4: …พิสูจน์: ออกกำลังกายกับผู้อ่าน
จอน

31

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


6
คุณรู้วิธีอัลกอริทึมใบ้ที่แก้ปัญหาด้วย asymptotics เดียวกันและติดตามรูปแบบการออกแบบอัลกอริทึมหรือไม่? ฉันกำลังพูดถึงการทำซ้ำลึกลงไป ในการทำซ้ำครั้งที่ n คุณจะเริ่มต้นที่ตำแหน่งสืบต่อที่ 2 ^ n-th และมองหาผู้สืบทอดตำแหน่ง 2 ^ n ไปข้างหน้าเพื่อค้นหาการเกิดซ้ำ แม้ว่าคุณจะย้อนกลับบางขั้นตอนของคุณด้วยการวนซ้ำทุกครั้งอัตราการเติบโตทางเรขาคณิตของรัศมีการค้นหาหมายความว่ามันจะไม่ส่งผลกระทบต่อ asymptotics
ต่อ Vognsen

30

ตัวอย่างที่เป็นพื้นฐานและ "สำคัญ" เป็นข้อพิสูจน์ของ Euclid ว่ามีช่วงเวลามากมาย:

2- การประมาณค่าสำหรับ MAX-CUT - เป็นอิสระสำหรับแต่ละจุดสุดยอดกำหนดให้กับหนึ่งในสองพาร์ติชันที่มีความน่าจะเป็นเท่ากัน


6
ใช่อัลกอริทึมที่ดีมาก น้อยนิดที่ค่าใช้จ่ายของปัจจัยที่ 2 อีกขั้นตอนวิธีนี้ยังสามารถใช้ได้กับการเพิ่มใด ๆฟังก์ชั่น submodular ไม่เพียงกราฟตัดฟังก์ชั่น นี่คือผลลัพธ์ของ Feige, Mirrokni และ Vondrak จาก FOCS 07
Aaron Roth

30

ฉันเป็นส่วนหนึ่งของอัลกอริทึมของ Christofidesที่ให้การประมาณ (3/2) สำหรับการวัด TSP ในความเป็นจริงโปรดโทรหาฉันได้ง่าย แต่ฉันก็ชอบอัลกอริธึมการประมาณ 2 อย่างที่เกิดขึ้นก่อนหน้านี้ เคล็ดลับของ Christofides ในการสร้างน้ำหนักขั้นต่ำที่ครอบคลุมต้นไม้ Eulerian โดยการเพิ่มการจับคู่ของจุดยอดแปลก ๆ (แทนที่จะทำซ้ำขอบทั้งหมด) นั้นเรียบง่ายและสง่างามและใช้เวลาน้อยมากในการโน้มน้าวใจว่าการจับคู่นี้ ของทัวร์ที่ดีที่สุด


แท้จริงแล้วยังมีอัลกอริทึมการประมาณที่ง่ายและสง่างามอื่น ๆ อีกมากมายพร้อมการรับประกันที่เหมาะสม
Janne H. Korhonen



25

อัลกอริทึมสำหรับการเขียนโปรแกรมเชิงเส้น : วิธี Simplex, Ellipsoid และจุดภายใน

http://en.wikipedia.org/wiki/Linear_programming#Algorithms


และแน่นอนมีการมอบรางวัลโนเบลหลายรายการเพื่อให้เราเข้าใจปัญหาเหล่านี้มากขึ้น
Ross Snider

@Ross Kantorovich ได้รับรางวัลโนเบลสาขาเศรษฐศาสตร์สำหรับการประดิษฐ์ LP และนำไปใช้กับการจัดสรรทรัพยากร คุณคิดยังไงกับรางวัลอื่น ๆ ?
Mark Reitblatt

@ Mark Koopermans ได้รับรางวัลโนเบลกับ Kantorovich แต่มันก็ไม่ถูกต้องสำหรับฉันที่จะพูดว่า "หลาย ๆ "
Ross Snider

22

อัลกอริทึม Robin Moser สำหรับการแก้ปัญหาคลาสอินสแตนซ์ SAT อินสแตนซ์ดังกล่าวสามารถแก้ไขได้โดย Lovasz Local Lemma อัลกอริทึมโมเซอร์แน่นอนการลดคำสั่งของบทแทรก

ผมคิดว่าเป็นปีบางขั้นตอนวิธีการของเขา (และเทคนิคการพิสูจน์ความถูกต้องของมัน) จะถูกย่อยได้ดีและการกลั่นไปยังจุดของการเป็นผู้สมัครที่ทำงานได้สำหรับนั้นขั้นตอนวิธีการจากหนังสือ

รุ่นนี้เป็นส่วนเสริมของกระดาษต้นฉบับของเขาเขียนด้วยGábor Tardos


21

Marcus Hutter เป็นอัลกอริทึมที่เร็วที่สุดและสั้นที่สุดสำหรับปัญหาที่กำหนดไว้ทั้งหมด

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


21

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


20

ฉันคิดว่าเราต้องรวมSchieber-Vishkinซึ่งคำตอบที่พบบ่อยที่สุดบรรพบุรุษในเวลาคงที่ preprocessing ป่าในเวลาเชิงเส้น

ผมชอบการแสดงออกนูในเล่ม 4 Fascicle 1 และครุ่นคิดของเขา เขาบอกว่าต้องใช้เวลาสองวันในการทำความเข้าใจและฉันก็จำคำพูดของเขาได้:

ฉันคิดว่ามันค่อนข้างสวยงาม แต่น่าประหลาดใจที่มีข่าวร้ายในวรรณคดี (.. ) มันขึ้นอยู่กับคณิตศาสตร์ที่ทำให้ฉันตื่นเต้น


10
เดี๋ยวก่อนมันอาจจะสวยงาม แต่ถ้าเอา Knuth มาสองวันเพื่อที่จะเข้าใจอย่างถ่องแท้มันเป็น "จากหนังสือ" จริงๆหรือ?
ShreevatsaR

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