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

bài giảng cấu trúc dữ liệu và giải thuật TIẾN SĨ KIM

36 370 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 36
Dung lượng 616,41 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 tham khảo cho những người đang cần những kiến thức về lập trình C++ Trong bộ môn Cấu trúc dữ liệu và giải thuật của TIẾN SĨ KIM. Chúc các bạn thành công. Xin chào và hẹn gặp lại các bạn trong những tài liệu tiếp theo.

Trang 1

KHOA CÔNG NGH THÔNG TIN

B MÔN KHOA H C MÁY TÍNH

[1] Xuân Lôi, C u trúc d li u và gi i thu t, HBK Hà N i

[2]Nguy)n c Ngh-a, C u trúc d li u và gi i thu t, HBK Hà N i, 2012

[3]Tr n H nh Nhi–D ng Anh c, Nh p môn c u trúc d li u và gi i thu t,

HKHTN-HQG TPHCM

[4]Jhon Bentley, Nh ng viên ng c trong k thu t l p trình

[5]Robert L Kruse, Alexander J Ryba, Data Structures and Program Design in C++,

Prentice Hall, 2000

[6]Mark Allen Weiss, Data Structures and Algorithm Analysis in Java, PEARSON, 2012

Trang 2

Câu 2: (4 i m)

Cho danh sách liên k t n L; m i nút ch a m t s nguyên

a Hãy nh ngh-a c u trúc d li u c a danh sách liên k t L

b Hãy vi t gi i thu t s(p x p các ph n t l8 n'm v phía tr c c a danh sách và các ph n tch7n n'm v phía cu i c a danh sách

c Cho hai danh sách liên k t n L1 và L2 mà các giá tr c a nó ã c s(p t ng; hãy vi t

gi i thu t tr n hai danh sách L1, L2 thành m t danh sách L c&ng c s(p t ng

Câu 3: (3 i m)

Cho m t cây nh phân tìm ki m T mà m i nút ch a m t s nguyên; là khóa c a nút ó

a Hãy nh ngh-a c u trúc d li u c a cây T

b Hãy vi t gi i thu t tính t!ng giá tr c a các nút ch có m t con

c Hãy vi t gi i thu t tìm m c c a nút có khóa k (gi s s k ã có trong cây)

-H t -

L i gi i thi u

C u trúc d li u và gi i thu t là h c ph n b t bu c thu c kh i ki n th c c s ngành

c a sinh viên các chuyên ngành công ngh thông tin và c ng là n i dung quan tr ng các k

thi t t nghi p, thi hoàn ch nh i h c các chuyên ngành công ngh thông tin

T p bài gi ng này trình bày các ch bài t p v :T ng quan v c u trúc d li u và

gi i thu t, tìm ki m, s p x p, c u trúc danh sách liên k t và c u trúc cây theo ngôn ng

C/C++ M i ch c thi t k g m các ph n: Tóm t t lý thuy t, m t s d ng bài t p i n

hình và m t s bài t p ch n l c Ph n cu i c a t p bài gi ng có b sung m t s thi sinh

viên t rèn luy n k n ng phân tích v n bài toán

T p bài gi ng này c biên so n làm tài li u tham kh o khi gi ng các h c ph n

c u trúc d li u và gi i thu t h i h c Chúng tôi xin trân tr ng gi i thi u v i b n c t p

bài gi ng này và hy v ng r ng nó s! giúp cho vi c h c t p h c ph n c u trúc d li u và gi i

thu t c a sinh viên khoa công ngh thông tin tr "ng # i h c Sài Gòn c thu n l i h n

Thành ph H Chí Minh, ngày 06 tháng 09 n m 2009

TÁC GI$

Trang 3

Ch ng 1

T NG QUAN

1.1.BÀI TOÁN

Khái ni m bài toán

• Trong ph m vi tin h c, ta quan ni m bài toán là m t công vi c nào ó mà ta mu n máy tính th c hi n

• Khi dùng máy tính gi i bài toán, ta c n quan tâm n ba y u t : a vào máy thông tin

gì (Input), c n l y ra thông tin gì (Output) và quá trình ó c x lý nh th nào ?

Ví d v m t s bài toán tin h c

• Vi t tài li u (G m: n i dung bài toán, gi i thu t, toàn v n ch ng trình, các b ki m

th , thông tin v các tác gi c a các công o n trên và th i i m ch nh s a cu i cùng các công o n,…)

1.2.GI I THU T

Khái ni m gi i thu t (thu t gi i/thu t toán)

Gi i thu t gi i bài toán là m t th t c xác nh bao g m m t dãy h u h n các b c c n

th c hi n thu c u ra cho m t u vào cho tr c c a bài toán

c tr ng c a gi i thu t

• u vào (Input): Gi i thu t nh n d li u vào t m t t p nào ó

• u ra (Output): V i m i t p các d li u u vào, gi i thu t a ra các d li u t ng

Hãy minh h a quá trình s(p t ng d n dãy s trên theo gi i thu t Quick sort

c Ch ng minh gi i thu t Merge sort có ph c t p O(n log n) v i n là s ph n t c a dãy

d Hãy tr l i ng(n g n các câu h"i sau:

- M t cây nh phân có chi u cao h có t i a bao nhiêu nút ?

- M t cây nh phân có chi u cao h có t i a có bao nhiêu nút lá ?

- M t cây nh phân thì * m c i có t i a bao nhiêu nút ?

- Cây nh phân y (m i nút u có 2 cây con) có chi u cao h thì có bao nhiêu nút ?

Câu 2: (3.0 )

Cho danh sách liên k t n L, m i nút ch a m t phân s g m t s và m%u s (gi s t s và

m%u s c a các phân s là các s nguyên d ng)

a Hãy nh ngh-a c u trúc d li u danh sách liên k t n bi u di)n các phân s

b Vi t gi i thu t tìm phân s có giá tr l n nh t

c Vi t gi i thu t m s l ng phân s có giá tr n'm trong kho ng (0,1)

Câu 3: (4.0 )

Cho cây nh phân tìm ki m T m i nút ch a m t s nguyên; là khóa c a nút ó

a Hãy nh ngh-a c u trúc d li u cho cây T

b Vi t gi i thu t tính t!ng giá tr các nút trong cây

c Vi t gi i thu t m xem cây T có bao nhiêu nút có úng hai con

d Vi t gi i thu t in khóa c a các nút trên ng i t nút g c n nút có khóa k (gi s giá

tr k ã có trong cây)

-H t -

Trang 4

b Minh h a quá trình bi n !i dãy s 26, 8, 24, 16, 4, 20, 12, 34, 2, 10 thành m t heap

c V# cây nh phân tìm ki m T v i các nút c nh p theo th t sau: 7 (g c), 34, 2, 1, 15, 9,

41, 6, 16, 40, 12, 45 Duy t cây T theo th t tr c (NLR) và th t sau (LRN)

d Cho dãy ch a n s nguyên a0,a1,…,a n-1 ã c s(p t ng và m t s nguyên x S d ng

qui vi t gi i thu t tìm ki m nh phân

e Cho dãy ch a n s nguyên a0,a1,…,a n-1 Vi t gi i thu t s(p dãy s trên theo th t t ng theo gi i thu t Heap sort

Câu 2: (3 i m)

a Cho danh sách liên k t n L; m i nút ch a m t s nguyên Hãy nh ngh-a c u trúc d

li u cho danh sách liên k t n L Vi t gi i thu t tìm giá tr l n nh t c a danh sách L

b Vi t gi i thu t qui chuy n !i m t s t h m th p phân sang h m c s b

Câu 3: (3.0 i m)

Cho cây nh phân tìm ki m T; m i nút ch a m t s nguyên; là khóa c a nút ó

a Hãy nh ngh-a c u trúc d li u cho cây T

b Vi t gi i thu t m xem cây T có bao nhiêu nút lá ?

c Vi t gi i thu t tính chi u cao c a cây

d Vi t gi i thu t tìm m c c a nút có khóa k (gi s s k ã có trong cây)

-H t -

• H u h n (Finiteness): Gi i thu t c n ph i a c u ra sau m t s h u h n (có th

r t l n) b c v i m i u vào

• n tr (Uniqueness): Các k t qu trung gian c a t ng b c th c hi n gi i thu t c

xác nh m t cách n tr và ch ph thu c vào u vào và các k t qu c a các b c

tr c

• T!ng quát (Generality): Gi i thu t có th áp d ng gi i m i bài toán có d ng ã cho

ph c t p c a gi i thu t

• ph c t p tính toán c a gi i thu t c xác nh nh là l ng tài nguyên các lo i

mà gi i thu t òi h"i s d ng

• Có hai lo i tài nguyên quan tr ng ó là th i gian và b nh

• Ta c bi t quan tâm n ánh giá th i gian c n thi t th c hi n gi i thu t mà ta s#

g i là th i gian tính c a gi i thu t

xác nh ph c t p tính toán c a m t gi i thu t b t k$ có th d%n t i nh ng bài toán

ph c t p Tuy nhiên trong th c t , i v i m t s gi i thu t ta c&ng có th phân tích c

b'ng m t s quy t(c n gi n là Quy t(c c ng và quy t(c nhân

M t s l p gi i thu t

• O(1): H'ng s (constant)

• O(log n): Logarithmic

• O(n): Tuy n tính (linear)

• O(n log n): Trên tuy n tính (superlinear)

• O(n2): Bình ph ng (quadratic)

• O(n3): B c 3 (cubic)

• O(nk): a th c (polynomial) (k ≥ 1)

• O(an): Hàm m& (exponential) (a > 1)

Bài toán d gi i – khó gi i-không gi i c

• M t bài toán c g i là d) gi i n u nh nó có th gi i c b*i gi i thu t a th c

(Bài toán tìm dãy con liên ti p có t!ng l n nh t, s(p x p dãy n s ,…)

• M t bài toán c g i là khó gi i n u nh nó không th gi i c b*i gi i thu t a

th c (bài toán li t kê các hoán v c a n s , bài toán li t kê các dãy nh phân chi u dài

n, ) Nh ng bài toán cho n hi n t i v%n ch a tìm c gi i thu t a th c gi i

(bài toán cái túi, bài toán ng i i du l ch,…)

• Bai toán không gi i c n u nh không t n t i gi i thu t gi i (bài toán v tính

d ng, bài toán v nghi m nguyên c a a th c,…)

Trang 5

Ch+ng h n n = 7 s sau:

4 –5 6 –4 2 3 -7 Thì k t qu t!ng dãy con c n tìm là 7

b m xem có bao nhiêu s nguyên t <=100 tri u mà khi o ng c các ch s c a nó ta c&ng thu c s nguyên t ? (Ví d s 5, 13,131 là th"a) (Thu t toán sàng nguyên t )

c Tìm các s x,y nguyên d ng (<=1 tri u) sao t!ng các c th c s c a x b'ng y và t!ng

Gi i thu t n gi n nh t có th vi t ngay là: xét t t c các c p s nguyên L và U th"a mãn 1 ≤

L ≤ U ≤ n; i v i m i c p nh v y ta tính t!ng c a dãy con a[L U] và so sánh t!ng này v i giá tr l n nh t hi n có:

for (L=1;L<=n;L++) for (U=L;U<=n;U++) { sum=0;

for (int I=L;I<=U;I++)

Hãy vi t hàm s d ng C/C++ tr n hai danh sách (g m hai thành ph n: Int Inf và ListNode*

next) – c cho b*i hai con tr" head1, head2- s(p x p t ng d n theo tr ng Inf, có dài l n

l t là n và m thành m t danh sách c cho b*i head 3- s(p x p gi m d n theo tr ng Inf có

dài n + m Hãy trình bày ng(n g n cách tính ph c t p gi i thu t

Trang 6

H4C PH5N C U TRÚC D LI U VÀ GI I THU T ( 6 S7 13)

Th"i gian làm bài: 90 phút

Câu 1(2 ):

Hãy vi t hàm quy (s d ng mã gi ) tìm và tr v giá tr ch7n và l n nh t trong m t

m ng và dài c a nó là tham s u vào c a hàm

Câu 2(2 ):

Hãy vi t hàm tính t!ng dãy con l n nh t trong m t dãy cho tr c (dãy cho tr c c l u trtrong m t m ng ) s d ng C/ C++ v i m ng và dài c a nó là tham s u vào c a hàm Trình bày ng(n g n ý t *ng và ph c t p c a gi i thu t Mô t t ng b c ch y v i b d

li u sau : 10 -12 2 23 -6 30 20 -13 (bi t r'ng t!ng dãy con l n nh t c a b d li u này là 69)

Câu 4 (2.0 ):

Hãy vi t hàm s d ng C/C++ tr n hai danh sách (g m hai thành ph n: Int Inf và ListNode* next) – c cho b*i hai con tr" head1, head2- s(p x p t ng d n theo tr ng Inf có dài l n

l t là n và m thành m t danh sách- c cho b*i head 3- s(p x p t ng d n theo tr ng Inf có

dài n+m Hãy trình bày ng(n g n cách tính ph c t p gi i thu t

T!ng l n nh t trong dãy con a[1 i] là t!ng l n nh t trong dãy con a[1 i-1](g i là maxsofar)

ho c t!ng l n nh t trong t t c các t!ng c a các dãy con k t thúc t i i (g i là maxendinghere)

Chúng ta có nh n xét r'ng: Dãy con l n nh t k t thúc t i i là dãy con l n nh t k t thúc t i v

trí i-1 c b! sung thêm ph n t a[i] * cu i ho c là dãy con r ng trong tr ng h p t!ng c a

dãy con nh n c là s âm Ta có gi i thu t nh sau:

Trang 7

1.3.GI I THU T QUI

Gi i thu t qui là gi i thu t t g i n chính mình v i d li u vào có kích th c nh" h n

Phân lo i quy

• quy tuy n tính (còn g i là quy n)

M t hàm c g i là quy tuy n tính n u m t l n g i hàm nó ch phát sinh t i a

l i m t cách t ng minh hay ti m ,n

• quy phi tuy n ( quy ph c)

M t hàm c g i là quy phi tuy n n u m i l n g i hàm thì nó phát sinh ra kho ng

n l n g i quy - thông th ng l i g i quy c t trong các vòng l p

• Cách bi u di)n d li u c s d ng chung cho t t c các giá tr này

• T p các phép toán có th th c hi n trên t t c giá tr

C u trúc d li u (data structures) là m t h các bi n, có th có các ki u d li u khác nhau,

c liên k t l i theo m t cách th c nào ó Các c u trúc d li u

• C u trúc d li u c s*: int, double, float,…

• C u trúc d li u tuy n tính: m ng, danh sách liên k t, ng n x p, hàng i,…

• C u trúc d li u phi tuy n: Cây, th , b ng b m,…

d Tính t!ng và tích hai a th c P,Q (trên tr ng s nguyên)

e Tính t!ng hai s nguyên l n A,B (m i s có th có hàng ngàn ch s )

H4C PH5N C U TRÚC D LI U VÀ GI I THU T ( 6 S7 12)

Th"i gian làm bài: 90 phút

Câu 1 (2 i m)

a Hãy vi t các hàm s(p x p theo gi i thu t chèn tr c ti p và n!i b t

b Cho dãy g m các s nguyên sau:

c Cho hai s nguyên d ng a và b (có th có hàng ngàn ch s ) S d ng danh sách liên k t

n bi u di)n cho s nguyên a và s nguyên b Hãy vi t hàm tính t!ng a + b

c Cho hai danh sách liên k t n l1,l2 ch a các s nguyên Hãy tr n các ph n t c a l1 và l2

vào l3 l3 c&ng c s(p x p t ng (hãy l i gi i bài toán b'ng cách chèn các ph n t c a l2

vào l1 l1 sau ó c&ng c s(p t ng (l1 ch a các ph n t c a l1 và l2 tr c ó)

Trang 8

b Hãy cài t gi i thu t tìm ki m nh phân b'ng qui

c Hãy cho bi t s l n so sánh c a gi i thu t tìm ki m nh phân trong tr ng h p x u nh t,

t t nh t, trung bình Hãy cho bi t ph c t p c a gi i thu t này

b Khai báo m t danh sách liên k t n trong ó, m i ph n t l u tr d li u g m: Giá tr

c a nút ó (ki u s nguyên) và t n s xu t hi n c a giá tr (ki u s nguyên) Hãy vi t hàm rút g n danh sách liên k t n theo d ng sau: N u các ph n t có cùng giá tr thì ch gi

l i m t ph n t và t n s c a giá tr ó thì c c ng thêm 1

Câu 4 (3 i m)

Gi s ta có m t t p h p g m n ph n t ki u s nguyên c n l u tr b'ng c u trúc cây nh phân tìm ki m (BST) L u ý r'ng các ph n t có th trùng nhau Hãy trình bày m t xu t v c u trúc cây BST sao cho:

g Hãy chuy n k ph n t u tiên c a dãy v cu i dãy

BT1-2.Cho hai s nguyên l n a và b; trong ó a có m ch s và s b có n ch s Vi t ch ng

trình th c hi n các phép c ng, tr , nhân, chia (l y ph n nguyên) hai s nguyên l n

Viêt hàm tính A n b'ng cách không s d ng quy

BT1-5 t n quân H u lên bàn c Vua sao cho chúng không kh ng ch l%n nhau

b Tìm m t t p con có t!ng l n nh t không l n h n m cho tr c (m là s nguyên d ng)

c Tìm m t cách chia n s trên thành hai ph n sao cho t!ng các ph n t c a m i ph n chênh

l ch nhau là ít nh t

Trang 9

Ch ng 2

TÌM KI M VÀ S P X P

2.1.1.Bài toán tìm ki!m

Cho dãy n s nguyên a0,a2, ,a n-1 và m t s nguyên x Hãy tìm xem x có thu c vào dãy s trên

hay không ? N u tìm c * v trí th i thì xu t k t qu là i, ng c l i n u không tìm th y thì

xu t k t qu là –1 (chú ý dãy b(t u t ch s 0, n u dãy có nhi u s b'ng x thì xu t v trí i

int LinearSearch ( int a[], int n, int x ) {

int i = 0;

while ( i<n && a[i]!=x) i++;

if( i==n) return -1; // tìm h t nh ng không có x return i; // tìm th y a[i] là ph n t có khóa x }

Hi u qu c a gi i thu t c nâng cao b'ng cách t thêm ph n t c m canh (sentinel)

* cu i m ng (a[n]=x) b o m r'ng trong dãy a[i] lúc này luôn có ph n t b'ng x và vòng

l p while luôn k t thúc Do ó không c n ki m tra i u ki n (i<n) n a

int LinearSearch ( int a[], int n, int x ) {int i = 0; // m ng g m n ph n t t a[0] a[n-1]

a[n] = x; // thêm ph n t th n+1 while (a[i]!=x)

i++;

if( i==n) return -1; // tìm h t nh ng không có x return i; // tìm th y x t i v trí i }

Gi i thu t tìm ki m tuy n tính có ph c t p tính toán là O(n)

H4C PH5N C U TRÚC D LI U VÀ GI I THU T ( 6 S7 10)

Th"i gian làm bài: 90 phút

Câu 1 (2 i m)

a Nêu các nh ngh-a sau: Cây nhi phân, cây nh phân tìm ki m, cây nh phân cân b'ng hoàn

toàn, cây nh phân cân b'ng

b b.Hãy cài t gi i thu t tìm ki m tuy n tính

c Hãy cho bi t s l n so sánh c a gi i thu t tìm ki m tuy n tính trong tr ng h p x u nh t,

t t nh t, trung bình Hãy cho bi t ph c t p c a gi i thu t này

Câu 2 (2 i m)

Vi t các hàm sau ây:

a Thêm m t ph n t x vào stack S b'ng cách dùng danh sách liên k t

b Xem thông tin c a ph n t * nh stack S b'ng cách dùng danh sách liên k t

c Thêm m t ph n t x vào cu i hàng i Q b'ng cách dùng danh sách liên k t

d Xem thông tin c a ph n t * u hàng i Q b'ng cách dùng danh sách liên k t

Câu 3 (3 i m)

Cho m t danh sách liên k t n trong ó, m i ph n t ch a m t s nguyên

a Vi t hàm xóa t t c các s nguyên t trong danh sách

Trang 10

H4C PH5N C U TRÚC D LI U VÀ GI I THU T ( 6 S7 9)

Th"i gian làm bài: 90 phút

Câu 1 (2 i m)

a Hãy nh ngh-a m t heap và nêu các tính ch t c a m t heap

b Hãy hi u ch nh dãy s sau ây thành m t heap

Câu 2 (2 i m)

a Hãy vi t hàm s(p x p ch n tr c ti p b'ng cách s d ng danh sách liên k t n

Yêu c u thay !i các m i liên k t (thao tác trên vùng next)

b B'ng các thao tác c b n trên hàng i sau ây, hãy vi t hàm tính t!ng các ph n t c a

m ng m t chi u n ph n t

int Qisempty(List Q) : ki m tra hàng i r ng void Qpush(List &Q, int x) :Thêm m t ph n t vào cu i hàng i int Qpop(List &Q) : Trích/h y ph n t * âu hàng i

a Hãy vi t ph n khai báo c u trúc d li u mô t m t danh sách liên k t n l mà m i

ph n t là m t s nguyên Hãy vi t hàm s(p x p các ph n t trong danh sách l theo chi u

t ng d n

b Hãy vi t ph n khai báo c u trúc d li u mô t m t cây nh phân tìm ki m mà m i ph n

t là m t s nguyên Hãy vi t hàm tìm chi u cao c a cây

Nh n xét r'ng n u x > a[i] thì x ch có th xu t hi n bên ph i a[i] - ngh-a là trong

o n [amidle+1, aright] c a dãy, ng c l i n u x < a[i] thì x ch có th xu t hi n bên trái a[i] -

trong o n [aleft, amidle-1] c a dãy, nh v y gi i thu t s# thu g n ph m vi tìm ki m m t cách

áng k M i l n so sánh lo i c m t n a thông tin không có ích

Ví d 2.1: Cho dãy s

C n tìm ph n t x=3

B c 1: left=0, right=9, mid=4, a[mid]= 6

Do x < a[mid] nên right=3

Do left<=right ti p t c qua b c 2

B c 2: left=0, right=3, mid=1, a[mid]= 3

Do x = a[mid] nên v trí c n tìm là mid =1

Gi s c n tìm ph n t x=11

B c 1: left=0, right=9, mid=4, a[mid]= 6

Do x > a[mid] nên left=5

Do left<=right ti p t c qua b c 2

B c 2: left=5, right=9, mid=7, a[mid]= 9

Do x > a[mid] nên left=8

Do left<=right ti p t c qua b c 3

B c 3: left=8, right=9, mid=8, a[mid]= 10

Do x > a[mid] nên left=9

Do left<=right ti p t c qua b c 4

B c 4: left=9, right=9, mid=9, a[mid]= 12

Do x < a[mid] nên right=8

Do left> right vòng l p k t thúc và k t qu tr v là -1

Cài %t theo ki u quy

int BinarySearch_Recursive(int a[],int n,int x,int left,int right)

Trang 11

Cài %t theo ki u không quy

int BinarySearch(int a[],int n,int x) {

int left=0,right=n-1,mid;

do { mid=(left+right)/2;

if (x==a[mid]) return mid;

else

if (x<a[mid]) right=mid -1;

else left=mid+1;

} while (left<=right);

Cho m t dãy n s , hãy s(p x p dãy s theo th t t ng d n (ho c gi m d n)

Trong bài gi ng này gi thi t r'ng khi nói m t dãy có th t ngh-a là dãy ó có th t không

gi m

Ví d dãy ban u : S1 = {5 6 1 9 8 6}

Dãy sau khi bi n !i: S2 = {1 5 6 6 8 9}

•Khái ni m ngh ch thXét m t m ng n s a0, a1, , an-1 N u có i < j và ai > aj, thì ta g i ó là m t ngh ch th

M ng ch a s(p x p s# có ngh ch th , và ng c l i m ng ã có th t s# không ch a ngh ch

th s(p x p m t m ng, ta có th tìm cách làm gi m s các ngh ch th trong m ng này b'ng cách hoán v các ph n t ai,aj n u có i < j và ai > aj theo m t quy lu t nào nào ó Sau ây là m t s ph ng pháp s(p x p th ng dùng nh t

2.2.2.Ph ng pháp %i ch% tr&c ti!p

Ý t *ng chính c a gi i thu t !i ch tr c ti p là xu t phát t u dãy, tìm t t cngh ch th ch a ph n t này, tri t tiêu chúng b'ng cách !i ch ph n t này v i ph n t t ng

ng trong c p ngh ch th L p l i quá trình trên v i các ph n t ti p theo trong dãy

Danh sách c n tìm c bi u di)n b'ng m t m ng m t chi u, danh sách c n tìm c bi u

di)n b'ng m t danh sách liên k t n, danh sách c n tìm c bi u di)n b'ng m t cây nh

phân tìm ki m

(Các hàm này n u tìm th y tr v giá tr 1, n u không tìm th y tr v giá tr 0)

Câu 3 (3 i m)

a Cho m t danh sách liên k t n trong ó, m i ph n t ch a m t s nguyên Hãy vi t hàm

xóa ph n t có giá tr l n nh t trong danh sách (l u ý: Ch c phép duy t danh sách m t

l n và n u có nhi u ph n t l n nh t gi ng nhau, xóa ph n t u tiên)

b Dùng ng n x p các s nguyên v i các phép toán push,pop Hãy l p ch ng trình !i m t

s th p phân thành s nh phân

Câu 4 (3 i m)

Cho cây nh phân tìm ki m T có khóa là các s nguyên

a Li t kê t t c các ph n t c a m t cây nh phân tìm ki m th"a i u ki n giá tr c a ph n t

n'm trong kho ng [Min, Max] cho tr c

b Tìm cây con T có t!ng l n nh t (ch tìm m t cây th"a)

-H t -

Trang 12

a Hãy v# cây nh phân tìm ki m T

b Hãy duy t cây T trên theo th t NLR

c Hãy duy t cây T trên theo th t RNL

d Hãy v# l i cây sau khi xoá nút 11 sao cho T v%n là cây nh phân tìm ki m

Câu 2 (2 i m)

a Hãy nêu s khác nhau c a cây nh phân tìm ki m (BST) và Heap?

b Có th li t kê n ph n t c a heap theo th t t ng d n v i chi phí O(n) không? Vì sao?

Câu 3 (3 i m)

Cho danh sách liên k t n l, m i nút là m t phân s (gi s t s và m%u s c a các phân s

là các s nguyên d ng) C u trúc c a danh sách liên k t l c cho nh sau:

struct Phanso {int tu; int mau;};

struct Node {Phanso info; struct Node *next;};

struct List {Node *head,*tail;};

Hãy vi t các hàm th c hi n các yêu c u sau:

a Hãy m s l ng phân s có giá tr l n h n 1 c a danh sách l

b Hãy t o danh sách l1 ch ch a các phân s t i gi n t danh sách l (phân s t i gi n là phân

s mà c s chung l n nh t c a t s và m%u s c a nó b'ng 1)

c m s l ng phân s t i gi n c a danh sách l (phân s t i gi n là phân s mà c schung l n nh t c a t s và m%u s c a nó b'ng 1)

Câu 4 (3 i m)

Hãy vi t ph n khai báo c u trúc d li u mô t m t cây nh phân tìm ki m mà m i ph n t

là m t s nguyên d ng Hãy vi t các hàm th c hi n các yêu c u sau:

a Vi t hàm m xem trong cây có bao nhiêu nút có úng 2 cây con ?

b Vi t hàm tính t!ng các nút có giá tr nguyên t trong cây

for (int i=0; i<n-1;i++)

for (int j=i+1;j<n ;j++)

Ch n ph n t nh" nh t trong n ph n t kh*i t o, a ph n t này v v trí úng là u

dãy hi n hành; sau ó không quan tâm n nó n a, xem dãy hi n hành m i ch còn n-1 ph n

t c a dãy ban u, b(t u t v trí th hai; l p l i quá trình trên cho dãy hi n hành cho n

Trang 13

void selectionsort(int a[],int n) {

for(int i = 0;i < n -1; i++) {

int min = i;

for ( int j = i+1; j < n; j++)

if (a[j] < a[min]) min = j;

swap( a[min], a[i] );

} }

ph c t p tính toán c a gi i thu t là: O(n2)

2.2.4.Ph ng pháp n%i b t (Bubble Sort)

Xu t phát t cu i dãy (ho c u dãy), !i ch b t k$ hai ph n t k c n nào ng c th

t a ph n t nh" nh t (ho c l n nh t) trong các c p ph n t ó v v trí úng là u (cu i) dãy hi n hành, k ti p không xét n nó n a * b c ti p theo, do v y * l n x lý th i s# có v trí u dãy là i L p l i quá trình trên cho n khi không còn c p ph n t nào xét

Ví d 2.4:

Cho dãy s 5 6 1 9 8 6

N u dãy c n c s(p theo th t t ng d n, dòng j-1 j a[0] a[1] a[2] a[3] a[4] a[5]

}

ph c t p tính toán c a gi i thu t là: O(n2)

*Ph ng pháp này trong th c t không c khuy n khích s d ng

a Hãy duy t cây T trên theo th t node - left - right

b Cây T có chi u cao là bao nhiêu ? Tìm các ng i t g c có dài là 4 trên cây

Hãy khai báo ki u d li u danh sách liên k t n mà m i ph n t ch a thông tin v m t sinh

viên bao g m các tr ng: mã s sinh viên (chu i, 12 ký t ), h lót sinh viên (chu i, t i a 12

ký t ), tên sinh viên (chu i, t i a 12 ký t ), i m trung bình tích l&y (s th c)

V i các ki u d li u v a khai báo, hãy xây d ng các hàm sau:

a.Hàm x p lo i t t nghi p cho sinh viên Trong ó x p lo i X(xu t s(c) n u có i m trung

bình tích l&y ( TB) >=9.0; Lo i G(Gi"i) n u có i m trung bình tích l&y 8<= ( TB)<9.0;

Lo i K(khá) n u có i m trung bình tích l&y 7<= TB < 8; Lo i T (trung bình) n u có iêm

trung bình tích l&y 5<= TB <7

b.Hàm s(p x p danh sách theo i m trung bình tích l&y

c.Hàm s(p x p danh sách t lo i X, danh sách c n c s(p theo tên t ng d n, n u tên trùng

Trang 14

-Hãy cho bi t k t qu sau khi hi u ch nh m ng A thành (binary) heap?

-V# (binary) heap * d ng cây nh phân

b.Cho bi t s ph n t t i thi u và t i a c a m t (binary) heap có chi u cao là h ?

Cho danh sách liên k t n, m i nút là m t phân s (t s và m%u s là các s nguyên)

c Hãy m xem trong danh sách có bao nhiêu phân s có giá tr l n h n 1

d Hãy xóa các phân s không ph i là phân s t i gi n trong danh sách

Câu 4 (3 i m)

Cho cây nh phân tìm ki m T có khóa là các s nguyên

a In các khóa theo chi u gi m d n

b Tìm giá tr nút lá * m c sâu nh t (ch tìm 1 giá tr th"a)

-H t -

2.2.5.S$p x!p chèn tr&c ti!p

Dãy u tiên ch có m t th t a0 là dãy ã c s(p Ta t ng b c m* r ng dãy c

s(p b'ng cách l n l t thêm ph n t ai (i=1 n-1) vào Khi chèn ai vào dãy ã c s(p thì ta

ti n hành các công o n sau: Th nh t là t x=a i l u giá tr c n chèn Th hai tìm v trí

pos thích h p trong o n a 0 n a i-1 chèn ai vào Th ba là chèn x vào v trí pos

ph c t p tính toán c a gi i thu t là: O(n2)

2.2.6.S$p x!p phân ho ch (Quick sort)

Quick Sort c th c hi n b'ng cách phân ho ch dãy ã cho thành hai ph n sau ó

s(p các ph n này riêng bi t nhau nh sau:

u tiên ch n ph n t tùy ý; th ng c ch n là x=a[(l+r)/2] làm m c, k ti p quét

t u trái c a m ng cho n khi g p m t ph n t l n h n x và quét t u ph i c a m ng cho

n khi g p m t ph n t bé h n x, hai ph n t d ng vi c quét d- nhiên là không úng ch

trong m ng k t qu cu i cùng nên ph i hoán v chúng

Sau khi th c hi n b c này thì b o m r'ng t t c các ph n t * bên trái c a x s# nh"

h n x và các ph n t bên ph i c a x s# l n h n x

Sau b c này ta ã chia dãy thành hai dãy con; ta l i ti p t c phân ho ch theo ki u

qui cho m i dãy con này

Trang 15

Ví d 2.6:

Cho dãy s 5 6 1 9 8 6

N u dãy c n c s(p theo th t t ng d n, dòng l r x a[0] a[1] a[2] a[3] a[4] a[5]

while (a[j]>x) j ;

if (i<=j) swap(a[i++],a[j ]);

} while (i<j);

if (l<j) quicksort(a,l,j);

if (i<r) quicksort(a,i,r);

}

ph c t p tính toán c a gi i thu t là: O(n log n)

2.2.7.S$p x!p vun ng (Heap sort)

tìm ph n t nh" nh t * b c i, ph ng pháp s(p x p ch n tr c ti p ã không t n

d ng c các thông tin ã có c do các phép so sánh * b c i-1 Ph ng pháp Heap Sort kh(c ph c c nh c i m này

nh ngh a heap:

Gi s xét tr ng h p s(p x p t ng d n, khi ó Heap c nh ngh-a là m t dãy các ph n t

al, ,ar thoã các quan h sau v i m i i∈ [l,r]

a N u ta xóa m t ph n t kh"i cây BST và sau ó thêm nó vào l i cây H"i: hình d ng c a

cây ó b thay !i không? Gi i thích?

b Ch ng minh r'ng m t cây nh phân v i chi u cao h s# có t i a 2 h-1 nút

Câu 2 (2 i m)

a S d ng Stack, vi t ch ng trình chuy n !i m t s nguyên n trong h th p phân (h 10)

sang bi u di)n h nh phân (h 2)

b Hãy áp d ng gi i thu t Balan ng c bi n !i bi u th c sau thành d ng postfit:

(a+b/(c-d))*e Trình bày tr ng thái c a stack sau m i l n có s thay !i

Câu 3 (3 i m)

Hãy qu n lý các s thuê bao i n tho i b'ng danh sách liên k t n M i ph n t ch a các

thông tin: h tên, a ch , s i n tho i c nh

Hãy vi t hàm tìm ki m a ch c a m t s i n tho i cho tr c

Trang 16

H4C PH5N C U TRÚC D LI U VÀ GI I THU T ( 6 S7 3)

Th"i gian làm bài: 90 phút

Câu 1 (2 i m)

a Vi t hàm cài t gi i thu t Selection-Sort b'ng qui và không qui

b Hãy cho bi t s l n so sánh và s l n gán c a gi i thu t Selection-Sort

a Cho hai danh sách liên k t n l1,l2 có các ph n t là các s nguyên và ã c s(p t ng

d n Hãy tr n hai danh sách này c m t danh sách l3 c&ng c s(p t ng d n (không

Tính ch t 1: N u al,.,ar là m t Heap thì khi c(t b" m t s ph n t * hai u c a Heap thì

dãy con còn l i v%n là m t Heap

Tính ch t 2: N u các ph n t a1, ,an là m t Heap thì ph n t a1 ( u heap) luôn là ph n t

l n nh t trong Heap

Tính ch t 3: M i dãy al,al+1,…,ar v i 2l > r là m t Heap

•Gi i thu t

Gi i thu t heap sort g m hai giai o n sau:

Giai o n 1: Hi u ch nh dãy s ban u thành Heap

Giai o n 2: S(p x p dãy s d a trên Heap

D a vào tính ch t 3, ta có th th c hi n giai o n 1 b'ng cách b(t u t heap m c nhiên

an/2+1, an/2+2,…,an, l n l t thêm vào các ph n t an/2, an/2-1,…,a1 ta s# nh n c Heap

theo mong mu n Nh v y gi i o n 1 t ng ng v i n/2 l n th c hi n b c 2 c a giai

o n 2

(gi i thu t này minh h a theo d ng cây thì ng i c d) hình dung h n)

void insertheap(int a[],int l,int r)

Trang 17

void heapsort(int a[],int n) {

int l=n/2;

int r=n;

while (l>0) insertheap(a,l ,r);

while (r>0) {

ph c t p tính toán c a gi i thu t là: O(nlog2n)

2.2.8.S$p x!p tr n (Merge sort)

B c 1: Chu,n bk=1;// k là chi u dài c a dãy con trong b c hi n hành

B c 2:Tách dãy a0,a1,…an-1 thành hai dãy b,c theo nguyên t(c luân phiên t ng nhóm k ph n

a Vi t hàm s(p x p dãy n s nguyên ao, a1, a2, ,a n-1 t ng d n theo gi i thu t Quick sort

b Hãy minh h a cách s(p x p t ng d n dãy s sau ây theo gi i thu t Quick sort:

a Cho bi t k t qu sau khi bi n !i m ng trên thành dãy heap

b Th hi n dãy heap ó theo d ng cây nh phân

Câu 3 (3 i m)

Hãy khai báo ki u c u trúc d li u liên k t n mà m i ph n t ch a thông tin v m t

quy n sách bao g m các tr ng: Mã s sách (s nguyên 4 byte), tên sách (chu i, t i a 40 ký

t ), tác gi (chu i, t i a 30 ký t ), n m xu t b n (s nguyên 4 byte)

a m s sách xu t b n n m X

b S(p x p danh sách theo mã s sách

Câu 4 (3 i m)

Gi s T là m t cây nh phân tìm ki m mà t i m i nút l u m t s nguyên Hãy khai

báo ki u d li u T và xây d ng các hàm sau:

a Hàm tìm ki m m t node có khóa X (tr v con tr" tr" d n nút tìm c)

b Hàm m s nút có khóa l n h n X

c Hãy tìm cây con có t!ng l n nh t

-H t -

Trang 18

M T S THI M U

H4C PH5N C U TRÚC D LI U VÀ GI I THU T ( 6 S7 1)

Th"i gian làm bài: 90 phút

Câu 1 (2 i m)

a Vi t hàm s(p x p dãy n s nguyên ao,a1,a2, ,a n-1 t ng d n theo gi i thu t Heap sort

b Hãy minh h a cách s(p x p t ng d n dãy s sau ây theo gi i thu t Heap sort:

26, 7, 22, 15, 1, 18, 11, 27

Câu 2 (2 i m)

Cho cây nh phân tìm ki m T g m 12 s nguyên v i phép duy t LRN cho k t qu nh sau: 1,

3, 2, 6, 7, 5, 4, 10, 9, 12, 11, 8

a Hãy v# cây nh phân tìm ki m T

b Duy t cây T theo th t NLR

c V# l i cây sau khi xoá nút 8 sao cho T v%n cây nh phân tìm ki m

Câu 3 (3 i m)

Cho m t danh sách liên k t n l; m i nút là m t s nguyên d ng

a Vi t hàm t o danh sách l1 ch ch a các s nguyên t t danh sách l

b Vi t hàm xóa các s nguyên t trong danh sách l

Câu 4(3 i m)

Cho cây nh phân tìm ki m T; m i nút là m t s nguyên

a Vi t hàm tìm m c c a nút có giá tr l n nh t

b Vi t hàm tìm t t c các ng i t g c có dài là 4 trên cây

c Vi t hàm m s cây con ch ch a toàn là s nguyên t -H t -

Ví d 2-8 Cho dãy n s nguyên sau:

Hãy mô ph"ng các b c s(p x p t ng d n dãy s trên theo các gi i thu t s(p x p ã h c

Ví d 2-9

Cho dãy n s nguyên ai

a Vi t hàm tìm xem x có thu c dãy ai hay không ? N u có tr v 1, n u không có tr v 0

b Vi t hàm tìm giá tr l n nh t, l n th nhì c a dãy

c Tìm các giá tr xu t hi n nhi u l n nh t

Ví d 2-10

Cho dãy n s nguyên d ng ai

a Hãy s(p các s nguyên t v u dãy, các s khác v cu i dãy

b Hãy cho bi t k giá tr khác nhau l n nh t c a dãy

c Vi t hàm tìm giá tr l n th k c a dãy

CÁC PH./NG PH0P S0P X1P 2C BI3T tham kh o thêm t i [2] trang 199

Ngày đăng: 07/03/2016, 14:18

TỪ KHÓA LIÊN QUAN

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

w