Tải bản đầy đủ (.doc) (42 trang)

TTCS KHOA HOC MAY TINH

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.22 MB, 42 trang )

Đề tài thực tập cơ sở: Khoa học máy tính

Lời nói đầu
Ngày nay, Công nghệ thông tin đà và đang trở thành
một trong những ngành mũi nhọn. Nó không chỉ bó hẹp trong
phạm vi nhà trờng, viện nghiên cứu, các trung tâm máy tính
mà còn đợc ứng dụng rộng rÃi trong tất cả các lĩnh vực của đời
sống xà hội. Có thể nói sự phát triển vợt bậc của Công nghệ
thông tin đà giúp con ngời hoá giải đợc rất nhiều bài toán phức
tạp mà trớc đây đà tốn rất nhiều thời gian, công sức. Giờ đây
nó đà trở nên đơn giản hơn, nhanh chóng hơn và đạt độ
chính xác cao hơn. Điều này đà đánh dấu một bớc ngoặt trong
sự phát triển của tin học nói riêng cũng nh của khoa học nhân
loại nói chung
Sinh viên CNTT ngày nay phải không ngừng học hỏi, cập
nhật những cái mới và biết ứng dụng những những kiến thức
đà đợc học vào thực tiễn của cuộc sống. Đợt thực tập cơ sở này
chính là bớc đầu tiên đi sâu vào tìm hiểu trong nhiều lĩnh
vực của công nghệ thông tin, trên cơ sở những kiến thức đà đợc học trong những năm học vừa qua.
Đề tài gồm có 4 phần :

ã Phần I

: Lựa Chọn Cài Đặt Và Sử Dụng Một Chơng

Trình FTP Server .
ã Phần II : Tìm Hiểu Về Trigger Trong SQL Server .
ã Phần III: Các Phơng Pháp Tìm Kiếm Trong.
ã Phần IV: Tìm Kiếm Thông Tin Trên Internet
Do thời gian và trình độ có hạn nên chắc chắn cũng
không tránh khỏi những sai lầm, thiếu sót. Kính mong đợc sự


đón nhận, ý kiến đóng góp của các thầy cô và các bạn.
Chúng tôi xin chân thành cảm ơn Ths. Nguyễn Thị
Thanh Tâm đà tận tình giúp đỡ nhóm chúng em hoàn thành
đề tài này!

Giáo viên hớng dẫn:

1
Thanh Tâm

ThS. Ngun ThÞ


Đề tài thực tập cơ sở: Khoa học máy tính

PHN I : LỰA CHỌN CÀI ĐẶT VÀ SỬ DỤNG MỘT CHƯƠNG
TRÌNH FTP SERVER .
1. Giới thiệu :
FTP là chữ viết tắc của File Transfer Protocol - Giao thức truyền file. FTP
là một giao thức truyền file trên mạng dựa trên chuẩn TCP nên rất đáng tin cậy .
2.Cài đặt và sử dụng chương trình CuteFTP :
Việc Upload file lên host sẽ dễ dàng nếu chỉ với một vài file bằng cơng cụ
Upload bình thường có sẵn trên host. Nhưng nó không đơn giản cho chúng ta
nếu Upload nhiều file như một diễn đàn lên host nếu dùng cơng cụ bình thường
thì mất khoảng một ngày mới có thể Up lên hết các file cho một diễn đàn .
Nhưng đối với CuteFTP thì bạn chỉ mất khoảng 1-2 giờ up lên là cùng .Ta có thể
dễ dàng download
CuteFTPPro 8.0 (Dung lượng 7,86 MB) tại đây
.Sau khi đã có phần mềm ta
tiến hành cài đặt như sau :

• Double – click và tệp tin cuteftppro.exe .Ta làm theo hướng dẫn của
trình ci t ,Click next

Giáo viên hớng dẫn:

2
Thanh Tâm

ThS. Nguyễn Thị


Đề tài thực tập cơ sở: Khoa học máy tính

ã Sau ú chn Yes

Giáo viên hớng dẫn:

3
Thanh Tâm

ThS. Nguyễn Thị


Đề tài thực tập cơ sở: Khoa học máy tính
ã Click next tip :

Giáo viên hớng dẫn:

4
Thanh Tâm


ThS. Nguyễn Thị


Đề tài thực tập cơ sở: Khoa học máy tính
ã Chờ đợi ít phút trong khi trình cài đặt đang ci t chng trỡnh vo
mỏy tớnh ca mỡnh

Giáo viên hớng dẫn:

5
Thanh Tâm

ThS. Nguyễn Thị


Đề tài thực tập cơ sở: Khoa học máy tính
ã Chọn Finish để kết thúc quá trình cài đặt

Sau khi cài đặt bạn thành công bạn mở chương trinh Cute FTP ( Chú ý
chương trình địi hỏi phải đăng ký ,ta có thể dễ dàng tìm được key đăng ký trờn
internet ).Giao din Cute FTP nh sau :

Giáo viên hớng dẫn:

6
Thanh Tâm

ThS. Nguyễn Thị



Đề tài thực tập cơ sở: Khoa học máy tính

Chỳng ta cần đăng nhập với tài khoản host của mình . Sau khi đăng nhập
thành cơng của sổ chương trình s nh sau :

Giáo viên hớng dẫn:

7
Thanh Tâm

ThS. Nguyễn Thị


Đề tài thực tập cơ sở: Khoa học máy tính

bõy giờ chúng ta có thể thoải Upload và Download các file hay cả Folder
lên host một cách bình thường bằng cách ấn chuột phải vào Folder ở Ô bên trái
Click chuột phải chọn Upload hay Ô bên trái Click chuột phải chọn Download .
Ngồi ra chúng ta có thể Edit file, Đổi tên file,... bằng cách Click chuột phải
vào file hay c Folder .

Giáo viên hớng dẫn:

8
Thanh Tâm

ThS. Nguyễn Thị



Đề tài thực tập cơ sở: Khoa học máy tính

PHN II : TÌM HIỂU VỀ TRIGGER TRONG SQL SERVER .
1.Khái Niệm Trigger :
Một trigger là một dạng đặc biệt của thủ tục lưu trữ và nó được thực hiện
tự động khi người dùng áp dụng câu lệnh sửa đổi dữ liệu lên một bảng được chỉ
định.
2.Đặc Điểm Và Ý Nghĩa Của Trigger trong SQL Server :
a.Đặc Điểm :
* Một Trigger có thể làm nhiều cơng việc (Action) khác nhau và có thể
được kích hoạt bởi nhiều hơn một Event .Ví dụ ta có thể viết một Trigger được
kích hoạt bởi bất kỳ Event nào như Update , Delete ,hay Insert và bên trong
Trigger ta sẽ viết code để giải quyết cho tng trng hp .
Giáo viên hớng dẫn:

9
Thanh Tâm

ThS. Nguyễn ThÞ


Đề tài thực tập cơ sở: Khoa học máy tính
* Trigger không thể được tạo ra trên Temporary hay system table .
* Trigger có thể được kich hoạt một cách tự động bởi một trong các
Event Delete ,Update ,Insert mà khơng thể chạy manually .
* Có thể áp dụng Trigger cho View
* Khi một Trigger được kích hoạt thì data mới vừa được Insert hay mới
vừa được thay đổi sẽ được chứa trong Inserted Table ,còn data mới vừa được
Delete được chứa trong Deleted Table .Đây là hai Table tạm chỉ chứa trong
memory và chỉ có giá trị bên trong Trigger mà thơi ( nghĩa là chỉ nhìn thấy và

được Query bên trong Trigger mà thơi ) .Ta có thể dùng thông tin trong hai bảng
này để so sánh Data cũ và mới hoặc kiểm tra xem Data mới thay đổi có hợp lệ
trước khi commit hay rollbak .
* Có hai loại Trigger : Instead of và After .Loại Instead of sẽ bỏ qua
action đã kích hoạt Trigger mà thay vào đó sẽ thực hiện các dịng SQL bên trong
Trigger . Ví Dụ ta có một Update Trigger trên một table với câu lệnh Instead of
thì khi table được Update thay vì Update ,SQL Server

sẽ thực hiện các lệnh

đã được viết sẵn bên trong Trigger . Ngược lại After sẽ thực hiện các lệnh bên
trong sau khi các action tạo nên Trigger đã xảy ra rồi .
b. Ý nghĩa :
Các Trigger thường được sử dụng cho việc ép buộc các qui tắc làm việc
và tồn vẹn dữ liệu. Tính tồn vẹn tham chiếu có thể được định nghĩa bằng cách
sử dụng ràng buộc FOREIGN KEY với câu lệnh CREATE TABLE. Nếu các
ràng buộc tồn tại trong bảng có sự tác động của trigger, nó được kiểm tra trước
việc thực hiện trigger. Nếu các ràng buộc bị vi phạm, trigger sẽ không thực thi.
* Các Trigger được sử dụng trong những cách sau:
* Các trigger có thể thay đổi đồng loạt (cascade change) các bảng có liên
hệ trong một CSDL.
* Các trigger có thể khơng cho phép hoặc roll back những thay đổi vi
phạm tính tồn vẹn tham chiếu, hủy bỏ giao tỏc sa i d liu.
Giáo viên hớng dẫn:

10
Thanh Tâm

ThS. Ngun ThÞ



Đề tài thực tập cơ sở: Khoa học máy tính
* Các trigger có thể áp đặt các giới hạn phức tạp hơn những giới hạn được
định nghĩa bằng ràng buộc CHECK. Khác với ràng buộc CHECK, các trigger có
thể tham chiếu đến các cột trong các bảng khác.
* Các trigger cịn có thể tìm sự khác biệt giữa các trạng thái của một bảng
trước và sau khi sữa đổi dữ liệu và lấy ra những tác động dựa trên sự khác biệt
đó.
3. Cơ chế hoạt động của trigger :
Khi thực hiện việc thêm mới mẫu tin vào một table, thao tác này sẽ kích
hoạt một trigger, trigger lưu trữ dữ liệu của mẫu tin vừa thêm mới vào một table
có tên là Inserted. Tương tự, khi thực hiện việc xoá mẫu tin của một table, thao
tác này sẽ kích hoạt một trigger, trigger lưu trữ dữ liệu của mẫu tin vừa xố vào
một table có tên là Deleted. Cấu trúc của hai bảng này hoàn toàn giống với cấu
trúc của bảng dữ liệu liên quan đến trigger khi tạo ra. Thật ra hai bảng này chỉ
tồn tại trong bộ nhớ của máy tính (RAM) được xem như là hai bảng luận lý mà
chúng ta có thể sử dụng trong các xử lý của trigger. Chúng ta không thể tham
chiếu trực tiếp trong tiện ích SQL Query Analyzer hoặc bên trong các thủ tục nội
tại.Chúng ta đã đề cập đến đến cơ chế hoạt động của trigger liên quan đến 2 thao
tác thêm và xố dữ liệu. Thế cịn đối với thao tác sửa đổi dữ liệu (update) thì sao
? Lệnh UPDATE trong Microsoft SQL Server được xem như là sự phối hợp của
hai lệnh DELETE và INSERT (xóa bỏ dữ liệu cũ và thêm vào dữ liệu mới sau
khi sửa đổi) do thế mà đối với các trigger liên quan đến việc sửa đổi dữ liệu thì
chúng ta có thể tham chiếu đến cả hai bảng trung gian Inserted và Deleted.
Trong đó bảng Deleted sẽ chứa đựng thơng tin của các dòng dữ liệu đã bị hủy bỏ
– các dòng dữ liệu cũ trước khi sửa đổi, bảng Inserted sẽ chứa đựng thơng tin
của các dịng dữ liệu mới vừa thêm vào – các dòng dữ liệu sau khi sửa đổi.Một
khái niệm quan trọng liên quan đến cơ chế hoạt động của trigger mà chúng tôi
muốn đề cập ở phần này, đây là khái niệm liên quan đến phần bổ sung mới của
phiên bản SQL Server 2000, khái niệm INSTEAD OF và AFTER.

Trigger loại INSTEAD OF sẽ bỏ qua hành ng kớch hot trigger (Cỏc
Giáo viên hớng dẫn:

11
Thanh Tâm

ThS. Nguyễn ThÞ


Đề tài thực tập cơ sở: Khoa học máy tính
thao tác insert, delete, update), thay vào đó nó sẽ thực hiện các câu lệnh bên
trong trigger. Cần lưu ý là nó sẽ bỏ qua hành động tác động đến cơ sở dữ liệu
nhưng việc lưu trữ dữ liệu vào các bảng inserted (đối với thao các insert),
deleted (đối với thao tác delete) vẫn được thực hiện. Ví dụ : một câu lệnh update
tác động tới một table chứa trigger loại INSTEAD OF, các câu lệnh T-SQL bên
trong trigger sẽ được thi hành, nó đóng vai trị thay thế câu lệnh update. Đặc tính
này cho phép bạn chỉ định các câu lệnh xử lý phức tạp trong trigger nhằm làm
tăng thêm lệnh thay đổi dữ liệu trên table.Trigger loại INSTEAD OF có thể định
nghĩa trên đối tượng table hoặc view
Trigger loại AFTER là loại mặc định (cũng chính là loại có từ khố khai
báo FOR), nó có vai trị như là phần bổ sung của hành động kích hoạt trigger.
Các câu lệnh bên trong trigger loại này chỉ được thi hành sau khi hành động kích
hoạt đã được thực hiện rồi. Cần chú ý : là các ràng buộc toàn vẹn loại mơ tả sẽ
được thực hiện trước, kế đó các câu lệnh bên trong trigger sẽ được thực hiện
sau. Trigger loại AFTER chỉ được phép định nghĩa trên duy nhất đối tượng table
(không thể định nghĩa trên view).Trên một table, nếu muốn, bạn có thể định
nghĩa cả 2 loại trigger. Nếu bạn định nghĩa cả 2 loại trigger và các constraint cho
một table, thứ tự thi hành sẽ là trigger INSTEAD OF, các constraint được xử lý
và sau cùng là trigger AFTER. Nếu các constraint bị vi phạm (có nghĩa là việc
kiểm tra ràng buộc toàn vẹn của các constraint phát hiện có vi phạm tính tồn

vẹn dữ liệu), các hành động của trigger INSTEAD OF sẽ được quay lui, trigger
AFTER không thi hành nếu các constraint bị vi phạm hoặc nếu có một số biến
cố khác làm cho việc sửa đổi dữ liệu trên table bị lỗi.
Giống như các thủ tục nội tại, trigger có thể được lồng đến 32 cấp và có
thể được kích hoạt đệ qui.

4. Tạo cỏc trigger :
Giáo viên hớng dẫn:

12
Thanh Tâm

ThS. Nguyễn Thị


Đề tài thực tập cơ sở: Khoa học máy tính
Gi sử ta có các bảng sau :
DIEM (MaSV,MaMon,Diem) .
KIEMTRA (MaSV,MaMon ,DiemCu,DiemMoi,NgaySua ) .
+ Bảng DIEM để lưu trữ điểm của sinh viên , gồm các trường : mã sinh viên ,mã
môn ,và điểm ;
+ Bảng KIEMTRA để lưu vết những điểm được sửa ( sử dụng lệnh update ) gồm
: mã sinh viên , mã môn , điểm cũ , điểm mới và ngày sửa .
Cài đặt một trigger để thực hiện việc lưu trữ vết trên như sau :
Để tạo mới một trigger, ta sử dụng câu lệnh có cú pháp như sau:
CREATE TRIGGER luuvet
ON KIEMTRA
FOR UPDATE
AS
print '*** Ket qua sau khi cap nhat ***'

SELECT * FROM KIEMTRA
Như vậy ,khi tạo ra một trigger ta phải chỉ rõ là tạo ra trigger trên Table
nào và được trigger khi nào ( Insert , Update , Delete .Sau câu lệnh As là các
câu lệnh SQL xử lý cơng việc ) .

phÇn III : các phơng pháp tìm kiếm trong
Giáo viên hớng dẫn:

13
Thanh Tâm

ThS. Nguyễn Thị


Đề tài thực tập cơ sở: Khoa học máy tính
I.Gii thiệu bài tốn
Tìm kiếm ln là thao tác nền móng cho rất nhiều tác vụ tính tốn. Tìm
kiếm nghĩa là tìm một hay nhiều mẩu thơng tin đã được lưu trữ. Thông thường,
thông tin được chia thành các mẩu tin (record), mỗi mẩu tin đều có một KHĨA
(key) dùng cho việc tìm kiếm. Ta sẽ ln có một khố cho trước giống như khoá
của các mẩu tin mà ta cần tìm. Mỗi mẩu tin được tìm thấy sẽ chứa tồn bộ thơng
tin để cung cấp cho một q trình xử lý nào đó.
Việc tìm kiếm được áp dụng rất đa dạng và rộng rãi. Một Ngân hàng nắm
giữ tất cả thông tin của rất nhiều tài khoản khách hàng và cần tìm kiếm để kiểm
tra các biến động. Một hãng Bảo hiểm hay một hệ thống trợ giúp bán vé xe, vé
máy bay….Việc tìm kiếm thơng tin để đáp ứng việc xắp đặt ghế và các yêu cầu
tương tự như vậy là thực sự cần thiết.
Thuật ngữ thường được dùng trong việc mơ tả cấu trúc dữ liệu của việc
tìm kiếm là TỪ ĐIỂN và BẢNG KÝ HIỆU. Một ví dụ điển hình như ta muốn
xây dựng hệ thống tra từ điển Tiếng Anh chẳng hạn. Ở đây, “khoá” là từ và

“mẩu tin” là diễn giải cho từ đó, mỗi mẩu tin chứa định nghĩa, cách phát âm và
các thông tin khác. BẢNG KÝ HIỆU chính là từ điển cho chương trình và các
mẩu tin chứa thơng tin mơ tả đối tượng được đặt tên.
II. Hướng giải quyết bài toán tìm kiếm:
Trong tìm kiếm chúng ta thấy có rất nhiều chương trình được dùng
thường xuyên và rộng rãi. Vì vậy sẽ rất có ích khi nghiên cứu chi tiết nhiều
phương pháp khác nhau.
Cách tốt nhất để suy nghĩ các thuật tốn tìm kiếm là đưa ra các thao tác
tổng qt được rút ra từ các cài đặt cụ thể, sao cho các cài đặt khác nhau có thể
được thay thế dễ dàng. Các thao tác đó gồm:
- Khởi tạo cấu trúc dữ liệu (INITIALIZE)
- Tìm kiếm một hay nhiều mẩu tin cú khoỏ ó cho (SEARCH)
Giáo viên hớng dẫn:

14
Thanh Tâm

ThS. Ngun ThÞ


Đề tài thực tập cơ sở: Khoa học máy tính
- Chèn thêm một mẩu tin mới ( INSERT)
- Nối lại từ điển để tạo thành một từ điển lớn hơn.(JOIN)
- Sắp xếp từ điển; xuất ra tất các mẩu tin theo thứ tự được sắp xếp
(SORT)
Trong một vài trường hợp, các thao tác này được tổ hợp thành một thao
tác phức tạp hơn. Ví dụ như thao tác SEARCH_INSERT (tìm kiếm và chèn).
Thao tác này thường được dùng trong các trường hợp các mẩu tin với khố bằng
nhau khơng được phép lưu trữ trong cấu trúc dữ liệu. Trong nhiều phương pháp,
mỗi lần xác định một khố nào đó khơng có trong cấu trúc dữ liệu thì trạng thái

của thủ tục tìm kiếm sẽ chứa chính xác thơng tin cần thiết để chèn thêm một
mẩu tin mới với khoá đã cho.
- Một trong 5 thao tác liệt kê trên đều có những ứng dụng rất quan trọng
và một số lớn những tổ chức dữ liệu cơ sở đã được đề nghị để dùng phối hợp các
thao tác trên một cách hiệu quả. Chúng ta sẽ xét cụ thể cách cài đặt của hàm cơ
bản SEARCH và INSERT…
III.CÁC THUẬT TỐN TÌM KIẾM :
1.TÌM KIẾM TRONG:
1.1 . Tìm kiếm tuần tự :
a.Tìm kiếm tuần tự trên mảng :
Đây là một trong những phương pháp tìm kiếm đơn giản và dễ thực hiện
nhất đặc biệt đối với các thông tin được lưu trữ kiểu mảng. Tìm kiếm tuần tự là
tìm kiếm và lưu trữ các mẩu tin trong một mảng, sau đó duyệt tồn bộ mảng một
cách tuần tự. Mỗi lần tìm và duyệt như vậy ta sẽ tìm thấy được một mẩu tin.
Đoạn chương trình đơn giản mơ tả thuật tốn tìm kiếm tuần tự như sau:
Type diem = record
key, infor: integer;
end;
var A: array[1..maxN] of diem;
N: integer;
Giáo viên hớng dẫn:

15
Thanh Tâm

ThS. Nguyễn ThÞ


Đề tài thực tập cơ sở: Khoa học máy tính
procedure intialze;

begin N:=0;
end;
function seqsearch(v: integer; x : integer): integer;
begin
A[N+1].key:=v;
If x then
repeat x:= x+ 1
until v = A[x].key;
seqsearch:= x;
end;
end;
function seqinsert(v : integer): integer;
begin
N:= N + 1;
A[N].key:= v;
seqinsert := N;
end
end;
Đoạn mã trên xử lý các mẩu tin có các khố (key) và “thơng tin đi kèm”
có giá trị nguyên (infor). Nhiều ứng dụng cần mở rộng các chương trình để làm
việc các mẩu tin và khoá phức tạp hơn, nhưng điều này sẽ khơng làm thay đổi
nhiều các thuật tốn.
Ví dụ: trường Infor có thể thay đổi thành con trỏ đến một cấu trúc mẩu tin
phức tạp. Trường hợp như vậy, trường infor có thể có thể xem như một chỉ danh
duy nhất của mẩu tin để phân biệt những mẩu tin có khố bằng nhau. Thủ tục
seqsearch có hai đối số: một là giá trị khoá (v), một là chỉ số của mảng (biến x).
Chỉ số x này dùng để xử lý trường hợp nhiều mẩu tin có cùng một giá trị khoá.
Bằng cách thực hiện liên tục m:= seqsearch(v, m) khởi đầu với m:= 0; chúng ta
có thể cho m lần lượt chỉ số của các mẩu tin có khố bằng v.
Giáo viên hớng dẫn:


16
Thanh Tâm

ThS. Nguyễn Thị


Đề tài thực tập cơ sở: Khoa học máy tính
Mt mẩu tin đặc biệt có khố là khố đang tìm được thêm vào; nó bảo đảm
rằng q trình tìm kiếm sẽ kết thúc và cũng làm đơn giản hơn phép kiểm tra
trong vòng lặp. Sau khi vòng lặp dừng, nếu chỉ số trả về nhỏ hơn hay bằng N thì
đó chính là chỉ số của mẩu tin tìm được. Nếu ngược lại thì trong bảng đã cho
khơng có mẩu tin có giá trị khố muốn tìm. Kỹ thuật này giống như kỹ thuật
dùng một mẩu tin chứa giá trị khoá nhỏ nhất hay lớn nhất để làm đơn giản các
vòng lặp của các thuật tốn trong các chương trình sắp xếp.
Ta có thể rút ra một kết luận cho thuật tốn tìm kiếm tuần tự như sau:
Tìm kiếm tuần tự (cài đặt mảng) sử dụng đúng (N +1) phép so sánh cho một lần
tìm kiếm khơng thành cơng và trung bình có khoảng N/2 phép tốn so sánh cho
một lần tìm kiếm thành cơng.
Trường hợp tìm kiếm thành cơng, điều này là hiển nhiên được thấy ngay
trong đoạn chương trình trên.
Trường hợp tìm kiếm khơng thành cơng, chúng ta giả sử rằng mỗi mẩu
tin có khả năng tìm thấy là như nhau, thì số trung bình của số lần so sánh sẽ là:

Con số này bằng đúng bằng đúng một nửa của trường hợp tìm kiếm khơng thành
cơng.
Ngồi phương pháp cài đặt bằng mảng như thuật tốn trên, TÌM KIẾM
TUẦN TỰ có thể được cài đặt bằng một phương pháp sử dụng một xâu liên kết
để biểu diễn các mẩu tin như:
b. Tìm kiếm tuần tự cài đặt bằng xâu có thứ tự

Một trong những thuận lợi của phương pháp này là giữ cho xâu được sắp
xếp, và nhờ đó có thể tìm kiếm nhanh hơn.
type lienket = ↑ diem;
diem = record
key, infor :integer;
Giáo viên hớng dẫn:

17
Thanh Tâm

ThS. Nguyễn Thị


Đề tài thực tập cơ sở: Khoa học máy tính
next : lienket;
end;
var dau , t , x : lienket;
i: integer;
procedure initialize;
begin
new(z);
z↑.next:= z;
new(dau);
dau↑.next:= z ;
end;
function listsearch(v : integer; t:lienket) : lienket;
begin
z↑.key:= v;
repeat
t:= t↑.next

until v < = t↑.key;
if (v= t↑.key) then
listseach:= t;
else
listseach:= z;
end;
end;
Với một xâu được sắp xếp, một lần tìm kiếm có thể kết thúc khơng thành
cơng khi một mẩu tin có khố lớn khố đang tìm kiếm được tìm thấy. Do đó, về
mặt trung bình, chỉ khoảng một nửa các mẩu tin (không phải là tất cả) cần được
kiểm tra cho một lần tìm kiếm khơng thành cơng. Thứ tự sắp xếp được duy trì dễ
dàng tại vị trí mà việc tìm kiếm kết thúc khơng thành cơng. Ta xét k thut sau:
function listsearch(v : integer; t: lienket): lienket;
Giáo viên hớng dẫn:

18
Thanh Tâm

ThS. Nguyễn Thị


Đề tài thực tập cơ sở: Khoa học máy tính
begin
z.key: = v;
while (t↑.next↑.key < v) do
new(x);
x↑.next:= t↑.next;
t↑.next:= x;
x↑.key:= v;
listsearch:= x;

end;
Như chúng ta đã biết, đối với các xâu liên kết, có thể một nút dẫn đầu
(dau) và một nút kết thúc z để làm đơn giản chương trình. Vì vậy, lệnh
listsearch(v, dau) sẽ đặt một nút mới với khoá v vào trong xâu được trỏ tới bởi
trường (next) của (dau). Các lần gọi listsearch kế tiếp dùng các xâu trả về của
lần trước đó để đưa ra các mẩu tin có các khố bằng nhau. Nút kết thúc (z) dùng
cho trường hợp thành không công, nghĩa là nếu listsearch trả về z thì sự tìm
kiếm khơng thành cơng.
Vậy tìm kiếm tuần tự (cài đặt bằng xâu có thứ tự) sử dụng trung bình khoảng
N/2 phép so sánh cho cả hai trường hợp tìm kiếm thành cơng và khơng thành
cơng.
Xét trường hợp ta tìm kiếm thành cơng với kỹ thuật trên: điều này ta có
thể thấy trực tiếp từ đoạn code trên
Trường hợp khơng thành cơng khi tìm kiếm:
Giả sử rằng khả năng tìm kết thúc ở mỗi phần tử trong xâu và nút z là như
nhau thì số trung bình của các phép so sánh sẽ là:
1+ 2+ 3+…+ N+ (N+ 1)= (N+ 1)(N+ 2)/2
Chúng ta có thể cải tiến cải tiến thuật tốn tìm kiếm bằng cách sắp xếp các
mẩu tin một cách thông minh nếu như ta được biết thông tin về tần số truy xuất
các mẩu tin.
Một sắp xếp được gọi là “tối ưu” là một mẩu tin được truy xuất thường
xuyên nhất ở vị trí đầu tiên, mẩu tin có tần suất truy xuất thường xuyên th hai
Giáo viên hớng dẫn:

19
Thanh Tâm

ThS. Nguyễn Thị



Đề tài thực tập cơ sở: Khoa học máy tính
s nằm ở vị trí thứ hai…Kỹ thuật này đặc biệt có hiệu quả trong những trường
hợp chỉ có một tập hợp nhỏ các mẩu tin được truy xuất thường xuyên. Trường
hợp ta khơng có được thơng tin về tần suất truy xuất ta vẫn có thể thực hiện một
kỹ thuật xấp xỉ đến sắp xếp tối ưu bằng cách tìm kiếm “tự tổ chức” như sau:
Mỗi lần một mẩu tin được truy xuất, thì di chuyển chúng nên vị trí đầu tiên của
xâu. Phương pháp này sẽ dễ dàng cài đặt nếu ta dùng xâu liên kết. Tất nhiên thời
gian thực hiện của phương pháp phụ thuộc vào sự phân bố của các mẩu tin, rất
khó có thể tính trước được trong trường hợp tổng quát. Dù vậy, phương pháp
này rất phù hợp trong trường hợp mỗi mẩu tin có khuynh hướng gần những mẩu
tin khác.
1.2/Phương pháp tìm kiếm nhị phân :
a. Tìm kiếm nhị phân
Chúng ta đã xét phương pháp tìm kiếm tuần tự, cách này đơn giản trong
quá trình cài đặt. Song , hạn chế của phương pháp tuần tự là thời gian tìm kiếm
sẽ lâu trong trường hợp tập hợp tổng số mẩu tin lớn. Để khắc phục hạn chế này,
ta có phương pháp tìm kiếm NHỊ PHÂN.
Nếu tập hợp các mẩu tin lớn thì tổng số thời gian tìm kiếm sẽ được rút
ngắn bằng cách dùng một thủ tục tìm kiếm dựa trên sự ứng dụng sơ đồ “chia để - trị”. Điều này có nghĩa là chúng ta sẽ chia những mẩu tin thành hai phần,
xác định xem phần nào chứa khoá. Kế đến tiếp tục cơng việc cho phần chứa
khố ta vừa tìm được. Lý do mà chúng ta có thể chia đơi và chỉ tìm kiếm trên
một nửa các mẩu tin lf do ta đã giả thiết các mẩu tin được sắp xếp theo thứ tự
Khố. Khơng mất tính tổng qt, ta giả thiết rằng các mẩu tin được sắp xếp theo
thứ tự tăng dần(trường hợp sắp xếp giảm dần có thể làm tương tự). Để tìm một
khố k có trong một dãy số hay khơng, trước tiên ta so sánh nó với phần tử ở vị
trí giữa dãy ký tự. Nếu k nhỏ hơn thì nó chỉ có thể là ở trong một nửa đầu tiên
của dãy số. Trường hợp k lớn hơn tức là k nằm trong nửa còn lại của dãy. Chúng
ta sẽ tiếp tục áp dụng Đệ quy phương pháp này. Ta có thể gọi Đệ quy một lần mà
có thể đưa ra thuật tốn dùng phương pháp lặp. Ta hãy cùng xét hàm dưới đây
để thấy được thuật toán Nhị Phân thể sẽ thực hiện như thế nào( giả sử rằng:

mảng A đã được sắp xếp tăng theo th t Khoỏ):
function TKnhiphan(k: integer): integer;
Giáo viên hớng dẫn:

20
Thanh Tâm

ThS. Ngun ThÞ


Đề tài thực tập cơ sở: Khoa học máy tính
var x, l , r : integer;
begin
l:=1;
r:= N;
repeat
x:= (l + r ) div 2;
if (kA[x].key) then
r:= x - 1;
else
r:= x + 1;
until (k = A[x].k) or (l>r);
if (k= A[x].key) then
TKnhiphan:= x;
else TKnhiphan:= N +1;
end;
Như chúng ta thấy trên hàm, thuật toán này đã sử dụng các con trỏ l và r
để đánh dấu tập tin con hiện đang làm việc. Mỗi khi vòng lặp thực hiện, biến x
nhận giá trị điểm giữa của đoạn hiện hành. Sẽ có ba khả năng sau xảy ra:
- Vịng lặp kết thúc thành cơng

- Con trỏ trái l thay đổi thành (x + 1)
- Con trỏ phải r được đổi thành (x - 1)
- Ba khả năng trên xảy ra tương ứng với giá trị tìm kiếm k bằng, nhỏ
hơn hay lớn hơn giá trị khoá của mẩu tin được lưu trữ trong mảng A[x];
- Xét 1 ví dụ cụ thể:
Cho 1 dãy ký tự: BBAACDEFFGHMPNHRX
Tìm kiếm M trong dãy ký tự trên bằng phương phỏp nh phõn.
Mụ phng cỏch thc hin thut toỏn:

Giáo viên hớng dẫn:

21
Thanh Tâm

ThS. Nguyễn Thị


Đề tài thực tập cơ sở: Khoa học máy tính
Thy rằng, khi tìm kiếm M trong bảng được xây dựng từ các khoá B A C
D E F G H M P N R X, khi đó kích thước đoạn giảm ít nhất một nửa ở mỗi
bước. Như vậy, ta chỉ cần dùng tới 4 phép so sánh cho việc tìm được mẩu tin có
khóa là M trong ví dụ trên.
Như vậy, số các mẩu tin giảm ít nhất một nửa ở mỗi bước: một cận trên
của số các phép so sánh thoả mãn hệ qui nạp Cn = Cn/2 + 1 và C1=1; Từ nhận
xét trên ta rút ra một kết luận: Tìm kiếm nhị phân khơng bao giờ dùng nhiều hơn
(log(N) + 1) phép so sánh.
Chú ý: Điều quan trọng cần lưu ý trong thuật tốn tìm kiếm nhị phân này
là thao tác chèn thêm một mẩu tin mới chiếm rất nhiều thời gian. Điều này lý
giải tại sao mảng ln phải duy trì trong trạng thái được sắp xếp và một số mẩu
tin phải di chuyển đề nhường chỗ cho mẩu tin mới. Nếu một mẩu tin có khóa

nhỏ nhất so với tất cả các khố của các mẩu tin khác trong bảng thì mỗi mẩu tin
phải được di chuyển lên trên một vị trí. Một thao tác chèn ngẫu nhiên mất trung
bình khoảng N/2 mẩu tin bị di chuyển. Đó là lý do tại sao chúng ta không nên
dùng phương pháp này cho các ứng dụng đòi hỏi nhiều thao tác chèn thêm mẩu
tin.
Trường hợp các mẩu tin có khố bằng nhau khi sử dụng thuật tốn Tìm
kiếm nhị phân phải thật cẩn thận. Vi chỉ số trả về có thể rơi vào giữa một khối
các mẩu tin có khố bằng k, do vậy, phải qt theo cả hai hướng từ chỉ số trả về
đó để có thể nhặt ra tất cả các mẩu tin có khóa bằng k. Trường hợp này, thời gian
chạy cho việc tìm kiếm gần bằng lg(N) cộng với số mẩu tin được tìm thấy.
1.3 Các loại cây nhị phân tìm kiếm : (viết tắt tiếng Anh: BST - Binary
Search Tree) là một cấu trúc dữ liệu rất thuận lợi cho bài tốn tìm kiếm.
Định nghĩa : Cây tìm kiếm ứng với n khóa k1,k2,...kn là cây nhị phân mà
mỗi nút đều được gán một khóa sao cho với mỗi mỗi nút k:

Giáo viên hớng dẫn:

22
Thanh Tâm

ThS. Nguyễn Thị


Đề tài thực tập cơ sở: Khoa học máy tính

ã

Mi khóa trên cây con trái đều nhỏ hơn khóa trên nút k




Mọi khóa trên cây con phải đều lớn hơn khóa trên nút k

Cây tìm kiếm nhị phân là một cấu trúc dữ liệu cơ bản được sử dụng để
xây dựng các cấu trúc dữ liệu trừu tượng hơn như các tập hợp, đa tập hợp, các
dãy kết hợp.
Nếu một BST có chứa các giá trị giống nhau thì nó biểu diễn một đa tập
hợp. Cây loại này sử dụng các bất đẳng thức không nghiêm ngặt. Mọi nút trong
cây con trái có khóa nhỏ hơn khóa của nút cha, mọi nút trên cây con phải có nút
lớn hơn hoặc bằng khóa của nút cha.
Nếu một BST khơng chứa các giá trị giống nhau thì nó biểu diễn một tập
hợp đơn trị như trong lý thuyết tập hợp. Cây loại này sử dụng các bất đẳng thức
nghiêm ngặt. Mọi nút trong cây con trái có khóa nhỏ hơn khóa của nút cha, mọi
nút trên cây con phải có nút lớn hơn khóa của nút cha.
Việc chọn đưa các giá trị bằng nhau vào cây con phải (hay trái) là tùy theo
mỗi người. Một số người cũng đưa các giá trị bằng nhau vào cả hai phía, nhưng
khi đó việc tiìm kiếm trở nên phức tạp hơn.
a. Cây nhị phân cân bằng hoàn toàn:
* Định nghĩa :
Cây cân bằng hoàn toàn là cây nhị phân tìm kiếm mà tại mỗi nút của nó,
số nút của cây con trái chênh lệch khơng quá một so với số nút của cây con phải.
* Đánh giá :
Một cây rất khó đạt được trạng thái cân bằng hoàn toàn và cũng rất dễ mất
cân bằng vì khi thêm hay hủy các nút trên cây có thể làm cây mất cân bằng, chi
phí cân bằng lại cây cao vì phải thao tác trên tồn bộ cây.
Đối với cây cân bằng hoàn toàn, trong trường hợp xấu nhất ta chỉ phải
tìm qua log2N phần tử (N là s nỳt trờn cõy).

Giáo viên hớng dẫn:


23
Thanh Tâm

ThS. Nguyễn Thị


Đề tài thực tập cơ sở: Khoa học máy tính
Sau đây là ví dụ một cây cân bằng hồn tồn (CCBHT):

CCBHT có N nút có chiều cao h ≈ log2N. Đây chính là lý do cho phép
bảo đảm khả năng tìm kiếm nhanh trên CTDL này. Do CCBHT là một cấu trúc
kém ổn định nên trong thực tế không thể sử dụng. Nhưng ưu điểm của nó lại rất
quan trọng. Vì vậy, cần đưa ra một CTDL khác có đặc tính giống CCBHT nhưng
ổn định hơn.
b. CÂY NHỊ PHÂN CÂN BẰNG (AVL Tree)
AVL là tên viết tắt của các tác giả người Nga đã đưa ra định nghĩa của cây
cân bằng Adelson-Velskii và Landis (1962). Vì lý do này, người ta gọi cây nhị
phân cân băng là cây AVL. Từ cây AVL, người ta đã phát triển thêm nhiều loại
CTDL hữu dụng khác như cây đỏ-đen (Red-Black Tree), B-Tree,
* Định nghĩa:
Cây nhị phân tìm kiếm cân bằng là cây mà tại mỗi nút của nó độ cao của
cây con trái và của cây con phải chênh lệch không quá một.
Dưới đây là ví dụ cây nhị phân cân bằng :
Dễ dàng thấy CCBHT là cây cân bằng. Điều ngược lại có thể khơng đúng
khơng đúng.
* Chiều cao của cây AVL
Một vấn đề quan trọng, như đã đề cập đến ở phần trước, là ta phải khẳng
định cây AVL có N nỳt phi cú chiu cao khong log2(n).

Giáo viên hớng dẫn:


24
Thanh Tâm

ThS. Nguyễn Thị


Đề tài thực tập cơ sở: Khoa học máy tính
đánh giá chính xác về chiều cao của cây AVL, ta xét bài tốn: cây AVL
có chiều cao h sẽ phải có tối thiểu bao nhiêu nút ?
Gọi N(h) là số nút tối thiểu của cây AVL có chiều cao h.
Ta có N(0) = 0, N(1) = 1 và N(2) = 2.
Cây AVL có chiều cao h sẽ có 1 cây con AVL chiều cao h-1 và 1 cây con
AVL chiều cao h-2. Như vậy:
N(h) = 1 + N(h-1) + N(h-2) (1)
Ta lại có: N(h-1) > N(h-2)
Nên từ (1) suy ra:
N(h) > 2N(h-2)
N(h) > 22N(h-4)

N(h) > 2iN(h-2i)
i =h/2
N(h)>2h/2
h < 2log2(N(h))
Như vậy, cây AVL có chiều cao O(log2(n)).
Ví dụ: cây AVL tối thiểu có chiều cao h=4
* Cấu trúc dữ liệu cho cây AVL
Chỉ số cân bằng của một nút: Chỉ số cân bằng của một nút là hiệu của
chiều cao cây con phải và cây con trái của nó.


Đối với một cây cân bằng, chỉ số cân bằng (CSCB) của mỗi nút chỉ có thể
nhận một trong ba giá trị sau õy:

Giáo viên hớng dẫn:

25
Thanh Tâm

ThS. Nguyễn Thị


Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×