Skip to content

📝 Thuật toán và cấu trúc dữ liệu được triển khai bằng JavaScript kèm theo phần giải thích và liên kết đến các bài đọc thêm - fork về dịch cho thằng em yếu tiếng Anh của mình học =))

License

Notifications You must be signed in to change notification settings

tcdtist/fork-javascript-data-structures-and-algorithms

 
 

Repository files navigation

Thuật toán và Cấu trúc Dữ liệu JavaScript

CI codecov repo size

Kho lưu trữ này chứa các ví dụ dựa trên JavaScript về nhiều thuật toán và cấu trúc dữ liệu phổ biến.

Mỗi thuật toán và cấu trúc dữ liệu đều có một tệp README riêng với các giải thích liên quan và các liên kết để đọc thêm (bao gồm cả các video trên YouTube).

Đọc tài liệu này bằng ngôn ngữ khác: English

Nguồn - Kho lưu trữ gốc

☝ Lưu ý rằng dự án này chỉ được sử dụng cho mục đích học tập và nghiên cứu, không dùng cho sản xuất.

Data Structures - Cấu trúc dữ liệu

Cấu trúc dữ liệu là một cách đặc biệt để tổ chức và lưu trữ dữ liệu trong máy tính sao cho có thể truy cập và sửa đổi hiệu quả. Một cách chính xác hơn, cấu trúc dữ liệu là 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 thao tác có thể được áp dụng cho dữ liệu.

B - Người mới bắt đầu, A - Nâng cao

Algorithms - Thuật toán

Thuật toán là một đặc tả không mơ hồ về cách giải quyết một lớp vấn đề. Đó là một tập hợp các quy tắc xác định chính xác một chuỗi các thao tác.

B - Người mới bắt đầu, A - Nâng cao

Algorithms by Topic - Thuật toán theo Chủ đề

Algorithms by Paradigm - Thuật toán theo Mô hình

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

How to use this repository - Cách sử dụng kho lưu trữ này

Install all dependencies - Cài đặt tất cả các phụ thuộc

npm install

Run ESLint - Chạy ESLint

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

npm run lint

Run all tests - Chạy tất cả các bài kiểm tra

npm test

Run tests by name - Chạy các bài kiểm tra theo tên

npm test -- 'LinkedList'

Troubleshooting - Khắc phục sự cố

Nếu việc linting hoặc kiểm tra thất bại, hãy thử xóa thư mục node_modules và cài đặt lại các gói npm:

rm -rf ./node_modules
npm i

Cũng đảm bảo rằng bạn đang sử dụng phiên bản Node đúng (>=16). Nếu bạn đang sử dụng nvm để quản lý phiên bản Node, bạn có thể chạy nvm use từ thư mục gốc của dự án và phiên bản đúng sẽ được chọn.

Playground - 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 tra cho nó trong ./src/playground/__test__/playground.test.js.

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

npm test -- 'playground'

Useful Information - Thông tin hữu ích

References - Tài liệu tham khảo

Big O Notation - Ký hiệu Big O

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

Biểu đồ Big O

Nguồn: Big O Cheat Sheet.

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

Big O Notation Type Computations for 10 elements Computations for 100 elements Computations for 1000 elements
O(1) Constant 1 1 1
O(log N) Logarithmic 3 6 9
O(N) Linear 10 100 1000
O(N log N) n log(n) 30 600 9000
O(N^2) Quadratic 100 10000 1000000
O(2^N) Exponential 1024 1.26e+29 1.07e+301
O(N!) Factorial 3628800 9.3e+157 4.02e+2567

Data Structure Operations Complexity

Data Structure Access Search Insertion Deletion Comments
Array 1 n n n
Stack n n 1 1
Queue n n 1 1
Linked List n n 1 n
Hash Table - n n n In case of perfect hash function costs would be O(1)
Binary Search Tree n n n n In case of balanced tree costs would be O(log(n))
B-Tree log(n) log(n) log(n) log(n)
Red-Black Tree log(n) log(n) log(n) log(n)
AVL Tree log(n) log(n) log(n) log(n)
Bloom Filter - 1 1 - False positives are possible while searching

Array Sorting Algorithms Complexity

Name Best Average Worst Memory Stable Comments
Bubble sort n n2 n2 1 Yes
Insertion sort n n2 n2 1 Yes
Selection sort n2 n2 n2 1 No
Heap sort n log(n) n log(n) n log(n) 1 No
Merge sort n log(n) n log(n) n log(n) n Yes
Quick sort n log(n) n log(n) n2 log(n) No Quicksort is usually done in-place with O(log(n)) stack space
Shell sort n log(n) depends on gap sequence n (log(n))2 1 No
Counting sort n + r n + r n + r n + r Yes r - biggest number in array
Radix sort n * k n * k n * k n + k Yes k - length of longest key

Project Backers - Nhà tài trợ dự án

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

Những người đang tài trợ cho dự án này ∑ = 1

Author - Tác giả

@trekhleb

Thêm một số dự ánbài viết về JavaScript và thuật toán tại trekhleb.dev

About

📝 Thuật toán và cấu trúc dữ liệu được triển khai bằng JavaScript kèm theo phần giải thích và liên kết đến các bài đọc thêm - fork về dịch cho thằng em yếu tiếng Anh của mình học =))

Resources

License

Code of conduct

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 100.0%