P L trỏ tới nút bên trái data chứa dữ liệu p r trỏ tới nút bên phải double in(Pdau, Pcuoi, Q, X) //X: dữ liệu cần thêm


đã là ĐỐNG rồi. Cây được lưu trữ trên mảng K



tải về 35.79 Kb.
trang8/11
Chuyển đổi dữ liệu28.05.2022
Kích35.79 Kb.
#52147
1   2   3   4   5   6   7   8   9   10   11
code

đã là ĐỐNG rồi. Cây được lưu trữ trên mảng K
có n phần tử (từ 0-n)
*/
int Key = K[root];
while(root * 2 <= n-2){ //chừng nào nút chưa phải lá (root *2 < n-1)
int c = root*2 + 1; vị trí nút con trái
if(c+1 < n && K[c] < K[c+1]){
c = c+1;
}
if(K[c] < Key){
break;
}
K[root] = K[c];
root = c;
}
K[root] = Key;
}
Đánh giá thời gian thực hiện với dãy n phần tử
Ta sẽ chỉ chú ý vào trường hợp xấu nhất:
Ta thấy ở vòng for đầu tiên ta phải gọi hàm ADJUST xấp xỉ n/2 lần.
Vòng for thứ 2 gọi hàm ADJUST n lần.


Ta thấy cây được xét ở hàm ADJUST là cây đầy đủ, nghĩa là chiều
cao của nó cao nhất cũng chỉ là log2(n+1), xấp xỉ log2n
-> Số lần so sánh giá trị khoá khi thực hiện hàm ADJUST cũng
chỉ là log2n lần (bằng chiều cao của cây tương ứng)


Vậy ta có thể nói số lần thực hiện phép so sánh cùng lắm sẽ là:
3/2 * nlog2n


Suy ra T(x) = O(nlog2n)


Đây là ưu điểm của Heap Sort so với Quicksort, trường hợp xấu nhất
của Heap Sort cũng chỉ có đỘ phức tạp là O(nlog2n), còn Quicksort
là O(n^2)

14. Trình bày (bằng ngôn ngữ tựa C) giải thuật sắp xếp hoà nhập (Merge
Sort). Đánh giá thời gian thực hiện giải thuật với dãy có n phần tử.
//giải thuật hoà nhập 2 đường
Merge(K, b, m, n, X){
/*
K: mảng chứa 2 mảng con
X: Mảng chứa 1 mảng to được gộp bởi 2 mảng trên
b: vị trí bắt đầu của mảng con 1
m: vị trí kết thúc mảng con 1
n: vị trí kết thức mảng con 2
*/
i = b; //i và j là biến chạy ở mảng con 1 và 2 của K

tải về 35.79 Kb.

Chia sẻ với bạn bè của bạn:
1   2   3   4   5   6   7   8   9   10   11




Cơ sở dữ liệu được bảo vệ bởi bản quyền ©hocday.com 2024
được sử dụng cho việc quản lý

    Quê hương