1. Trang chủ
  2. » Giáo án - Bài giảng

Phân tích và đánh giá thuật toán thuật toán tìm kiếm

18 382 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 18
Dung lượng 111,75 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

 Ứng dụng vào bài toán tìm kiếm phần tử lớn thứ nhì của một mảng số nguyên cho trước  Phân tích các tình huống phức tạp trong quá trình giải quyết bài toán.. Đầu vào và đầu ra của thuậ

Trang 1

KHOA CÔNG NGHỆ THÔNG TIN

Bài tập lớn PHÂN TÍCH ĐÁNH GIÁ THUẬT TOÁN

ĐỀ SỐ 26: Thuật toán tìm kiếm Cho mảng X có n số nguyên Hãy xây dựng thuật

toán tìm số lớn thứ hai trong mảng X Đánh giá độ phức tạp của nó trong trường

hợp xấu nhất.

Giảng viên hướng dẫn : PGS TS Đào Thanh Tĩnh Học viên thực hiện : Dư Quang Trung

Hà Nội, 05/2014

Trang 2

Mục lục

1 Đặt vấn đề 2

2 Tổng quan lý thuyết bài toán tìm kiếm và các thuật toán tìm kiếm 2

2.1 Tìm kiếm trên mảng (danh sách) 3

2.2 Tìm kiếm trên cây 3

2.3 Tìm kiếm trên đồ thị 4

3 Bài toán: Cho mảng X có n số nguyên Hãy xây dựng thuật toán tìm số lớn thứ hai trong mảng X Đánh giá độ phức tạp của nó trong trường hợp xấu nhất 4

3.1 Thuật toán mô phỏng dữ liệu đầu vào 5

3.2 Các thuật toán tìm kiếm số lớn thứ hai trong mảng 8

3.2.1 Tìm kiếm tuyến tính 8

3.2.2 Sắp xếp mảng ngẫu nhiên và tìm kiếm duyệt từ một phía có điều kiện 10

3.3 Các tình huống phức tạp 12

4 Thử nghiệm và phân tích kết quả 13

4.1 Quy trình thử nghiệm 13

4.2 Kết quả và phân tích kết quả 14

5 Kết luận 17

Trang 3

1 Đặt vấn đề.

Bài toán tìm kiếm là một trong những bài toán phổ biến và có ý nghĩa quan trọng trong cả

cơ sở lý thuyết lẫn ứng dụng thực tiễn của công nghệ thông tin và truyền thông Quá trình phát triển của công nghệ khiến ngày càng có nhiều người tiếp cận và sử dụng các thiết bị, giải pháp công nghệ thông tin Đi cùng đó là một khối lượng dữ liệu khổng lồ được lưu trữ, sinh ra hàng ngày Việc quản lý các cơ sở dữ liệu lớn với các tác vụ cơ bản như: sắp xếp, truy xuất dữ liệu trở nên hết sức phức tạp Nhiệm vụ nghiên cứu và triển khai các giải thuật tìm kiếm dữ liệu một cách hiệu quả được đặt ra để tối ưu hóa hệ thống về nhiều mặt: chi phí triển khai, duy trì, năng lượng tiêu thụ, độ tin cậy, an toàn… Đề tài nhỏ dưới đây tập trung vào nghiên cứu trình bày các vấn đề sau

 Cơ sở lý thuyết về các bài toán tìm kiếm và giải thuật tìm kiếm

 Ứng dụng vào bài toán tìm kiếm phần tử lớn thứ nhì của một mảng số nguyên cho trước

 Phân tích các tình huống phức tạp trong quá trình giải quyết bài toán

2 Tổng quan lý thuyết bài toán tìm kiếm và các thuật toán tìm kiếm.

Thuật toán tìm kiếm nhận đầu vào (input) là một mô hình dữ liệu và một yêu cầu đề bài, cho ra kết quả đầu ra (output) sau một số bước tính toán hữu hạn, xác định Đầu vào và đầu ra của thuật toán tìm kiếm như sau:

 Đầu vào (input): một cơ sở dữ liệu được lưu trữ dưới dạng một cấu trúc dữ liệu như mảng, danh sách liên kết, cây, đồ thị… và một yêu cầu tìm kiếm, thường là một phần tử trong cơ sở dữ liệu thỏa mãn một tính chất mong muốn nào đó

 Đầu ra (output): phần tử có tính chất mong muốn theo yêu cầu tìm kiếm đầu vào Đầu ra của thuật toán tìm kiếm phải đảm bảo: phần tử đầu ra phải là phần tử thỏa mãn các tính chất mong muốn theo yêu cầu tìm kiếm, đồng thời không bỏ sót bất

cứ phần tử nào cũng thỏa mãn các tính chất mong muốn theo yêu cầu tìm kiếm

Do dữ liệu đầu vào của một thuật toán tìm kiếm được lưu trữ dưới nhiều dạng cấu trúc khác nhau, các thuật toán tìm kiếm có thể được phân loại dựa trên mô hình dữ liệu đầu vào của chúng Có ba mô hình dữ liệu đầu vào cơ bản cho một thuật toán tìm kiếm: mảng (danh sách), cây và đồ thị

Trang 4

2.1 Tìm kiếm trên mảng (danh sách)

Thuật toán tìm kiếm trên mảng là loại giải thuật tìm kiếm cơ bản nhất Thuật toán này tìm kiếm trong một tập hợp một phần tử chứa một khóa nào đó Thuật toán tìm kiếm trên mảng đơn giản nhất là tìm kiếm tuyến tính Thuật toán tìm kiếm tuyến tính kiểm tra từng phần tử trong danh sách theo thứ tự của danh sách đó Thuật toán này có độ phức tạp tính

toánO(n), trong đó n là số phần tử trong danh sách Thuật toán tìm kiếm tuyến tính trên

danh sách có độ phức tạp tính toán lớnnhưng có thể sử dụng trực tiếp cho một danh sách bất kỳ mà không cần tiền xử lý Tìm kiếm nhị phân là một thuật toán cao cấp hơn với độ

phức tạp tính toánO(log n) Đối với các danh sách lớn, thuật toán này tốt hơn hẳn tìm

kiếm tuyến tính, nhưng nó đòi hỏi danh sách phải được sắp xếp từ trước và đòi hỏi khả năng truy nhập ngẫu nhiên vào bất cứ phần tử nào nằm trong mảng Một thuật toán tìm kiếm trên mảng hiệu quả khác là thuật toán tìm kiếm nội suy Độ phức tạp của thuật toán

tìm kiếm nội suy với mảng n phần tử làO(n) Tuy nhiên, trong trường hợp các phần tử

của mảng là số ngẫu nhiên phân bố đều (trường hợp phổ biến nhất), độ phức tạp của thuật

toán có thể đạt chỉ còn O(loglogN).

Bảng băm (hash table) cũng được dùng cho tìm kiếm trên danh sách Thuật toán này đòi

hỏi thời gian hằng số trong trường hợp trung bình, nhưng lại cần nhiều không gian bộ

nhớ và độ phức tạp thuật toánO(n) cho trường hợp xấu nhất Một phương pháp tìm kiếm

khác dựa trên các cấu trúc dữ liệu chuyên biệt sử dụng cây tìm kiếm nhị phân cân bằng

và độ phức tạp thuật toánO(log n); các giải thuật loại này có thể coi là mở rộng của thuật

toán tìm kiếm nhị phân để cho phép chèn và xóa nhanh

Đa số các giải thuật tìm kiếm trên mảng như tìm kiếm tuyến tính, tìm kiếm nhị phân, và cây tìm kiếm nhị phân cân bằng đều có thể được mở rộng để tìm tất cả các giá trị nhỏ hơn hoặc lớn hơn một khóa cho trước

2.2 Tìm kiếm trên cây.

Cây là một cấu trúc dữ liệu phổ biến và thường dùng trong tin học, nhất là trong việc xây dựng các mô hình dữ liệu và cấu trúc dữ liệu Cây là khái niệm quan trọng trong lý thuyết

đồ thị, cấu trúc dữ liệu và giải thuật Cây là một đồ thị mà trong đó hai đỉnh bất kì đều được nối với nhau bằng đúng một đường đi, hay nói cách khác đồ thị liên thông bất kỳ không có chu trình là một cây Cấu trúc cây được sử dụng rộng rãi trong các cấu trúc dữ

Trang 5

liệu của ngành khoa học máy tính như cây nhị phân, đống, trie, cây Huffman cho nén dữ liệu, v.v

Tìm kiếm trên cây là một trong những thuật toán tìm kiếm phổ biến Các thuật toán này tìm kiếm trên các cây gồm các nút, cây này có thể là cây tường minh hoặc được xây dựng dần trong quá trình tìm kiếm Nguyên lý cơ bản là: một nút được lấy ra từ một cấu trúc

dữ liệu, các nút con của nó được xem xét và bổ sung vào cấu trúc dữ liệu đó Bằng cách thao tác trên cấu trúc dữ liệu này, cây tìm kiếm được duyệt theo các thứ tự khác nhau, chẳng hạn theo từng mức (tìm kiếm theo chiều rộng) hoặc đi tới một nút lá trước rồi quay lui (tìm kiếm theo chiều sâu) Các ví dụ khác về tìm kiếm trên cây bao gồm: tìm kiếm lặp sâu dần, tìm kiếm chiều sâu giới hạn, tìm kiếm hai chiều và tìm kiếm chi phí đều

2.3 Tìm kiếm trên đồ thị.

Thuật toán tìm kiếm trên đồ thị là trường hợp mở rộng tổng quát của thuật toán tìm kiếm trên cây Đồ thị là một tập các đỉnh (hoặc nút) nối với nhau bởi các cạnh Cạnh có thể có hướng hoặc vô hướng Đồ thị thường được vẽ dưới dạng một tập các điểm (các đỉnh nối với nhau bằng các đoạn thẳng (các cạnh).Đồ thị biểu diễn được rất nhiều cấu trúc, nhiều bài toán thực tế có thể được biểu diễn bằng đồ thị Cấu trúc đồ thị có thể được mở rộng bằng cách gán trọng số cho mỗi cạnh Có thể sử dụng đồ thị có trọng số để biểu diễn nhiều khái niệm khác nhau Loại đồ thị này được gọi là đồ thị có hướng Một đồ thị có hướng với các cạnh có trọng số được gọi là một lưới

Trong lý thuyết đồ thị các bài toán tìm kiếm phổ biến nhất có thể kể đến như bài toán tìm cây khung nhỏ nhất, bài toán tìm đường đi ngắn nhất giữa hai đỉnh Các thuật toán phổ biến được sử dụng như thuật toán Prim, thuật toán Kruskal tìm cây khung nhỏ nhất, thuật toán Dijktra tìm đường đi ngắn nhất

3 Bài toán: Cho mảng X có n số nguyên Hãy xây dựng thuật toán tìm số lớn thứ hai trong mảng X Đánh giá độ phức tạp của nó trong trường hợp xấu nhất.

Để có thể triển khai được thuật toán tìm số lớn thứ hai trong mảng, cần phải có dữ liệu đầu vào Dữ liệu đầu vào có thể là dữ liệu thực tế Trong bài tập lớn này, dữ liệu đầu vào được sinh ra tự động nhờ các thuật toán mô phỏng dữ liệu đầu vào bằng máy tính

Trang 6

3.1 Thuật toán mô phỏng dữ liệu đầu vào

Dữ liệu đầu vào của bài toán là một mảng có n số nguyên Mảng số này có thể có các trường hợp sau:

 Mảng số có trật tự

 Mảng tăng/không giảm

 Mảng giảm/ không tăng

 Mảng số ngẫu nhiên

 Số ngẫu nhiên có xác suất xuất hiện tuân theo một hàm phân bố nào đó Các thuật toán để mô phỏng dữ liệu đầu vào như sau:

a Mảng có trật tự

Ý tưởng thuật toán: tạo một số ngẫu nhiên làm phần tử đầu tiên của dãy Sinh ra các số

tiếp theo bằng cách cộng thêm vào số ngẫu nhiên ban đầu một giá trị ngẫu nhiên

Đầu vào: Số phần tử n của dãy cần tạo

Đầu ra: Dãy tăng/không giảm có n phần tử.

Trình bày thuật toán bằng giả mã lệnh:

void generateIncreasingArray()

{

int a[1000];// ví dụ mảng có 1000 phần tử;

for (int i = 0;i<1000;i++)

if (i==0)

a[i] = (int)(5*(float)rand()/(float)(RAND_MAX);

else

a[i] = a[i-1]+ (int)(5*(float)rand()/(float) (RAND_MAX);

}

b Mảng ngẫu nhiên.

Trong trường hợp tổng quát, hay gặp nhất trong thực tế, mảng X chứa các số nguyên ngẫu nhiên Giá trị của các số nguyên ngẫu nhiên thường thoả mãn hai tiêu chí:

 Nằm trong một khoảng giá trị nhất định Tuy vẫn có trường hợp số ngẫu nhiên tổng quát nằm trong khoảng [-∞,+∞], trường hợp phổ biến hơn cả là số ngẫu nhiên nằm trong một khoảng giá trị nào đấy, ví dụ: [0,1000], [-100,+100]

 Có xác suất xuất hiện một giá trị tuân theo một hàm phân bố xác suất

Trang 7

Ý tưởng thuật toán: Các bộ sinh số ngẫu nhiên trong máy tính thường là bộ sinh số ngẫu

nhiên có phân bố đều Thuật toán sẽ sử dụng bộ sinh số ngẫu nhiên của máy tính để sinh

số ngẫu nhiên có phân bố đều Sau đó áp dụng các phép biến đổi, các công thức toán học, các phép lấy mẫu…để biến đổi số ngẫu nhiên có phân bố đều thành số ngẫu nhiên có phân bố theo một hàm phân bố toán học mong muốn (phân bố Gauss, phân bố Poisson )

Đầu vào:

Số phần tử n của dãy ngẫu nhiên.

 Các giá trị đặc trưng của từng hàm phân bố (ví dụ giá trị trung bình và phương sai của phân bố Gauss, giá trị trung bình của phân bố Poisson…) Để các dãy số đầu vào cho thuật toán tìm kiếm có tính thống nhất, các tham số của hàm phân bố sẽ được lựa chọn sao cho các số ngẫu nhiên sinh ra có giá trị tập trung trong khoảng [0,1000] Tham số được lựa chọn tương ứng cho các hàm phân bố là:

 Phân bố đều: mean = 500;

 Phân bố Gauss: mean = 500, standard deviation = 300

 Phân bố Poisson: mean = 500;

 Phân bố Exponential: rate = 500;

Đầu ra: Dãy ngẫu nhiên có n phần tử tuân theo phân bố xác suất.

Trình bày thuật toán bằng giả mã lệnh:

//Tạo số ngẫu nhiên theo phân bố chuẩn

int Uniform(float mean)

{

int R;

R = (int)((float)rand()/(float)(RAND_MAX));

return (int)(2*mean*R);

}

//Tạo số ngẫu nhiên theo phân bố Exponential

int Exponential(float mean)

{

int R;

R = (int)((float)rand()/(float)(RAND_MAX));

return (int)(-mean*log(R));

}

//Tạo số ngẫu nhiên theo phân bố Poisson

int Poisson(float mean)

{

float R;

float sum = 0;

Trang 8

int i;

i=-1;

float z;

while(sum <=mean)

{

R = (float)rand()/(float)(RAND_MAX);

z = -log(R);

sum+= z;

i++;

}

return i;

}

//Tạo số ngẫu nhiên theo phân bố chuẩn/Gauss

int Normal(float mean, float stdev)

{

int R1;

R1 = (int)((float)rand()/(float)(RAND_MAX));

int R2;

R2 = (int)((float)rand()/(float)(RAND_MAX));

return (int)(mean + stdev*cos(2*3.14*R1)*sqrt(-log(R2)));

}

Đồ thị hàm phân bố mật độ xác suất của mảng số nguyên ngẫu nhiên sinh ra từ các thuật toán trên được cho trong hình 1 (với dãy ngẫu nhiên 100000 số).

0

50

100

150

0

100

200

300

400

500

600

Trang 9

0 200 400 600 800 1000 1200

0

50

100

150

200

250

0

500

1000

1500

2000

Hình 1 Đồ thị phân bố mật độ xác suất xuất hiện số ngẫu nhiên sinh theo các hàm phân

bố đều, phân bố exponential, phân bố gauss, phân bố poisson (từ trên xuống dưới).

3.2 Các thuật toán tìm kiếm số lớn thứ hai trong mảng.

3.2.1 Tìm kiếm tuyến tính

Tìm kiếm tuyến tính (hay tìm kiếm tuần tự) là thuật toán tìm kiếm phổ biến nhất và gần như là thuật toán tìm kiếm bắt buộc khi thực hiện việc tìm kiếm trên các dãy ngẫu nhiên không có trật tự, hoặc các dãy không có khả năng truy cập vào phần tử bất kì Thuật toán tìm kiếm tuyến tính không yêu cầu mảng (dãy) dữ liệu đầu vào phải được sắp xếp hoặc tiền xử lý

Ý tưởng thuật toán.

Lần lượt so sánh phần tử cần tìm x với phần tử thứ nhất, thứ hai, thứ ba,… của dãy số cho

đến phần tử cuối cùng của dãy Lưu lại địa chỉ (vị trí) các phần tử thỏa mãn (nếu tìm được)

Đầu vào:

x: Phần tử cần tìm (phần tử lớn thứ hai)

n: Số phần tử của mảng (dãy) đầu vào.

Trang 10

A[n]: Mảng chứa các phần tử.

Đầu ra :

 Phần tử lớn thứ hai trong dãy (nếu có)

Chi tiết thuật giải (giả mã lệnh)

void sequential_search(int n, array A)

{

int max = A[0];

int second_max = max;

{

{

max = A[i];

} else if ((max > A[i])&&(second_max < A[i])) 1 phép so sánh

}

printf(“Second max = %d”,second_max);

}

Độ phức tạp tính toán:

 Cần tiến hành n bước duyệt Với mỗi bước duyệt cần 1 phép so sánh trong trường hợp tốt nhất và 3 phép so sánh liên tiếp trong trường hợp xấu nhất Khi phép so sánh trả về đúng, cần thực hiện 1 phép gán Vậy trong trường hợp xấu, với mỗi lần duyệt cần thực hiện 4 phép toán gồm 3 phép so sánh và 1 phép gán Tổng số phép toán trong trường hợp xấu nhất là 4n phép toán

 Do duyệt tuần tự, số lượng các phần tử thỏa mãn yêu cầu tìm kiếm có thể là bất kì,

do vậy trong hầu hết mọi trường hợp đều cần duyệt đến cuối danh sách, nên độ phức tạp tính toán trung bình phần lớn bằng độ phức tạp tính toán trong trường hợp xấu nhất

Độ phức tạp tính toán O(n).

3.2.2 Sắp xếp mảng ngẫu nhiên và tìm kiếm duyệt từ một phía có điều kiện.

Thuật toán tìm kiếm số lớn thứ hai theo chỉ số dựa trên việc sử dụng các thuật toán sắp

Trang 11

bao gồm hai bước: sắp xếp mảng ngẫu nhiên đã cho và tìm kiếm dựa trên chỉ số của phần

tử lớn thứ 2

Ý tưởng thuật toán.

Đầu vào là mảng (dãy) Acó n phần tử đã sắp xếp có trật tự Nếu dãy A là dãy tăng, phần

tử lớn thứ hai là phần tử A[n-2], nếu dãy A là dãy giảm, phần tử lớn thứ hai là phần tử A[1] Nếu dãy A là dãy không tăng hoặc không giảm, tức là sẽ có thể có các phần tử bằng nhau, thì cần tiến hành duyệt dãy A để tìm ra tất cả các vị trí của phần tử lớn thứ hai

Đầu vào:

x: Giá trị cần tìm.

n: Số phần tử của mảng.

A[n]: Mảng chứa các phần tử đã được sắp xếp có trật tự (tăng hoặc không giảm –

tương tự với trường hợp mảng giảm hoặc không tăng)

Đầu ra:

 Vị trí chứa phần tử thỏa mãn điều kiện cần tìm (nếu có)

Chi tiết thuật giải (giả mã lệnh)

//Truong hop day tang

void index_search(n, array A) //Array A la day da sap xep tang

{

printf(“Second max = %d”,A[n-2]); 1 phép lấy dữ liệu }

//Truong hop day khong giam

void index_search(n, array A) //Array A la day da sap xep khong giam {

int max = A[n-1];

int second_max;

while ((max == A[n-1])&&(n>1))

second_max = A[n-1];

printf(“Second_max = %d”,second_max);

}

Độ phức tạp tính toán:

 Với dãy tăng, có thể đơn giản xác định ngay phần tử lớn thứ hai là phần tử A[n-2]

Độ phức tạp tính toán là O(1).

Trang 12

 Với dãy không giảm, do có thể có nhiều hơn một số lớn nhất, nên để tìm phần tử lớn thứ hai cần duyệt từ cuối dãy để tìm ra phần tử lớn thứ hai Sẽ có tối đa n lần duyệt (ứng với mảng n phần tử giống hệt nhau) Độ phức tạp tính toán trong

trường hợp xấu nhất là O(n).

Độ phức tạp tính toán vào thời gian tìm kiếm của thuật toán tìm kiếm nhị phân nhỏ hơn nhiều so với tìm kiếm tuần tự Tuy nhiên, để đạt được độ phức tạp và thời gian tìm kiếm này, thuật toán tím kiếm nhị phân chỉ làm việc trên các mảng đã được sắp xếp Do vậy độ phức tạp tính toán tổng quát của thuật toán tìm kiếm nhị phân còn gồm cả độ phức tạp tính toán của thuật toán sắp xếp được lựa chọn để sắp xếp mảng dữ liệu đầu vào Các thuật toán sắp xếp phổ biến được chỉ ra trong bảng 1

Thuật toán sắp xếp

Độ phức tạp tính toán trường hợp tốt

nhất

Độ phức tạp tính toán trung bình

Độ phức tạp tính toán trường hợp xấu

nhất

Sắp xếp chèn O(n 2 ) phép so sánh, đổi chỗ O(n) phép so sánh, O(1) phép đổi chỗ O(n 2 ) phép so sánh, đổi chỗ

Bảng 1 Độ phức tạp tính toán các thuật toán sắp xếp

Quá trình sắp xếp dữ liệu có thể được thực hiện ngay khi xây dựng dữ liệu hoặc khi thêm/ bớt dữ liệu Quá trình này có thể tiến hành trước khi có yêu cầu tìm kiếm Vì vậy trong một số trường hợp dữ liệu đã hoàn thành sắp xếp vào một khoảng thời gian “rảnh” trước khi có yêu cầu tìm kiếm, và thời gian sắp xếp không ảnh hưởng vào thời giam tìm kiếm tổng cộng Do vậy, khi lựa chọn thuật toán tím kiếm tuyến tính hay tìm kiếm nhị phân, cần xác định rõ trường hợp áp dụng của bài toán, thời gian “rảnh” của bài toán để xác định đúng thuật toán cho thời gian tìm kiếm nhanh hơn

Ngày đăng: 03/10/2017, 00:45

HÌNH ẢNH LIÊN QUAN

Bảng 1. Độ phức tạp tính toán các thuật toán sắp xếp - Phân tích và đánh giá thuật toán thuật toán tìm kiếm
Bảng 1. Độ phức tạp tính toán các thuật toán sắp xếp (Trang 11)
Bảng 2. Các hình huống phức tạp với thuật toán tìm kiếm trên mảng - Phân tích và đánh giá thuật toán thuật toán tìm kiếm
Bảng 2. Các hình huống phức tạp với thuật toán tìm kiếm trên mảng (Trang 12)
Bảng 3. Thời gian tìm kiếm sử dụng thuật toán tìm kiếm tuần tự - Phân tích và đánh giá thuật toán thuật toán tìm kiếm
Bảng 3. Thời gian tìm kiếm sử dụng thuật toán tìm kiếm tuần tự (Trang 13)
Bảng 4. Thời gian tìm kiếm sử dụng thuật toán sắp xếp nhanh - Phân tích và đánh giá thuật toán thuật toán tìm kiếm
Bảng 4. Thời gian tìm kiếm sử dụng thuật toán sắp xếp nhanh (Trang 14)
• Thuật toán sắp xếp nhanh hơn trên các mô hình dữ liệu ngẫu nhiên có phân bố đều và phân bố Gauss, chậm hơn trên các mô hình dữ liệu ngẫu nhiên có phân bố Exponential và phân bố Poisson, đặc biệt là khi số lượng mẫu dữ liệu trở nên rất lớn. - Phân tích và đánh giá thuật toán thuật toán tìm kiếm
hu ật toán sắp xếp nhanh hơn trên các mô hình dữ liệu ngẫu nhiên có phân bố đều và phân bố Gauss, chậm hơn trên các mô hình dữ liệu ngẫu nhiên có phân bố Exponential và phân bố Poisson, đặc biệt là khi số lượng mẫu dữ liệu trở nên rất lớn (Trang 14)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w