1. Trang chủ
  2. » Giáo Dục - Đào Tạo

cấu trúc dữ liệu chương 3

24 129 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 24
Dung lượng 310 KB

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

Nội dung

tài liệu uy tín được biên soạn bởi giảng viên đại học Bách Khoa TPHCM, thuận lợi cho qua trình tự học, nghiên cứu bộ tự động hóa, điện tử, cơ điện tử, cơ khí chế tạo máy, lập trình nhúng, Tài liệu được kiểm duyệt bởi giảng viên, phòng đào tạo trường đại học bách khoa, lưu hành nội bộ

Trang 1

Chương 3

Chuỗi

Trang 2

Nội dung

™ Ðịnh nghĩa chuỗi.

™ Các cách phân chia chuỗi.

™ Các hàm và thủ tục.

™ Tìm kiếm chuỗi con.

Trang 3

Các định nghĩa

™ Định nghĩa chuỗi

f Chuỗi (string) là một dãy các ký tự được

chứa trong một vùng liên tục của bộ nhớ Các ký tự này có thể là các ký tự chữ, ký tự

f Chuỗi con (substring) là một thành phần bao

gồm các ký tự liên tiếp nhau của chuỗi.

Trang 4

™ Sử dụng ký tự đặc biệt

của chuỗi) để phân tách các chuỗi con.

nhau.

một chuỗi con.

Các cách phân chia chuỗi

Trang 5

™ Sử dụng chiều dài chuỗi con cố định

chỉ để tìm kiếm một chuỗi con.

Các cách phân chia chuỗi

H O A N G A N H P H U O N G L O C

Trang 6

Các cách phân chia chuỗi

™ Sử dụng con trỏ

Trang 10

Các hàm và thủ tục

™ Các thủ tục

f val(s, x, n): biến đổi chuỗi s thành giá trị số

và gán cho x; n được gán số 0 nếu biến đổi

Trang 12

Tìm kiếm chuỗi con

™ Tìm chuỗi p có chiều dài là m trong chuỗi a

có chiều dài là n Có hai trường hợp tìm

kiếm:

f Tìm thấy chuỗi p trong chuỗi a: kết quả trả về

là vị trí của ký tự đầu tiên của lần tìm thấy đầu tiên.

f Không tìm thấy chuỗi p trong chuỗi a: kết quả trả về là 0.

™ Các giải thuật

Giải thuật Boyer-Moore

Trang 13

Giải thuật Brute-Force

Trang 14

Giải thuật Brute-Force

function Brute_Force (p, a: string): integer;

i := i - j + 1; j := 1

end until (j > m) or (i > n);

if j > m then Brute_Force := i - m

else Brute_Force := 0

end ;

Trang 15

Giải thuật Knuth-Morris-Pratt

™ Phương pháp

p[j] khác với a[i] thì đã có j-1 ký tự đầu tiên của chuỗi p trùng với các ký tự tương ứng của chuỗi a.

vẫn cho i tăng tiếp tục (thay thế i := i - j + 2 bởi i := i + 1) và gán cho j một giá trị thích

hợp Mảng next[j] xác định các giá trị thích

hợp gán cho j.

Trang 16

Giải thuật Knuth-Morris-Pratt

Trang 17

Giải thuật Knuth-Morris-Pratt

function KMP (p, a: string): integer;

until i >= m;

end ;

Trang 18

Giải thuật Knuth-Morris-Pratt

end until (j > m) or (i > n);

if j > m then KMP := i - m

else KMP := 0

end ;

Trang 19

Giải thuật Knuth-Morris-Pratt cải tiến

Trang 20

Giải thuật Knuth-Morris-Pratt cải tiến

if p[j] <> p[i] then next[i] := j

end else j := next[j]

until i >= m;

Trang 21

Giải thuật Boyer-Moore

™ Phương pháp

chuỗi p với chuỗi a.

qua phải đối với chuỗi p1 (bản sao của chuỗi

p) để có được vị trí khác nhau ở ký tự thứ j

kể từ phải qua trái của chuỗi p.

sự so sánh khác nhau.

y skip[c] = m nếu c không là ký tự của chuỗi p.

y skip[c] = m-j nếu c là ký tự thứ j của chuỗi p.

Trang 22

Giải thuật Boyer-Moore

Trang 23

Giải thuật Boyer-Moore

function Boyer_Moore (p, a: string): integer;

Trang 24

Giải thuật Boyer-Moore

Ngày đăng: 03/02/2018, 08:23