Sử dụng thực tế của các cấu trúc dữ liệu khác nhau [đóng]


102

Có rất nhiều cuộc thảo luận về cấu trúc dữ liệu, nhưng tôi không thể tìm thấy một danh sách đơn giản về cấu trúc dữ liệu và cách sử dụng thực tế của chúng ở ngoài đó. Tôi đang cố gắng học cho một cuộc phỏng vấn và tôi nghĩ điều này sẽ giúp ích cho tôi, cùng với nhiều người khác. Tôi đang tìm kiếm một cái gì đó như thế này:

Cấu trúc dữ liệu - Ví dụ / Được sử dụng cho

Bảng băm - tra cứu dữ liệu nhanh ... sau đó cho ví dụ

Mảng - ...

Cây nhị phân - ...

Nếu có một tài nguyên như thế này ở đâu đó, xin vui lòng cho tôi biết.

Cảm ơn!

CHỈNH SỬA: Ý tôi là wikipedia là tốt và tất cả, nhưng trên hầu hết các trang, họ không thực sự liệt kê các công dụng thực tế. Tôi đang tìm kiếm thứ gì đó hơn thế nữa.

Câu trả lời:


96

Đã tìm thấy danh sách trong một câu hỏi tương tự, trước đây trên StackOverflow:

Bảng băm - dùng để tra cứu dữ liệu nhanh - bảng ký hiệu cho trình biên dịch, lập chỉ mục cơ sở dữ liệu, bộ nhớ đệm, Biểu diễn dữ liệu duy nhất.

Trie - từ điển, chẳng hạn như từ điển được tìm thấy trên điện thoại di động để tự động điền và kiểm tra chính tả.

Cây hậu tố - tìm kiếm toàn văn nhanh chóng được sử dụng trong hầu hết các trình xử lý văn bản.

Hoạt động ngăn xếp - hoàn tác \ làm lại trong bộ xử lý văn bản, Đánh giá biểu thức và phân tích cú pháp, nhiều máy ảo như JVM được định hướng ngăn xếp.

Hàng đợi - Nghiên cứu vận chuyển và hoạt động nơi các thực thể khác nhau được lưu trữ và lưu giữ để xử lý sau đó, tức là hàng đợi thực hiện chức năng của một bộ đệm.

Hàng đợi ưu tiên - lập lịch trình trong nhân

Cây - Trình phân tích cú pháp, Hệ thống tệp

Cây Radix - Bảng định tuyến IP

Cây BSP - Đồ họa máy tính 3D

Đồ thị - Kết nối / quan hệ trong các trang mạng xã hội, Định tuyến, mạng truyền thông, tổ chức dữ liệu, v.v.

Heap - Cấp phát bộ nhớ động trong lisp

Đây là câu trả lời được đăng bởi RV Pradeep

Một số liên kết khác, ít hữu ích hơn:

Các ứng dụng chỉ được liệt kê cho một số cấu trúc dữ liệu

Không tập trung vào ứng dụng, bởi bản tóm tắt tốt và có liên quan


1
liên kết đầu tiên của bạn bị hỏng
Dan Beaulieu

Cảm ơn bạn, @DanBeaulieu. Tôi đã gỡ bỏ liên kết chết.
MXMLLN

1
Tóm tắt rất hay. Có lẽ danh sách các tập quán không bao giờ kết thúc, nhưng một trong những điểm chính.
Nick L.

1
Việc hoàn tác / làm lại có thực sự là một Ngăn xếp không? Nếu hoàn tác xuất hiện ở đầu Ngăn xếp, thì bạn sẽ không thể làm lại.
Tony L.

5
@TonyL. Tôi biết đây là một câu hỏi cũ hơn, nhưng tôi tin rằng 2 ngăn xếp được sử dụng hoặc Hoàn tác / Làm lại. Khi bạn hoàn tác một hành động, hành động đó sẽ bật ra khỏi ngăn xếp hành động và được đặt trên Ngăn xếp làm lại. Nếu bạn làm lại, bạn sẽ bật nó ra khỏi Ngăn xếp làm lại và đẩy nó lên ngăn xếp hành động. Tôi có thể sai thuật ngữ, nhưng nên có các ví dụ ở đó.
Rick Henderson

14

Tôi ở cùng thuyền với bạn. Tôi cần học để phỏng vấn công nghệ, nhưng ghi nhớ một danh sách không thực sự hữu ích. Nếu bạn có 3-4 giờ rảnh rỗi và muốn lặn sâu hơn, tôi khuyên bạn nên kiểm tra

mycodeschool
Tôi đã xem trên Coursera và các tài nguyên khác như blog và sách giáo khoa, nhưng tôi thấy chúng không đủ toàn diện hoặc ở đầu kia của phổ, quá dày đặc với các thuật ngữ khoa học máy tính tiên quyết.

Anh chàng trong video có một loạt bài giảng về cấu trúc dữ liệu. Đừng bận tâm đến những hình vẽ ngớ ngẩn, hoặc điểm nhấn nhẹ chút nào. Bạn không chỉ cần hiểu cấu trúc dữ liệu nào để chọn mà còn một số điểm khác cần xem xét khi mọi người nghĩ về cấu trúc dữ liệu:

  • ưu và nhược điểm của cấu trúc dữ liệu phổ biến
  • tại sao mỗi cấu trúc dữ liệu tồn tại
  • nó thực sự hoạt động như thế nào trong bộ nhớ
  • các câu hỏi / bài tập cụ thể và quyết định sử dụng cấu trúc nào để đạt hiệu quả tối đa
  • lời giải thích sáng suốt Big 0

Tôi cũng đăng ghi chú trên github nếu bạn quan tâm.


7

Theo hiểu biết của tôi, cấu trúc dữ liệu là bất kỳ dữ liệu nào nằm trong bộ nhớ của bất kỳ hệ thống điện tử nào có thể được quản lý hiệu quả. Nhiều khi nó là một trò chơi của bộ nhớ hoặc khả năng truy cập dữ liệu nhanh hơn. Về bộ nhớ, có những đánh đổi được thực hiện với việc quản lý dữ liệu dựa trên chi phí cho công ty của sản phẩm cuối cùng đó. Được quản lý hiệu quả cho chúng ta biết cách tốt nhất có thể truy cập dữ liệu dựa trên yêu cầu chính của sản phẩm cuối cùng. Đây là một lời giải thích rất cao nhưng cấu trúc dữ liệu là một chủ đề rộng lớn. Hầu hết những người phỏng vấn đi sâu vào cấu trúc dữ liệu mà họ có thể đủ khả năng để thảo luận trong các cuộc phỏng vấn tùy thuộc vào thời gian họ có, đó là danh sách liên kết và các chủ đề liên quan.

Giờ đây, các kiểu dữ liệu này có thể được chia thành nguyên thủy, trừu tượng, tổng hợp, dựa trên cách chúng được xây dựng và truy cập một cách hợp lý.

  • cấu trúc dữ liệu nguyên thủy là các khối xây dựng cơ bản cho tất cả các cấu trúc dữ liệu, chúng có một bộ nhớ liên tục cho chúng: boolean, char, int, float, double, string.
  • cấu trúc dữ liệu hỗn hợpcấu trúc dữ liệu bao gồm nhiều hơn một kiểu dữ liệu nguyên thủy. lớp, cấu trúc, liên hợp, mảng / bản ghi.
  • kiểu dữ liệu trừu tượngkiểu dữ liệu tổng hợp có cách để truy cập chúng một cách hiệu quả được gọi là thuật toán. Tùy thuộc vào cách dữ liệu được truy cập, cấu trúc dữ liệu được chia thành các kiểu dữ liệu tuyến tính và phi tuyến tính. Danh sách được liên kết, ngăn xếp, hàng đợi, v.v. là các kiểu dữ liệu tuyến tính. đống, cây nhị phân và bảng băm, v.v. là các kiểu dữ liệu phi tuyến tính.

Tôi hy vọng điều này sẽ giúp bạn đi sâu vào.


6

Cuốn sách xuất sắc " Sổ tay thiết kế thuật toán" của Skienna chứa một kho giải thuật và cấu trúc dữ liệu khổng lồ.

Đối với rất nhiều vấn đề, cấu trúc dữ liệu và thuật toán được mô tả, so sánh và thảo luận về cách sử dụng thực tế. Tác giả cũng cung cấp tài liệu tham khảo để triển khai và các tài liệu nghiên cứu ban đầu.

Cuốn sách thật tuyệt nếu bạn tìm kiếm cấu trúc dữ liệu tốt nhất để giải quyết vấn đề của mình. Nó cũng rất hữu ích cho việc chuẩn bị phỏng vấn.

Một nguồn tài liệu tuyệt vời khác là Từ điển cấu trúc dữ liệu và thuật toán NIST .


4

Thêm một số ứng dụng thực tế của cấu trúc dữ liệu

Red-Black Trees (Được sử dụng khi thường xuyên Chèn / Xóa và tìm kiếm ít) - K-mean Clustering sử dụng cây đỏ đen, Cơ sở dữ liệu, Cơ sở dữ liệu đơn giản, tìm kiếm từ trong từ điển, tìm kiếm trên web

Cây AVL (Tìm kiếm nhiều hơn và ít chèn / xóa hơn) - Phân tích dữ liệu và khai thác dữ liệu và các ứng dụng liên quan đến nhiều tìm kiếm hơn

Min Heap - Thuật toán phân cụm


3

Bất kỳ xếp hạng nào của các cấu trúc dữ liệu khác nhau ít nhất sẽ được gắn một phần với bối cảnh vấn đề. Nó sẽ hữu ích để học cách phân tích hiệu suất thời gian và không gian của các thuật toán. Thông thường, "ký hiệu O lớn" được sử dụng, ví dụ: tìm kiếm nhị phân theo thời gian O (log n), có nghĩa là thời gian tìm kiếm một phần tử là nhật ký (trong cơ số 2, ngầm định) của số phần tử. Theo trực quan, vì mỗi bước loại bỏ một nửa dữ liệu còn lại là không liên quan, nên việc nhân đôi số phần tử sẽ tăng thời gian lên 1 bước. (Tìm kiếm nhị phân có quy mô khá tốt.) Hiệu suất không gian liên quan đến cách lượng bộ nhớ phát triển cho các tập dữ liệu lớn hơn. Ngoài ra, lưu ý rằng ký hiệu big-O bỏ qua các hệ số hằng số - đối với các tập dữ liệu nhỏ hơn, thuật toán O (n ^ 2) vẫn có thể nhanh hơn thuật toán O (n * log n) có hệ số hằng số cao hơn.

Bên cạnh thời gian và không gian, các đặc điểm khác bao gồm liệu cấu trúc dữ liệu có được sắp xếp hay không (cây và danh sách bỏ qua được sắp xếp, bảng băm thì không), tính bền bỉ (cây nhị phân có thể sử dụng lại con trỏ từ các phiên bản cũ hơn, trong khi bảng băm được sửa đổi tại chỗ), v.v.

Mặc dù bạn sẽ cần tìm hiểu hành vi của một số cấu trúc dữ liệu để có thể so sánh chúng, nhưng một cách để phát triển cảm giác tại sao chúng khác nhau về hiệu suất là nghiên cứu kỹ một số cấu trúc. Tôi khuyên bạn nên so sánh danh sách được liên kết đơn, cây tìm kiếm nhị phân và danh sách bỏ qua , tất cả đều tương đối đơn giản, nhưng có các đặc điểm rất khác nhau. Hãy nghĩ về việc mất bao nhiêu công để tìm một giá trị, thêm một giá trị mới, tìm tất cả các giá trị theo thứ tự, v.v.

Có nhiều văn bản khác nhau về phân tích hiệu suất thuật toán / cấu trúc dữ liệu mà mọi người đề xuất, nhưng điều thực sự khiến chúng có ý nghĩa với tôi là học OCaml. Đối phó với các cấu trúc dữ liệu phức tạp là điểm mạnh của ML và hành vi của chúng rõ ràng hơn nhiều khi bạn có thể tránh con trỏ và quản lý bộ nhớ như trong C. (Học OCaml chỉ để hiểu cấu trúc dữ liệu gần như chắc chắn là một chặng đường dài. :))

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.