Skip to content

Latest commit

 

History

History
328 lines (284 loc) · 25.4 KB

README.vi-VN.md

File metadata and controls

328 lines (284 loc) · 25.4 KB

JavaScript Thuật Toán và Cấu Trúc Dữ Liệu

CI codecov

Repository này bao gồm nhiều ví dụ thuật toán và cấu trúc dữ liệu phổ biến dựa trên Javascript.

Mối thuật toán và cấu trúc dữ liệu có README riêng với những lý giải và links liên quan để đọc thêm (bao gồm cả những videos trên Youtube).

Đọc bằng ngôn ngữ khác: English, 简体中文, 繁體中文, 한국어, 日本語, Polski, Français, Español, Português, Русский, Türk, Italiana, Bahasa Indonesia, Українська, Arabic

☝ Dự án này chỉ được sử dụng cho mục đích học tập và nghiên cứu, không được dùng cho mục đích thương mại.

Cấu Trúc Dữ Liệu

Cấu trúc dữ liệu là một cách cụ thể để tổ chức và lưu trữ dữ liệu trong máy tính để nó có thể được truy cập và sửa đổi một cách hiệu quả. Chính xác hơn, cấu trúc dữ liệu là một tập hợp các giá trị dữ liệu, các mối quan hệ giữa chúng và các hàm hoặc phép toán có thể được áp dụng cho dữ liệu.

B - Cơ bản, A - Nâng cao

Thuật Toán

Thuật toán là một đặc tả rõ ràng về cách giải quyết một lớp vấn đề. Nó là một tập hợp các quy tắc xác định chính xác một chuỗi phép toán.

B - Cơ bản, A - Nâng cao

Thuật toán theo chủ đề

Thuật toán theo mẫu hình

Mẫu hình thuật toán là một phương pháp hoặc cách tiếp cận chung làm cơ sở cho việc thiết kế một lớp thuật toán. Nó là một sự trừu tượng cao hơn khái niệm về một thuật toán, cũng giống như một thuật toán là một sự trừu tượng cao hơn một chương trình máy tính.

Hướng dẫn sử dụng repository

Cài đặt tất cả các phụ thuộc

npm install

Chạy ESLint

Bạn có thể muốn chạy nó để kiểm tra chất lượng code.

npm run lint

Chạy tất cả các kiểm thử

npm test

Chạy kiểm thử theo tên

npm test -- 'LinkedList'

Sân chơi

Bạn có thể chơi với các cấu trúc dữ liệu và thuật toán trong tệp ./src/playground/playground.js và viết các bài kiểm thử cho nó ở ./src/playground/__test__/playground.test.js.

Sau đó, chỉ cần chạy lệnh sau để kiểm tra xem sân chơi của bạn có hoạt động như mong đợi hay không:

npm test -- 'playground'

Thông tin hữu ích

Tham khảo

▶ Data Structures and Algorithms on YouTube

Kí hiệu O lớn

Kí hiệu O lớn được dùng để phân loại thuật toán theo thời gian chạy hoặc yêu cầu không gian gia tăng khi kích thước đầu vào gia tăng. Trên biểu đồ bên dưới, bạn có thể tìm thấy hầu hết các thứ tự tăng trưởng phổ biến của các thuật toán được chỉ định trong ký hiệu O lớn.

Đồ thị O lớn

Nguồn: Big O Cheat Sheet.

Dưới đây là danh sách một số ký hiệu O lớn thông dụng và so sánh với các kích thước khác nhau của dữ liệu đầu vào.

Kí hiệu O lớn Tính toán cho 10 phần tử Tính toán cho 100 phần tử Tính toán cho 1000 phần tử
O(1) 1 1 1
O(log N) 3 6 9
O(N) 10 100 1000
O(N log N) 30 600 9000
O(N^2) 100 10000 1000000
O(2^N) 1024 1.26e+29 1.07e+301
O(N!) 3628800 9.3e+157 4.02e+2567

Độ phức tạp của các phép toán cấu trúc dữ liệu

Cấu trúc dữ liệu Truy cập Tìm kiếm Chèn Xóa Bình luận
Mảng 1 n n n
Ngăn xếp n n 1 1
Hàng đợi n n 1 1
Danh sách liên kết n n 1 n
Bảng băm - n n n Trong trường hợp hàm băm hoàn hảo, chi phí sẽ là O(1)
Cây tìm kiếm nhị phân n n n n Trong trường hợp cây cân bằng, chi phí sẽ là O(log(n))
Cây B log(n) log(n) log(n) log(n)
Cây đỏ đen log(n) log(n) log(n) log(n)
Cây AVL log(n) log(n) log(n) log(n)
Bộ lọc Bloom - 1 1 - Có thể có kết quả dương tính giả trong khi tìm kiếm

Độ phức tạp của các thuật toán sắp xếp mảng

Tên Tốt nhất Trung bình Tệ nhất Bộ nhớ Ổn định Bình luận
Sắp xếp nổi bọt n n2 n2 1
Sắp xếp chèn n n2 n2 1
Sắp xếp chọn n2 n2 n2 1 Không
Sắp xếp vun đống n log(n) n log(n) n log(n) 1 Không
Sắp xếp trộn n log(n) n log(n) n log(n) n
Sắp xếp nhanh n log(n) n log(n) n2 log(n) Không Sắp xếp nhanh thường được thực hiện tại chỗ với không gian ngăn xếp O (log (n))
Shell sort n log(n) phụ thuộc vào khoảng cách dãy n (log(n))2 1 Không
Sắp xếp đếm n + r n + r n + r n + r r - số lớn nhất trong mảng
Sắp xếp theo cơ số n * k n * k n * k n + k k - độ dài của khóa dài nhất

Project Backers

Bạn có thể hỗ trợ dự án này qua ❤️️ GitHub hoặc ❤️️ Patreon.

Những người đang ủng hộ dự án này ∑ = 0