Những thuật toán được sử dụng thường xuyên nhất trong thực tế?


19

Những thuật toán được sử dụng thường xuyên nhất?

Vui lòng viết một thuật toán cho mỗi câu trả lời, cố gắng giữ câu trả lời của bạn ngắn (một hoặc hai dòng).


Kaveh, có lẽ bạn nên chờ phản hồi trước khi cung cấp rất nhiều? :)
Suresh Venkat

1
@Suresh: Xin lỗi. :)
Kaveh

3
Thường xuyên nhất theo nghĩa nào? (Số chương trình máy tính khác nhau thực hiện thuật toán? Số phần mềm được cài đặt sử dụng thuật toán? Số lần thực hiện thuật toán? Lượng dữ liệu được xử lý bằng thuật toán? CPU giây được sử dụng bởi thuật toán?) Ở đâu? (Học ​​viện, ngành công nghiệp, PC tại nhà?) Có bao giờ có thể ước tính bất cứ điều gì như thế này; chúng ta có thể có bất kỳ dữ liệu nào để trả lời bất kỳ câu trả lời nào không?
Jukka Suomela

1
Câu hỏi quá mơ hồ như Jukka Suomela đã chỉ ra. Nếu không làm rõ thêm, các câu trả lời sẽ không tốt hơn mục lục của sách giáo khoa về thuật toán.
Tsuyoshi Ito

1
Có một cuốn sách gần đây: "Chín thuật toán đã thay đổi tương lai: Những ý tưởng khôn ngoan thúc đẩy máy tính ngày nay" của John MacCormick. Xem báo chí.princeton.edu/title/9528.html
Alessandro Jacopson

Câu trả lời:


18

Là Fourier nhanh Chuyển đổi vấn đề thuật toán được giải quyết hầu hết các lần mỗi ngày bởi các hệ thống máy tính thực sự? Nó phải gần gũi. Vì vậy, tôi đề cử thuật toán FFT Cooley-Tukey .


Tôi như thế này, FFT bị bỏ qua trong giáo dục khoa học máy tính cơ bản, nhưng nó chắc chắn là một thuật toán với một tác động to lớn trong xã hội hiện đại của chúng ta, và nhiều thứ hiện đại xung quanh chúng ta đang crunching FFT tất cả thời gian.
Jukka Suomela

14

Phép nhân.

Có lẽ một trong những thuật toán lâu đời nhất không hoàn toàn tầm thường, và một vấn đề được giải quyết thường xuyên hơn FFT.


Phép nhân không phải là một thuật toán, đó là một vấn đề với nhiều bài toán con được giải bằng các thuật toán khác nhau: số nguyên có kích thước cố định và dấu phẩy động, được thực hiện bởi phần cứng hoặc phần mềm; bignums có kích thước thay đổi (modulo hoặc không), ma trận, ...
Gilles 'SO- ngừng trở nên xấu xa'

Tôi đã đề cập đến các mạch nhân phần cứng trong các CPU hiện đại (đối với các số nguyên và số dấu phẩy động; cuối cùng hai cái này không khác nhau). Hiểu biết của tôi là chúng có xu hướng "chỉ" là các phiên bản được thiết kế rất thông minh theo cùng một cách tiếp cận cơ bản - thuật toán "nhân dài", đã được biết đến từ thời Trung cổ.
Jukka Suomela

Tôi nghĩ rằng phép trừ (so sánh) được sử dụng thường xuyên hơn nhiều so với phép nhân và tôi không thể thấy bất kỳ lý do nào tại sao phép nhân được tính là một thuật toán và phép cộng / phép trừ không. Tuy nhiên, tôi không biết nếu điều này đủ điều kiện là một câu trả lời.
Tsuyoshi Ito

Có, phép cộng và phép trừ được sử dụng thậm chí thường xuyên hơn phép nhân - thực sự, thuật toán nhân dài về cơ bản làm giảm phép nhân cho phép cộng. Tuy nhiên, tôi không biết nếu có một thuật toán cộng / trừ duy nhất mà chúng tôi có thể đề cử ở đây?
Jukka Suomela

@JukkaSuomela: Phép cộng và phép trừ hai sẽ là một ứng cử viên sáng giá.
John Gietzen

13

Các thuật toán đường đi ngắn nhất của DijkstraBellman-Ford . Có ít nhất 35.000 Hệ thống tự trị (AS) hoạt động trên Internet kể từ năm 2010. Mỗi AS đang chạy một giao thức định tuyến trạng thái liên kết (Dijkstra) hoặc giao thức định tuyến vectơ khoảng cách (Bellman-Ford). Các bộ định tuyến trong một AS thường cập nhật bảng theo định kỳ cứ sau vài phút, giả sử 10.

Do đó, số vụ hành quyết Dijkstra & Bellman-Ford mỗi ngày lên tới ít nhất 5 triệu. Và đó chỉ là từ các bộ định tuyến.

Chúng tôi chưa tính các tính toán đường đi ngắn nhất từ ​​Google Maps và các lượt thích có thể dễ dàng chiếm số lượng gấp 10 lần. Nửa tỷ vụ hành quyết mỗi ngày không phải là quá xa vời.


Nửa tỷ vụ hành quyết mỗi ngày nghe có vẻ rất nhiều, nhưng hãy nhớ rằng chúng ta có, ví dụ, hàng tỷ điện thoại di động trên hành tinh này. Những điều đó làm tất cả các thời gian là gì? Hay họ đang làm gì trong mỗi cuộc gọi điện thoại? Tôi không biết, nhưng tôi đoán là họ ít nhất đang thực hiện nhiều FFT hơn là những con đường ngắn nhất.
Jukka Suomela

8

14
Nhân tiện, có thực sự trường hợp quicksort là thuật toán sắp xếp được sử dụng phổ biến nhất trong thế giới thực? Tôi đã có một cái nhìn nhanh về việc thực hiện chức năng "sắp xếp" mục đích chung trong một số ngôn ngữ lập trình thường được sử dụng. Perl: dường như đã chuyển từ quicksort sang sáp nhập gần đây. Python: sử dụng Timsort (hybrides / insert sort sort). Java: được sử dụng để sáp nhập, ngày nay Timsort. Cơ sở dữ liệu có xu hướng sử dụng phân loại bên ngoài. Quicksort đã là một loài có nguy cơ tuyệt chủng?
Jukka Suomela

Tôi nghĩ rằng đó là một điểm rất tốt. Sẽ thật tuyệt nếu ai đó có thể chỉnh sửa câu trả lời.
Juan Bermejo Vega

@Juan, mặc dù quan điểm mà Jukka đã đề cập là chính xác nhưng tôi không thấy bất kỳ lý do nào để chỉnh sửa câu trả lời.
Kaveh


7

Tôi nghĩ thuật toán được sử dụng nhiều nhất là Kiểm tra chẵn lẻ (hoặc có thể CRC hoặc một số loại mã sửa lỗi), bởi vì chúng xuất hiện trong mọi truy cập RAM.


Cũng được sử dụng ít nhất một lần cho mỗi gói được gửi trên bất kỳ mạng dựa trên IP nào
Claus Broch



4

Kết hợp biểu thức chính quy bằng cách chuyển đổi sang automata hữu hạn - Tôi tin rằng các hàm grep dọc theo các dòng này.



3

Thật khó để nghĩ về các thuật toán được sử dụng rộng rãi hơn các thuật toán trong triển khai TCP hiện đại : tức là tránh tắc nghẽn , truyền lại nhanh . Mặc dù điều đó phụ thuộc vào cách người ta xác định những gì đáp ứng các tiêu chí cho một thuật toán ...


Nhưng bạn có thực sự có thể sử dụng thuật toán TCP thường xuyên hơn FFT (đã có trong danh sách này) không? Nếu máy tính của tôi gửi một gói IP duy nhất (TCP hay không), thì nó có thường kích hoạt cả đống tính toán FFT không? Thông thường các gói được truyền tại một số điểm bằng cách sử dụng các công nghệ như WLAN, ADSL và GSM và tôi nghĩ rằng hầu hết chúng sử dụng các điều chế phụ thuộc nhiều vào FFT.
Jukka Suomela

Tôi nghĩ bạn đúng.
Lev Reyzin

3

Loại bỏ Gaussian Điều này vẫn được sử dụng trong thực tế phải không? Nếu không thay thế bằng bất cứ điều gì thường xuyên nhất được sử dụng để giải quyết các hệ thống tuyến tính ...


2

SHA-1 (và các hàm băm nói chung). Có lẽ đánh bại hầu hết các thuật toán khác về số lượng thực thi.


2

Các thuật toán liên quan đến cây B + được sử dụng cho các công cụ cơ sở dữ liệu


2

Thuật toán lập lịch. Chúng được sử dụng bởi mọi thiết bị người dùng và máy chủ trên toàn thế giới. Một số biến thể đang được sử dụng, tôi tìm thấy rất nhiều tài liệu tham khảo cho "hàng đợi phản hồi đa cấp"


1

Phản hồi này diễn giải "thường xuyên nhất" theo các chu kỳ CPU thực tế.

Khi tôi học máy tính vào những năm 70, tôi nhớ lại rằng phần lớn các chu trình máy tính (đọc: máy tính lớn) được dành cho việc sắp xếp. Các ứng dụng kinh doanh đòi hỏi phân loại rộng rãi để phân tích và báo cáo. Tôi không tưởng tượng rằng điều đó đã thay đổi rất nhiều, nhưng tất nhiên sự gia tăng của các ứng dụng khác - e-mail, xử lý văn bản, v.v .-- phải thay đổi hỗn hợp. Những loại đó thường là loại ổn định (không phải Quicksort) do cần phải sắp xếp thành công các trường để tạo ra các lớp con.

Mặc dù vậy, nói một cách chính xác, thuật toán được sử dụng thường xuyên nhất là, không nghi ngờ gì, bất cứ điều gì được thực thi bởi quy trình chờ của hệ thống Windows khi không có gì khác đang diễn ra ;-).


1

Ma trận vectơ nhân

... Là công việc tính toán đằng sau giải pháp của hầu hết các hệ thống tuyến tính. Kết quả là nó được chạy bất cứ khi nào

  • Các nhà khoa học / kỹ sư giải phương trình vi phân
  • Các nhà thống kê tìm thấy mối tương quan mới (PCA)
  • Google chạy pagerank
  • Điện thoại của bạn dự đoán vị trí của bạn từ GPS, gia tốc kế, vị trí tháp di động
  • Xe của bạn điều chỉnh hệ thống treo của bạn trong chuyển động
  • v.v ....

Hầu hết các FLOP trên bất kỳ siêu máy tính hoặc cụm được sử dụng bên trong một mat-vec thưa thớt.


1

Phương pháp của Newton. Nó được sử dụng để tính toán căn bậc hai, cho bộ phận điện toán. Nó có thể được sử dụng để làm lập trình tuyến tính. Nói chung, đó là đặc điểm của tối ưu hóa (lồi). Nó có thể được sử dụng để giải các phương trình vi phân trong Vật lý bằng cách giảm thiểu tác động / năng lượng.


1

Băm và cây đỏ-đen.

Chúng đã được triển khai trong STL (hash_map, bản đồ) và mọi lập trình viên đều biết rằng một thùng chứa như vậy rất tiện lợi bất cứ khi nào bạn muốn lưu trữ một số thông tin được lập chỉ mục bởi một loại dữ liệu tùy ý.



0

Lập trình động .

Tôi nghĩ DP được sử dụng "thường xuyên hơn" so với các thuật toán khác được trích dẫn trong khảo sát cho đến nay. Tôi suy luận "thường xuyên hơn" theo nghĩa là tần suất một khái niệm thuật toán không tầm thường được lập trình viên thực hiện trong cuộc sống thực, thay vì bao nhiêu lần thực hiện một thuật toán cụ thể được gọi.

DP rất linh hoạt, và có nhiều mặt. Đôi khi tôi sử dụng nó trong tiềm thức và sau đó nhận ra sau đó tôi đang làm DP.

Tất nhiên, có những thứ thậm chí còn phổ biến hơn Chương trình động, nhưng chúng chủ yếu là cấu trúc dữ liệu (mảng, danh sách liên kết, hàm băm).


7
Điều này hơi khác so với các đề xuất khác vì đây là mô hình thiết kế thuật toán (tương tự như tham lam hoặc primal-dual) và không chỉ là một thuật toán đơn lẻ.
Jukka Suomela

0

Kết hợp chuỗi, được sử dụng mọi lúc trong phần mềm ứng dụng và ở cấp độ cơ sở dữ liệu.

Trong trường hợp chính xác, có một số thuật toán khá liên quan (KMP, Boyer-Moore) với một số thuật toán đạt được thời gian chạy dự kiến ​​tuyến tính. Họ cũng thú vị để nghiên cứu từ quan điểm của CS.

Kết hợp chuỗi gần đúng, đó là sự sắp xếp, có lẽ còn thú vị hơn. Bạn biết tính năng "autocorrecting"? Ngoài ra, tìm kiếm trong dữ liệu chuỗi nhiễu (ví dụ DNA) được thực hiện bằng cách sử dụng sắp xếp.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.