Từ điển Thuật toán và Cấu trúc Dữ liệu (Dictionary of Algorithms and Data Structures)
(xlinux.nist.gov)- Từ điển trực tuyến tổng hợp và sắp xếp thuật toán, các kỹ thuật thuật toán, cấu trúc dữ liệu, các bài toán điển hình và các định nghĩa liên quan
- Bao gồm các mục thuật toán như những hàm phổ biến như Ackermann's function
- Bao gồm các mục bài toán điển hình như traveling salesman, Byzantine generals
- Một số mục cung cấp liên kết đến triển khai (implementation) và thông tin bổ sung, các mục được sắp xếp theo chỉ mục dựa trên lĩnh vực (area) và loại (type)
- Loại trừ một số lĩnh vực cụ thể như business data processing, AI, graphics và tập trung vào thuật toán và cấu trúc dữ liệu "tổng quát (general)"
Tổng quan về trang web và đơn vị vận hành
- Được lưu trữ bởi Software and Systems Division thuộc Information Technology Laboratory của NIST
- Việc phát triển từ điển bắt đầu vào năm 1998 dưới sự biên tập của Paul E. Black
- Có dạng từ điển, bao quát thuật toán, các kỹ thuật thuật toán, cấu trúc dữ liệu, các bài toán điển hình và các định nghĩa liên quan
Cấu thành các mục nội dung
- Các mục thuật toán bao gồm những hàm phổ biến như Ackermann's function
- Các mục bài toán bao gồm traveling salesman, Byzantine generals
- Một số mục cung cấp liên kết đến triển khai (implementation) và thông tin bổ sung
- Trang chỉ mục liệt kê các mục theo lĩnh vực (area) và loại (type)
- two-level index có dung lượng tải xuống toàn bộ chỉ bằng 1/20 trang này
Hướng dẫn sử dụng
- Cấm sử dụng cho mục đích gian lận (cheat), giáo viên cần hỗ trợ thì được hướng dẫn liên hệ
- Đề xuất, chỉnh sửa và ý kiến được hướng dẫn gửi cho Paul Black
Phạm vi không bao gồm
- Hiện tại chưa bao gồm các thuật toán chuyên biệt cho các lĩnh vực sau
- business data processing, communications, operating systems hoặc distributed algorithms
- programming languages, AI, graphics, numerical analysis
- Phạm vi được giới hạn vì chỉ riêng thuật toán và cấu trúc dữ liệu "tổng quát (general)" cũng đã đủ khó để bao quát
Chỉ mục và ghi chú tham khảo
- Các thuật ngữ có biến đứng trước như n-way, m-dimensional, p-branching được phân loại dưới mục k-
- Có thể tìm các mục hữu ích trong A Glossary of Computer Oriented Abbreviations and Acronyms
1 bình luận
Ý kiến trên Hacker News
Các bài viết liên quan trước đây:
Dictionary of Algorithms and Data Structures (1998) - https://news.ycombinator.com/item?id=12758176 - tháng 10/2016 (18 bình luận)
Dictionary of Algorithms and Data Structures - https://news.ycombinator.com/item?id=8905348 - tháng 1/2015 (4 bình luận)
Dictionary of Algorithms and Data Structures - https://news.ycombinator.com/item?id=5525893 - tháng 4/2013 (15 bình luận)
Dictionary of Algorithms and Data Structures - https://news.ycombinator.com/item?id=2496539 - tháng 4/2011 (16 bình luận)
Dictionary of Algorithms and Data Structures - https://news.ycombinator.com/item?id=2351074 - tháng 3/2011 (1 bình luận)
Tôi muốn thích tài liệu này, nhưng trong số những thứ tôi biết thì nó thiếu Fenwick tree và thuật toán/cấu trúc dữ liệu union-find
Lần đầu tôi thấy Fenwick tree là ở đây: https://www.youtube.com/watch?v=uSFzHCZ4E-8&t=479s
union-find thì hình như tôi thấy ở đây: https://www.youtube.com/watch?v=PGZ64ob440I
Nhưng theo trí nhớ thì đó là bản cài đặt bằng dictionary/hashmap chứ không phải mảng kích thước cố định
Những thứ tôi nghĩ ra ngay mà không tìm thấy là phân rã căn bậc hai, heavy-light decomposition, và toàn bộ nhóm truy vấn giá trị nhỏ nhất trên đoạn (Range Minimum Query). Cá nhân tôi xếp truy vấn giá trị nhỏ nhất trên đoạn vào nhóm các bài toán tổng quát yêu thích nhất, và xét như một cụm kỹ thuật đáng dành thời gian tập trung thì tôi thấy nó thú vị hơn nhiều so với sắp xếp
Cấu trúc dữ liệu union-find thường được trình bày bằng mảng cố định, vì như vậy phần phân tích thuật toán thú vị hơn. Nếu chi phí tra cứu vượt quá O(1), phần thú vị trong phân tích sẽ bị che lấp. Tất nhiên bản thân cấu trúc dữ liệu thì triển khai theo cách nào cũng hoạt động tốt
Đây là tài liệu tuyệt vời, nhưng tôi mong các lớp cấu trúc dữ liệu và thuật toán tập trung hơn vào ứng dụng
Tôi quan tâm nhiều hơn đến việc biết vì sao nó hữu ích và trong bối cảnh nào nên đem ra dùng, thay vì chỉ biết nó là gì
Tôi vẫn chưa phải chuyên gia nên đây không phải tài liệu có thẩm quyền, nhưng có thể sẽ thú vị: https://sebinsua.com/algorithmic-bathwater#what-kind-of-prob...
Một mục gây chú ý: Marlena
https://xlinux.nist.gov/dads/HTML/marlena.html
Có ai biết nó nghĩa là gì không?
Mục này cũng tham chiếu đến cái tên đó: https://xlinux.nist.gov/dads/HTML/antisymmetric.html
Tôi không chắc một danh sách thuật toán xếp theo thứ tự alphabet có phải điểm khởi đầu tốt cho người học không
Với người mới bắt đầu hoặc muốn nắm chắc chủ đề này, tôi nghĩ cuốn kinh điển này mới là chuẩn mực.[1]
Nếu mục tiêu là trưởng thành thành lập trình viên và vượt qua phỏng vấn coding ở FAANG, đây có thể là đòn bẩy mạnh nhất
[1] https://books.google.com/books/about/Introduction_To_Algorit...
Tôi tự hỏi nên tìm kiếm ngược danh sách này như thế nào
Ví dụ có lúc bạn có thể mô tả đại khái cách một thuật toán hoạt động nhưng không biết tên, và muốn biết nó có trong danh sách này không. Ngày nay có thể viết pseudocode rồi đưa cho ChatGPT hỏi tên, nhưng ngoài cách đó thì tôi không rõ
Giá mà họ nhận pull request. Những mục cơ bản như acceleration structure vẫn còn thiếu
Tài liệu này thật sự rất hay. Hy vọng nó sống sót qua những thứ như cắt giảm ngân sách, và nên được lưu trữ lại