Bài 39 - Dãy Fibonacci trong cấu trúc dữ liệu & giải thuật

Dãy Fibonacci tạo dãy các số bằng cách cộng hai số đằng trước. Dãy Fibonacci bắt đầu từ hai số: F0 & F1. Giá trị ban đầu của F0 & F1 có thể tương ứng là 0, 1 hoặc 1, 1.

Bài 38 - Bài toán tháp Hà Nội trong cấu trúc dữ liệu & giải thuật

Bài toán Tháp Hà Nội (Tower of Hanoi) là một trò chơi toán học bao gồm 3 cột và với số đĩa nhiều hơn 1.

Bài 37 - Đệ qui trong cấu trúc dữ liệu & giải thuật

Một số ngôn ngữ lập trình cho phép việc một module hoặc một hàm được gọi tới chính nó. Kỹ thuật này được gọi là Đệ qui (Recursion). Trong đệ qui, một hàm a có thể: gọi trực tiếp chính hàm a này hoặc gọi một hàm b mà trả về lời gọi tới hàm a ban đầu. Hàm a được gọi là hàm đệ qui.

Bài 36 - Heap trong cấu trúc dữ liệu & giải thuật

Cấu trúc dữ liệu Heap là một trường hợp đặc biệt của cấu trúc dữ liệu cây nhị phân cân bằng, trong đó khóa của nút gốc được so sánh với các con của nó và được sắp xếp một cách phù hợp

Bài 35 - Spanning Tree trong cấu trúc dữ liệu & giải thuật

Một cây khung là một tập con của Grahp G mà có tất cả các đỉnh được bao bởi số cạnh tối thiểu nhất. Vì thế, một cây khung sẽ không hình thành một vòng tuần hoàn và nó cũng không thể bị ngắt giữa chừng.

Bài 34 - Cây AVL trong cấu trúc dữ liệu & giải thuật

Điều gì xảy ra nếu đầu vào của cây tìm kiếm nhị phân xuất hiện theo cách sắp xếp (tăng dần hoặc giảm dần)?

Bài 32 - Duyệt cây trong cấu trúc dữ liệu & giải thuật

Duyệt cây là một tiến trình để truy cập tất cả các nút của một cây và cũng có thể in các giá trị của các nút này. Bởi vì tất cả các nút được kết nối thông qua các cạnh (hoặc các link), nên chúng ta luôn luôn bắt đầu truy cập từ nút gốc.

Bài 31 - Cấu trúc dữ liệu cây

Cây (tree) đại diện cho các nút được kết nối bởi các cạnh. Chúng ta sẽ thảo luận cụ thể về cây nhị phân hoặc cây tìm kiếm nhị phân.

Bài 30 - Giải thuật tìm kiếm theo chiều rộng trong phân tích dữ liệu & giải thuật

Giải thuật tìm kiếm theo chiều rộng (Breadth First Search – viết tắt là BFS) duyệt qua một đồ thị theo chiều rộng và sử dụng hàng đợi (queue) để ghi nhớ đỉnh liền kề để bắt đầu việc tìm kiếm khi không gặp được đỉnh liền kề trong bất kỳ vòng lặp nào.

Bài 29 - Giải thuật tìm kiếm theo chiều sâu trong cấu trúc dữ liệu & giải thuật

Giải thuật tìm kiếm theo chiều sâu (Depth First Search – viết tắt là DFS), còn được gọi là giải thuật tìm kiếm ưu tiên chiều sâu, là giải thuật duyệt hoặc tìm kiếm trên một cây hoặc một đồ thị và sử dụng stack (ngăn xếp) để ghi nhớ đỉnh liền kề để bắt đầu việc tìm kiếm khi không gặp được đỉnh liền kề trong bất kỳ vòng lặp nào.

Bài 28 - Cấu trúc dữ liệu đồ thị

Một đồ thị (Graph) là một dạng biểu diễn hình ảnh của một tập các đối tượng, trong đó các cặp đối tượng được kết nối bởi các link. Các đối tượng được nối liền nhau được biểu diễn bởi các điểm được gọi là các đỉnh (vertices), và các link mà kết nối các đỉnh với nhau được gọi là các cạnh (edges).

Bài 27 - Thuật toán sắp xếp nhanh trong cấu trúc dữ liệu & giải thuật

Giải thuật sắp xếp nhanh (Quick Sort) là một giải thuật hiệu quả cao và dựa trên việc chia mảng dữa liệu thành các mảng nhỏ hơn.

Bài 26 - Thuật toán shell sort trong cấu trúc dữ liệu & giải thuật

Shell sort là một thuật toán sắp xếp hiệu quả cao và dựa trên thuật toán sắp xếp chèn. Thuật toán này tránh các dịch chuyển lớn như trong trường hợp sắp xếp chèn, nếu giá trị nhỏ hơn nằm ở bên phải và phải được chuyển sang bên trái.

Bài 25 - Thuật toán sắp xếp trộn trong cấu trúc dữ liệu & giải thuật

Sắp xếp trộn (Merge Sort) là một giải thuật sắp xếp dựa trên giải thuật Chia để trị (Divide and Conquer). Với độ phức tạp thời gian trường hợp xấu nhất là Ο(n log n) thì đây là một trong các giải thuật đáng được quan tâm nhất.

Bài 24 - Thuật toán sắp xếp chọn trong cấu trúc dữ liệu & giải thuật

Sắp xếp chọn là một thuật toán sắp xếp đơn giản. Thuật toán sắp xếp này là một thuật toán dựa trên so sánh tại chỗ, trong đó danh sách được chia thành hai phần, phần được sắp xếp ở đầu bên trái và phần chưa được sắp xếp ở đầu bên phải. Ban đầu, phần được sắp xếp trống và phần chưa sắp xếp là toàn bộ danh sách.

Bài 23 - Thuật toán sắp xếp chèn trong cấu trúc dữ liệu & giải thuật

Sắp xếp chèn là một giải thuật sắp xếp dựa trên so sánh in-place. Ở đây, một danh sách con luôn luôn được duy trì dưới dạng đã qua sắp xếp. Sắp xếp chèn là chèn thêm một phần tử vào danh sách con đã qua sắp xếp. Phần tử được chèn vào vị trí thích hợp sao cho vẫn đảm bảo rằng danh sách con đó vẫn sắp theo thứ tự.

Bài 22 - Thuật toán sắp xếp nổi bọt trong cấu trúc dữ liệu & giải thuật

Sắp xếp nổi bọt là một thuật toán sắp xếp đơn giản. Thuật toán sắp xếp này là thuật toán dựa trên so sánh, trong đó mỗi cặp yếu tố liền kề được so sánh và các yếu tố được hoán đổi nếu chúng không theo thứ tự.

Bài 21 - Kỹ thuật sắp xếp trong cấu trúc dữ liệu & giải thuật

Sắp xếp là sắp xếp dữ liệu theo một định dạng cụ thể như theo thứ tự anphabet tăng/giảm dần, theo thứ tự số tăng/giảm dần. Trong khoa học máy tính, giải thuật sắp xếp xác định cách để sắp xếp dữ liệu theo một thứ tự nào đó.

Bài 20 - Hash Table trong cấu trúc dữ liệu & giải thuật

Cấu trúc dữ liệu Hash Table là một cấu trúc dữ liệu lưu giữ dữ liệu theo cách thức liên hợp. Trong Hash Table, dữ liệu được lưu giữ trong định dạng mảng, trong đó các giá trị dữ liệu có giá trị chỉ mục riêng. Việc truy cập dữ liệu trở nên nhanh hơn nếu chúng ta biết chỉ mục của dữ liệu cần tìm.

Bài 19 - Tìm kiếm nội suy trong cấu trúc dữ liệu & giải thuật

Tìm kiếm nội suy (Interpolation Search) là biến thể cải tiến của tìm kiếm nhị phân (Binary Search). Để giải thuật tìm kiếm này làm việc chính xác thì tập dữ liệu phải được sắp xếp.

Bài 18 - Tìm kiếm nhị phân trong cấu trúc dữ liệu & giải thuật

Tìm kiếm nhị phân (Binary Search) là một giải thuật tìm kiếm nhanh với độ phức tạp thời gian chạy là Ο(log n). Giải thuật tìm kiếm nhị phân làm việc dựa trên nguyên tắc chia để trị (Divide  and Conquer).

Bài 17 - Tìm kiếm tuyến tính trong cấu trúc dữ liệu & giải thuật

Tìm kiếm tuyến tính (Linear Search) là một giải thuật tìm kiếm rất cơ bản. Trong kiểu tìm kiếm này, một hoạt động tìm kiếm liên tiếp được diễn ra qua tất cả từng phần tử.

Bài 16 - Hàng đợi trong cấu trúc dữ liệu & giải thuật

Hàng đợi (Queue) là một cấu trúc dữ liệu trừu tượng. Không giống như ngăn xếp, một hàng đợi được mở ở cả hai đầu của nó. Một đầu luôn được sử dụng để chèn dữ liệu (enqueue) và đầu kia được sử dụng để xóa dữ liệu (dequeue).

Bài 15 - Phân tích biểu thức trong cấu trúc dữ liệu & giải thuật

Cách viết biểu thức số học được gọi là ký hiệu . Một biểu thức số học có thể được viết bằng ba ký hiệu khác nhau nhưng tương đương, nghĩa là không thay đổi bản chất hoặc đầu ra của một biểu thức.

Bài 14 - Ngăn xếp trong cấu trúc dữ liệu & giải thuật

Ngăn xếp là cấu trúc dữ liệu trừu tượng (ADT), thường được sử dụng trong hầu hết các ngôn ngữ lập trình. Nó được đặt tên là stack vì nó hoạt động giống như một ngăn xếp trong thế giới thực

Bài 13 - Danh sách liên kết vòng trong cấu trúc dữ liệu & giải thuật

Danh sách liên kết vòng là một biến thể của danh sách được liên kết trong đó phần tử đầu tiên trỏ đến phần tử cuối cùng và phần tử cuối cùng trỏ đến phần tử đầu tiên. Cả Danh sách liên kết đơn và Danh sách liên kết đôi có thể được tạo thành một danh sách liên kết vòng.

Bài 12 - Danh sách liên kết đôi trong cấu trúc dữ liệu & giải thuật

Danh sách liên kết đôi (Doubly Linked List) là một biến thể của danh sách liên kết (Linked List), trong đó hoạt động duyệt qua các nút có thể được thực hiện theo hai chiều: về trước và về sau một cách dễ dàng khi so sánh với Danh sách liên kết đơn.

Bài 11 - Cơ bản về danh sách liên kết trong cấu trúc dữ liệu giải thuật

Danh sách liên kết là một chuỗi các cấu trúc dữ liệu, được kết nối với nhau thông qua các liên kết.

Bài 10 - Mảng trong cấu trúc dữ liệu & giải thuật

Mảng (Array) là một trong các cấu trúc dữ liệu quan trọng nhất. Nó có thể lưu trữ một số phần tử cố định và các phần tử này nên có cùng kiểu. Hầu hết các cấu trúc dữ liệu sử dụng các mảng để thực hiện các thuật toán của chúng

Bài 9 - Khái niệm cơ bản về cấu trúc dữ liệu

Chương này giải thích các thuật ngữ cơ bản liên quan đến cấu trúc dữ liệu.

Bài 8 - Giải thuật quy hoạch động trong cấu trúc dữ liệu & giải thuật

Giải thuật Quy hoạch động (Dynamic Programming) giống như giải thuật chia để trị (Divide and Conquer) trong việc chia nhỏ bài toán thành các bài toán con nhỏ hơn và sau đó thành các bài toán con nhỏ hơn nữa có thể.

Bài 7 - Thuật toán chia để trị trong cấu trúc dữ liệu & giải thuật

Giải thuật chia để trị (Divide and Conquer) là một phương pháp quan trọng trong việc thiết kế các giải thuật. Ý tưởng của phương pháp này khá đơn giản và rất dễ hiểu: Khi cần giải quyết một bài toán, ta sẽ tiến hành chia bài toán đó thành các bài toán con nhỏ hơn. Tiếp tục chia cho đến khi các bài toán nhỏ này không thể chia thêm nữa, khi đó ta sẽ giải quyết các bài toán nhỏ nhất này và cuối cùng kết hợp giải pháp của tất cả các bài toán nhỏ để tìm ra giải pháp của bài toán ban đầu.

Bài 6 - Thuật toán tham lam trong cấu trúc dữ liệu & giải thuật

Một thuật toán được thiết kế để đạt được giải pháp tối ưu cho một vấn đề nhất định. Theo cách tiếp cận thuật toán tham lam, các quyết định được đưa ra từ miền giải pháp đã cho. Vì tham lam, giải pháp gần nhất có vẻ cung cấp giải pháp tối ưu được chọn. Các thuật toán tham lam cố gắng tìm một giải pháp tối ưu cục bộ, cuối cùng có thể dẫn đến các giải pháp tối ưu hóa toàn cầu. Tuy nhiên, nhìn chung các thuật toán tham lam không cung cấp các giải pháp tối ưu hóa toàn cầu.

Bài 5 - Phân tích tiệm cận trong cấu trúc dữ liệu & giải thuật

Phân tích tiệm cận của một thuật toán là khái niệm giúp chúng ta ước lượng được thời gian chạy của một thuật toán. Sử dụng phân tích tiệm cận, chúng tôi rất có thể kết luận trường hợp tốt nhất, trường hợp trung bình và trường hợp xấu nhất của một thuật toán.

Bài 4 - Khái niệm cơ bản về thuật toán trong cấu trúc dữ liệu & giải thuật

Thuật toán là một quy trình từng bước, xác định một tập các hướng dẫn sẽ được thực hiện theo một thứ tự nhất định để có được đầu ra mong muốn. Các thuật toán thường được tạo ra độc lập với các ngôn ngữ cơ bản, tức là một thuật toán có thể được thực hiện bằng nhiều ngôn ngữ lập trình.

Bài 2 - Tổng quan về cấu trúc dữ liệu & thuật toán

Cấu trúc dữ liệu là một cách có hệ thống để tổ chức dữ liệu để sử dụng nó một cách hiệu quả. Các thuật ngữ sau đây là các điều khoản nền tảng của một cấu trúc dữ liệu.

Bài 1 - Giới thiệu về cấu trúc dữ liệu và thuật toán

Cấu trúc dữ liệu là cách lưu trữ, tổ chức dữ liệu có thứ tự, có hệ thống để dữ liệu có thể được sử dụng một cách hiệu quả. Hầu hết mọi ứng dụng doanh nghiệp đều sử dụng các loại cấu trúc dữ liệu khác nhau theo một hoặc cách khác. Hướng dẫn này sẽ cung cấp cho bạn một sự hiểu biết lớn về cấu trúc dữ liệu cần thiết để hiểu được sự phức tạp của các ứng dụng cấp doanh nghiệp và nhu cầu của các thuật toán và cấu trúc dữ liệu.

10 Thứ lập trình viên cần phải học

Một sinh viên tốt nghiệp khoa học máy tính có thể làm gì để chuẩn bị cho sự nghiệp phát triển và lập trình phần mềm? Bạn đã lập trình được một thời gian và muốn học lập trình thì bạn có thể nghĩ về điều gì làm nên một lập trình viên giỏi. Bài viết này sẽ chia sẻ 10 điều mà tôi tin rằng mọi lập trình viên nên biết.