Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 16 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
16
Dung lượng
166 KB
Nội dung
Đề tài: HÀNG ĐỢI ƯU TIÊN VÀ MỘT SỐ ỨNG DỤNG I ĐIỀU KIỆN HOÀN CẢNH TẠO RA SÁNG KIẾN Đối với học sinh khối chuyên Tin trường chuyên, để đáp ứng chương trình khung đề để phát hiện, bồi dưỡng học sinh tham gia đội tuyển học sinh giỏi cấp kiến thức bản, nâng cao đồ thị quan trọng Một phần nâng cao đồ thị giải thuật có sử dụng cấu trúc liệu “Hàng đợi ưu tiên - Heap” số Để hiểu rõ cấu trúc liệu cung cấp thêm cách cài đặt Heap đơn giản hiệu để giải toán đưa II THỰC TRẠNG Do số năm gần việc sử dụng cấu trúc liệu nâng để giải toán tin đề thi HSG Tin học phổ biến Các tài liệu viết cấu trúc liệu Heap (Tài liệu chuyên tin, Giải thuật lập trình, …) khó cài đặt, đòi hỏi học sinh phải có kĩ thật tốt cài sử dụng cấu trúc liệu III GIẢI PHÁP Vì vậy, để giải toán có sử dụng cấu trúc liệu Heap cách thuận tiện đơn giản Trong khuôn khổ viết này, xin giới thiệu cách cài đặt cấu trúc liệu Heap đơn giản hiệu không so với cách thông thường Phần lí thuyết hàng đợi ưu tiên không nói kĩ có đầy đủ tài liệu chuyên tin Tôi tập trung vào phần cài đặt ứng dụng Heap làm số tập cụ thể IV NỘI DUNG: HÀNG ĐỢI ƯU TIÊN VÀ MỘT SỐ ỨNG DỤNG • Khái niệm hàng đợi ưu tiên: • Hàng đợi ưu tiên kiểu liệu danh sách chứa phần tử tập hữu hạn , phần tử gán mức độ ưu tiên định • Với hàng đợi ưu tiên ta có hai thao tác chính: + Push(): Đẩy vào hàng đợi ưu tiên + Pop(): Trả phần tử có mức độ ưu tiên lớn hàng đợi ưu tiên loại bỏ phần tử khỏi hàng đợi ưu tiên • Cài đặt hàng đợi ưu tiên Để cài đặt hàng đợi ưu tiên ta sử dụng cấu trúc liệu để biểu diễn danh sách: Heap nhị phân gần hoàn chỉnh đặc biệt mà phần tử lưu nút có độ ưu tiên lớn hay độ ưu tiên phần tử nằm hai nhánh • Biểu diễn Heap • Một dãy khóa biểu diễn nhị phân gần hoàn chỉnh mà lưu nút nút cha nút nút trái , phải Ta dùng phương pháp để biểu diễn Heap: + nheap số phần tử thực nằm hàng đợi ưu tiên + heap[1 nheap] lưu khóa gồm hai thành phần (pos, value: tương ứng vị trí I khóa giá trị p[i] khóa) hàng đợi ưu tiên Mảng biểu diễn nhị phân gần hoàn chỉnh mà nút cha nút Ta có • Khai báo Type Tnode=record Pos,value:longint; End; Var Nheap:longint; Heap:array[1 MaxNheap] of Tnode; • Khởi tạo hàng đợi ưu tiên Procedure Init; Begin Nheap:=0; End • Thủ tục Push(i): thêm i vào cuối hàng đợi thực chỉnh lại heap Procedure push(i:longint); Var c,x,r:longint; Begin nheap:=nheap+1; //chinh lai heap bang cach di len cac nut cha c:=nheap; Repeat r:=c div 2;//di len nut cha If (r=0) or (heap[r].value≥P[i]) then Break; Heap[c]:=heap[r];//keo nut cha xuong nut c:=r; //tiep tuc di len Until false; Heap[c].pos:=i;//dat i vao dung vi tri Heap[c].value:=p[i]; End; Vì độ sâu nhị phân gần hoàn chỉnh không vượt lg(nheap) nên thủ tục push(i) thực thời gian O(lg(nheap)) • Hàm Pop: trả phần tử có độ ưu tiên cao hàng đợi, đưa phần tử cuối , giảm số phần tử Function Pop:Tnode; Var r,c:longint; Begin Pop:=heap[1];//trả phần tử gốc heap Heap[1]:=heap[nheap];//đưa phần tử cuối đầu Nheap:=nheap-1;//giam so phan tu di If nheap>1 then//chinh lai heap bang cach di xuong tu nut Begin i:=heap[1].pos; r:=1; Repeat C:=r*2;//đi xuống nút trái If (c[...]... qua chổ mình đang ứng hoặc có quyền dừng Nếu ai đó đang ở một làng thì người kia không được vào làng nào trong số các làng của đường nối 2 thành phố của làng đó Yêu cầu: Hãy xác định ai là người tới thủ đô trước và đưa ra thông báo First hoặc Second Dữ liệu: Vào từ file văn bản GAME.INP: • Dòng đầu tiên chứa 2 số nguyên n và m, • Mỗi dòng trong m dòng sau chứa 3 số nguyên a, b và c, cho biết đường... < n ... Push(): Đẩy vào hàng đợi ưu tiên + Pop(): Trả phần tử có mức độ ưu tiên lớn hàng đợi ưu tiên loại bỏ phần tử khỏi hàng đợi ưu tiên • Cài đặt hàng đợi ưu tiên Để cài đặt hàng đợi ưu tiên ta sử dụng cấu... DUNG: HÀNG ĐỢI ƯU TIÊN VÀ MỘT SỐ ỨNG DỤNG • Khái niệm hàng đợi ưu tiên: • Hàng đợi ưu tiên kiểu liệu danh sách chứa phần tử tập hữu hạn , phần tử gán mức độ ưu tiên định • Với hàng đợi ưu tiên. .. biểu diễn Heap: + nheap số phần tử thực nằm hàng đợi ưu tiên + heap[1 nheap] lưu khóa gồm hai thành phần (pos, value: tương ứng vị trí I khóa giá trị p[i] khóa) hàng đợi ưu tiên Mảng biểu diễn nhị