- vừa được xem lúc

Chương 1: Introduction - Analysis of Algorithrms

0 0 26

Người đăng: Đặng An

Theo Viblo Asia

Trong bài viết này mình sẽ nói về cách chúng ta sẽ sử dụng để phân tích và so sánh các loại thuật toán khác nhau

1.4 Why the Analysis of Algorithms?

Giả sử: Để đi từ Hà Nội đến Sài Gòn, có thể có nhiều cách để thực hiện điều này: bằng máy bay, bằng xe buýt, bằng tàu hỏa và cả bằng xe đạp.
Tùy theo sự sẵn có và tiện lợi mà chúng ta chọn loại phù hợp với mình.
Tương tự, trong khoa học máy tính, nhiều thuật toán có sẵn để giải quyết cùng một vấn đề (ví dụ: một bài toán sắp xếp có nhiều thuật toán, như sắp xếp chèn, sắp xếp lựa chọn, sắp xếp nhanh và nhiều thuật toán khác).
Phân tích thuật toán giúp chúng ta xác định thuật toán nào hiệu quả nhất về thời gian và không gian đã tiêu thụ.

1.5 Goal of the Analysis of Algorithms

Mục tiêu của việc phân tích các thuật toán là so sánh các thuật toán (hoặc giải pháp) chủ yếu về thời gian chạy mà còn về các yếu tố khác (ví dụ: bộ nhớ, developer effort, v.v.)

1.6 What is Running Time Analysis?

Đây là quá trình xác định thời gian xử lý tăng lên như thế nào khi quy mô của vấn đề (kích thước input) tăng lên.
Kích thước đầu vào là số phần tử trong input và tùy thuộc vào loại vấn đề, đầu vào có thể có nhiều kiểu khác nhau. Sau đây là các loại đầu vào phổ biến:

  • Kích thước của một array
  • Bậc của một đa thức
  • Số phần tử trong 1 ma trận
  • Số bit trong biểu diễn nhị phân của input
  • Các đỉnh và cạnh trong môt graph(đồ thị)

1.7 How to Compare Algorithms

Để so sánh một thuật toán, chúng ta sẽ sử dụng một số thước đo khách quan:\

  • Execution times? Không phải là một biện pháp tốt vì thời gian thực hiện là khác nhau trên mỗi máy tính(phụ thuộc phần cứng: cpu, dây cáp, ...).
  • Number of statements executed?(Số câu lệnh được thực thi): Không phải là một thước đo tốt, vì số lượng câu lệnh thay đổi theo ngôn ngữ lập trình cũng như phong cách của từng lập trình viên.


=> Ideal solution?: Giả sử rằng chúng ta thể hiện thời gian chạy của một thuật toán nhất định dưới dạng một hàm của kích thước đầu vào n (tức là f (n)) và so sánh các hàm khác nhau này tương ứng với việc chạy lần. Loại so sánh này không phụ thuộc vào thời gian máy, kiểu lập trình, v.v.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Đôi chút về cấu trúc dữ liệu và thuật toán

Theo anh Phạm Huy Hoàng (toidicodedao) đã viết trong blog của mình là kiến thức trong ngành IT có 2 loại, một là càng để lâu thì càng cũ, lạc hậu và trở lên vô dụng. Hai là càng để lâu thì càng có giá trị thậm chí ngày càng có giá.

0 0 42

- vừa được xem lúc

Cấu trúc dữ liệu Merkle Tree

Cây Merkle là một cây nhị phân có thứ tự được xây dựng từ một dãy các đối tượng dữ liệu (d1, d2,...,dn) sử dụng hàm băm h. Các “lá” của cây là các giá trị băm h(di) đối với 1 ≤ i ≤ n.

0 0 63

- vừa được xem lúc

Cách xây dựng cấu trúc dữ liệu Stack và Queue.

Mở đầu. Hello các bạn, hôm nay mình sẽ chia sẻ với các bạn cách để có thể tự xây dựng 2 loại cấu trúc dữ liệu stack(ngăn xếp) và queue(hàng đợi) sử dụng mảng trong C++;.

0 0 43

- vừa được xem lúc

Tối ưu ứng dụng với cấu trúc dữ liệu cơ bản

Ở Việt Nam có một nghịch lý ai cũng biết: hầu hết sinh viên ngành CNTT đều đã học cấu trúc dữ liệu và giải thuật, thuộc các môn bắt buộc. Thế nhưng lại rất hiếm khi ứng dụng vào công việc hoặc bị loại

0 0 48

- vừa được xem lúc

Chương 1: Introduction - Các khái niệm cơ bản

Lời nói đầu. Trước khi có máy tính, đã có các thuật toán.

0 0 24

- vừa được xem lúc

Chương 1: Introduction - 3.Độ phức tạp thuật toán

Ở bài viết trước chúng ta đã có idea solution cho việc phân tích và so sánh các thuật toán: "Thể hiện thời gian chạy của một thuật toán nhất định dưới dạng một hàm của kích thước đầu vào n (tức là f (

0 0 20