1. Trang chủ
  2. » Công Nghệ Thông Tin

Thực hành cấu trúc dữ liệu và giải thuật 8

31 33 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 31
Dung lượng 3,66 MB

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

Nội dung

a Lần lượt chọn các phần tử trong S theo thứ tự từ trái qua phải nếu chúng phù hợp thuật toán first-fit.. b Lần lượt chọn các phần tử trong S theo thứ tự từ nhỏ đến lớn thuật toán best-f

Trang 1

Bài 2 Bài toán hành trình người du lịch: Cho vị trí n thành phố trong trong không gian Từ một

thành phố ban đầu, một người du lịch muốn đi thăm tất cả n thành phố đó, sau đó quay trở lại thành phố ban đầu Hãy xây dựng hành trình của người du lịch sao cho quãng đường người đó phải đi là ngắn nhất

Tìm các phản ví dụ cho các thuật toán sau:

Gọi L là danh sách các thành phố

(a) Thuật toán 1 NearestNeighbor(L)

Chọn và thăm thành phố khởi đầu p0 từ L

p = p0

i = 0

Trong khi vẫn tồn tại thành phố chưa thăm

i = i + 1 Chọn pi là thành phố chưa thăm mà gần nhất với thành phố vừa thăm p i−1 Thăm pi

Trở về p0 từ thành phố p n−1

(b) Thuật toán 2 ClosestPair(P)

Gọi n là số lượng thành phố trong L

For i = 1 to n − 1 do

d = ∞ Với mỗi cặp (s, t) trong tập các cặp thành phố có thể

Nếu dist(s, t) ≤ d thì sm = s, tm = t, và d = dist(s, t) Kết nối (sm, tm) bởi 1 cạnh

Kết nối hai điểm cuối cùng bằng 1 cạnh Trong đó dist(s,t) là khoảng cách giữa 2 thành phố s và t

Bài 3 Cho một tập các số nguyên S = {s1, s2, , sn}, và một giá trị đích T, Tìm một tập con của

S sao cho tổng các số trong tập con đó đúng bằng T Ví dụ, Tồn tại một tập con trong S = {1, 2,

5, 9, 10} mà tổng là T = 22 nhưng lại không tồn tại với T = 23

Tìm các phản ví dụ cho các thuật toán sau

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 2

(a) Lần lượt chọn các phần tử trong S theo thứ tự từ trái qua phải nếu chúng phù hợp (thuật

toán first-fit)

(b) Lần lượt chọn các phần tử trong S theo thứ tự từ nhỏ đến lớn (thuật toán best-fit)

(c) Lần lượt chọn các phần tử trong S theo thứ tự từ lớn nhất đến nhỏ nhất

Bài 4 Bài toán tập bao trùm (set cover problem) được định nghĩa như sau:

Cho một tập S gồm các tập con S1, , Sm của tập vũ trụ U = {1, , n} Tìm số lượng tập con nhỏ nhất T ⊂ S sao cho ∪ ti ∈T ti = U Ví dụ, có các tập con, S1 = {1, 3, 5}, S2 = {2, 4}, S3 = {1, 4}, và S4 = {2, 5} Tập con bao trùm sẽ là S1 và S2

Tìm một phản ví dụ của thuật toán tìm các tập bao trùm sau: Lựa chọn tập con có số lương phần tử lớn nhất (có độ bao phủ lớn nhất), và sau đó loại bỏ các phần tử của tập đó trong tập

vũ trụ U Lặp lại việc thêm các tập con chứa số lượng các phần tử chưa bị bao phủ phần tử lớn nhất cho tới khi tất cả các phần tử của tập vũ trụ được bao phủ

Bài 5 Chứng minh các khẳng định sau bằng phương pháp quy nạp

n + n chia hết cho 3 với mọi n≥0

Bài 6 Tốc độ truy cập ổ đĩa cứng thường được tính theo milliseconds (phần ngìn của giây) hay

microseconds (Phần triệu của giây)? Tốc độ truy cập trên RAM là khoảng bao nhiêu? Số lượng chỉ lệnh - instructions mà một CPU có thể thực hiện trong 1 năm là bao nhiêu nếu máy đó được chạy liên tục trong suốt thời gian

Bài 7 Một thuật toán sắp xếp cần 1 giây để sắp xếp 1,000 phần tử trên một máy tính, thời gian

nó cần để sắp xếp 10,000 Phần tử sẽ là bao nhiêu nếu:

(a) thuật toán sắp xếp có thời gian thực hiện tỉ lệ bình phương với kích thước dữ liệu, và

(b) thuật toán sắp xếp có thời gian thực hiện tỉ lệ cỡ n log n với kích thước dữ liệu? (n là kích

thước dữ liệu – số phần tử cần sắp xếp)

Bài 8 Cài đặt 2 thuật toán người du lịch ở trong bài 2 Trong thực tế thì thuật toán nào là tốt

hơn? Bạn có thể đề xuất một thuật toán tốt hơn không ?

Bài 9 Cài đặt thuật toán tối ưu để chọn ra số lượng bộ phim xem được nhiều nhất đã được mô

tả trong slide

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 3

Bài 10 Viết hàm thực hiện phép chia số nguyên mà không dùng các toán tử / hoặc * Hãy tìm

các thực hiện nhanh nhất

Bài 11 Bạn có 25 con ngựa Tại mỗi lần đua thì chỉ có thể cho tối đa 5 con ngựa tham gia Bạn

phải xác định 3 con ngựa là nhanh nhất, nhì và ba trong 25 con ngựa Hãy tìm số lượng vòng đua tối thiểu để có thể thực hiện việc này

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 4

HO CHI MINH CITY UNIVERSITY OF TECHNOLOGY – FACULTY OF ELECTRICAL AND ELECTRONICS ENGINEERING

 Answer on this question sheet

 Books, notes, laptops, iPads, … are NOT accepted

 Arithmetic-only calculators are accepted

 Show all your work, e.g., your solution process, the equation(s) that you use, the values

of the variables used the equation(s), …

 Include the unit of measurement in each answer

 Do NOT communicate with any other students

Problem 1 Use the node method to determine I 2 , I 3 , V A (1.5 points)

Student ID Number

Trang 5

HO CHI MINH CITY UNIVERSITY OF TECHNOLOGY – FACULTY OF ELECTRICAL AND ELECTRONICS ENGINEERING

Page 2 of 5

Problem 2 Use the “accurate” model for diode the following circuit (1.5 points)

a Assume that diode is on, calculate I D and verify the assumption

b Assume that diode is off, calculate V D and verify the assumption

Trang 6

HO CHI MINH CITY UNIVERSITY OF TECHNOLOGY – FACULTY OF ELECTRICAL AND ELECTRONICS ENGINEERING

Trang 7

HO CHI MINH CITY UNIVERSITY OF TECHNOLOGY – FACULTY OF ELECTRICAL AND ELECTRONICS ENGINEERING

Trang 8

HO CHI MINH CITY UNIVERSITY OF TECHNOLOGY – FACULTY OF ELECTRICAL AND ELECTRONICS ENGINEERING

Page 5 of 5

b Use the truth table given below for this problem Write the expression F1 in the canonical SOP

form

F1 =

Draw the AND-OR circuit for F1

c Write the canonical SOP expression for F in the following circuit

Trang 9

Bài tập chương 1 Phần 3

A Thuật toán đệ quy

Bài 1 Cho hàm đệ quy sau

Trang 10

C Cây đệ quy

Bài 1 Xác định một cận trên tốt cho công thức đệ quy 𝑇(𝑛) = 3𝑇 �𝑛2� + 𝑛 dùng phương pháp thế để xác nhận lại kết quả

Bài 2 Vẽ cây đệ quy cho 𝑇(𝑛) = 4𝑇 ��𝑛2�� + 𝑐𝑛 với 𝑐 là hằng số Đưa ra tiệm cận chặt cho công thức đệ

quy trên Xác nhận lại lời giải bằng phương pháp thế

Bài 4 Đánh giá thời gian thực hiện của thuật toán đệ quy sau theo mô hình O-lớn

int findMin( int S[], int start, int end)

{

if (start>=end) return S[end];

int div = (end-start)/2;

a) Phương pháp vét cạn: duyệt tất cả các số nguyên dương có thể cho tới khi tìm thấy

b) Dùng thuật toán Euclid: giả sử 𝑏 là số nhở hơn, nếu 𝑏 = 0 thì ước số chung lớn nhất là 𝑎, ngược lại

thì ước số chung lớn nhất của 𝑎 và 𝑏 cũng là ước số chung lớn nhất của 𝑏 và 𝑎%𝑏 (chia module, chia lấy phần dư) Cài đặt thuật toán Euclid theo 2 cách: lặp và đệ quy

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 11

Bài 2 Hãy viết chương trình để in ra màn hình tam giác số Pascal dạng hình vuông như sau

c) Vẽ tam giác Pascal dạng hình vuông

d) Cải tiến hàm tính 𝐶(𝑛, 𝑘) theo 2 cách: dùng đệ quy có nhớ, và không dùng đệ quy (dùng phương pháp lặp)

e) Đánh giá độ phức tạp của hàm 𝐶(𝑛, 𝑘) trong các trường hợp c,d theo các tiêu chí: bộ nhớ, thời gian

Bài 3 Hàm Ackermann được định nghĩa như sau

b) Viết hàm đệ quy để tính giá trị hàm Ackermann

c) Viết hàm không đệ quy để tính giá trị hàm Ackermann

F Thuật toán quay lui

Bài 1 Chiều cao tối đa của cây đệ quy của hàm solve_from trong bài toán 8 hậu ?

Bài 2 Thực hiện tiếp hàm solve_from để giải bài toán 8 hậu với trạng thái hiện tại của bàn cờ là

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 12

Chú ý : trong trường hợp này ta xếp các quân hậu lần lượt theo hàng chứ không phải theo cột

Bài 3 Thực hiện thuật toán backtracking bằng tay để tìm ra một lời giải cho bài toán đặt 5 quân hậu trên

bàn cờ kích thước 5x5

Bài 4 Cài đặt thuật toán backtracking để in ra lời giải có thể của bài toán 8 hậu

Bài 5 Xây dựng thuật toán backtracking để in ra tất cả các hoán vị của dãy {A,B,C,D,E}

Bài 6 Xây dựng thuật toán backtracking để giải bài toán ma phương (bậc chẵn và bậc lẻ)

Tham khảo : http://mathworld.wolfram.com/MagicSquare.html

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 13

Bài tập phần II Phần: Các cấu trúc dữ liệu cơ bản- Mảng, Danh sách

liên kết, danh sách tuyến tính Bài 1 Kiểu dữ liệu là gì ? cho ví dụ minh họa

Bài 2 Kiểu dữ liệu trừu tượng là gì? Nó khác gì so với định nghĩa kiểu dữ liệu?

Bài 3 Cấu trúc dữ liệu là gì ?

Bài 4 Phân loại cấu trúc dữ liệu? So sánh đặc điểm của các phân loại đó

Bài 5 Trình bày ưu nhược điểm của mảng (bao gồm cả mảng cấp phát tĩnh và mảng cấp phát

động)

Bài 6 Viết hàm để thực hiện thêm phần tử vào vị trí sau phần tử thứ k trong hai trường hợp :

mảng, và danh sách liên kết đơn

Bài 7 Viết hàm reverse để in ra các phần tử trong danh sách liên kết đơn theo thứ tự đảo ngược

typedef struct Node

{

int data;

struct Node *pNext;

} NODE;

//pHead là con trỏ đến đầu danh sách cần đảo ngược

void reverse(NODE *pHead)

Bài 8 Hoàn hiện phần thân hàm reverse để đảo ngược danh sách liên kết đơn

typedef struct Node

{

int data;

struct Node *pNext;

} NODE;

//pHead là con trỏ đến đầu danh sách cần đảo ngược

void reverse(NODE *&pHead)

Trang 14

Hãy đánh giá thời gian thực hiện thuật toán của bạn theo O-lớn.

Bài 9 Viết lại các hàm thực hiện các thao tác chèn, tìm kiếm và xóa phần tử trên danh sách liên kết

đơn dùng vòng lặp thay vì dùng đệ quy

Bài 10 Viết lại hàm xóa phần tử trong danh sách liên kết đơn mà không cần dùng thêm các hàm search_list, predecessor_list

Bài 11 Cho một dãy số nguyên bất kỳ có số lượng phần tử lớn hơn 2 Hãy viết hàm find để tìm và

in ra màn hình hai cặp phần tử có độ chênh lệch lớn nhất và nhỏ nhất trong dãy đã cho

Độ chệnh lệch giữa 2 số 𝑎, 𝑏 được định nghĩa là 𝑑 = |𝑎 − 𝑏|

//A là tên mảng chứa các phần tử

Hãy đưa ra đánh giá thời gian thực hiện của thuật toán của bạn theo O-lớn

Bài 12 Cho một dãy các số nguyên khác nhau đã được sắp theo thứ tự tăng dần Viết chương trình

kiểm tra xem có tồn tại phần tử nào mà giá trị của nó đúng bằng vị trí của nó

Ví dụ trong dãy {−10,−3, 3, 5, 7}, ta tìm được a3 = 3

Trong dãy {2, 3, 4, 5, 6, 7}, thì không tồn tại phần tử nào như vậy

Chú ý: Vị trí của phần tử được tính bắt đầu từ 1

Bài 13 Để biểu diễn kiểu dữ liệu ADT xâu ký tự trong máy tính người ta có thể làm theo những cách

Trang 15

3 Dùng danh sách liên kết để chứa các ký tự, kết thúc xâu khi phần tử cuối cùng là NULL

Hãy nhận xét về hiệu quả của mỗi phương pháp theo các tiêu chí

a) Kích thước bộ nhớ cần dùng để lưu trữ xâu ký tự

b) Các ký tự mà xâu có thể biểu diễn

c) Thời gian để truy cập vào ký tự thứ 𝑖 trong xâu

d) Thời gian thực hiện phép chèn, xóa ký tự trong xâu

Bài 14 Giả sử chúng ta có con trỏ trỏ đến phần tử cần xóa trong danh sách, có cách nào khác để

xóa phần tử đó khỏi danh sách mà không cần phải duyệt danh sách để tìm phần tử đứng trước

nó không ? Nếu có hãy mô tả phương pháp của bạn

Bài 15 Viết chương trình tìm phần tử có giá trị lớn nhất, nhỏ nhất trong danh sách móc nối đơn Bài 16 Xây dựng chương trình biểu diễn đa thức 𝑃𝑛(𝑥) = 𝑎𝑛𝑥𝑛+ 𝑎𝑛−1𝑥𝑛−1+ +𝑎1𝑥 + 𝑎0 với các thao tác cơ bản như hiển thị, cộng, trừ, nhân hai đa thức

Bài 17 So sánh ưu nhược điểm của mảng và cấu trúc liên kết khi dùng để lưu trữ kiểu dữ liệu trừu

tượng danh sách tuyến tính

Bài 18 Cần phải lưu trữ một danh sách tuyến tính là thông tin về khách hàng trong các ngày trong

tháng ở siêu thị Ta sẽ chọn cấu trúc dữ liệu nào để lưu trữ sao cho thao tác tìm kiếm là nhanh nhất và tiết kiệm bộ nhớ nhất nếu chúng ta biết:

a) Không biết trước số lượng khách hàng tối đa

b) Biết trước số lượng khách hàng tối đa nhưng số lượng khách hàng giữa các ngày khác nhau biến động rất lớn

c) Biết trước số lượng khách hàng tối đa, và số lượng khách hàng trong các ngày chênh lệch nhau không nhiều

Các cấu trúc có thể được lựa chọn là : Mảng tĩnh, mảng động, cấu trúc móc nối

Hãy giải thích lựa chọn của bạn trong từng trường hợp

Bài 19 Cài đặt chương trình mô phỏng bài toán Josephus trong slide

Bài 20 Cho một dãy số gồm 𝑛 số, hãy viết chương trình in ra các phần tử trong dãy theo chiều tăng

dần tần số xuất hiện

Ví dụ : dãy 1, 3, 4, 5, 7, 2, 3, 5 thì ta sẽ in ra 1, 2, 4, 7, 3, 5

Bài 21 Cài đặt các hàm thực hiện thao tác thêm, xóa và tìm kiếm đối với danh sách liên kết đôi Bài 22 Cài đặt các hàm thực hiện thao tác thêm, xóa và tìm kiếm đối với danh sách liên kết đôi nối

vòng (danh sách nối đôi sử dụng nút đầu giả)

Bài 23 Viết chương trình cài đặt mảng động để lưu trữ danh sách các phần tử theo cách sau:

• Ban đầu ta cấp phát bộ nhớ động là 10 phần tử

• Nếu mà ta phải thêm một phần tử mới khi mảng đã đầy thì ta gấp đôi kích thước mảng

và copy toàn bộ các phần tử của mảng cũ vào nửa đầu mảng mới, sau đó thêm phần tử mới vào mảng mới

• Nếu mà xóa một phần tử mà sau khi xóa thì số phần tử của mảng nhỏ hơn 1/2 kích thước của mảng thì ta tiến hành tạo mảng mới với kích thước bằng ½ kích thước mảng

cũ Sau đó copy toàn bộ các phần tử mảng cũ sang mảng mới

Trang 16

Hãy đánh giá thời gian thực hiện trong trường hợp tốt nhất, tồi nhất cả các thao tác thêm và xóa phần tử

Chỉ ra một trường hợp mà cách làm như vậy cho kết quả rất tồi Bạn có cách nào để cải thiện hiệu quả ?

Bài 24 Cho hai xâu ký tự s1 và s2 Hãy viết hàm stringmatch để kiểm tra xem xâu ký tự s2 có xuất

hiện trong s1 hay không Nếu có thì trả về vị trí xuất hiện đầu tiên của nó, ngược lại thì trả về giá trị là -1

Ví dụ: s1=”AbbAbbbabbb”, s2=”ab” thì hàm stringmatch(s1,s2) sẽ trả về giá trị 7

Hãy đánh giá hiệu quả của thuật toán của bạn

Bài 25 Trò chơi dò mìn

Giả sử chúng ta mô tả bãi mìn bằng một ma trận với kích thước 𝑁 × 𝑀 (𝑁 hàng và 𝑀 cột) Những vị trí có mìn được đánh dấu bằng ký tự ‘*’, còn những vị trí không có mìn là ký tự ‘.’ Hãy xây dựng một ma trận tương đương để mô tả các cảnh báo có mìn của các ô xung quanh Với mỗi ô có mìn thì ta vẫn biểu diễn bằng ký tự ‘*’, còn những ô xung quanh ta biểu diễn bằng các chữ số mô tả số ô có mìn mà lân cận với nó

Ở đây 1 ô sẽ lân cận với 8 ô xung quanh

Ví dụ

Bãi mìn kích thước 4 × 5 được biểu diễn lại như sau

Hãy xây dựng hàm

Calculate(char MineField[10][10], char Output[10][10], int N, int M)

Để tính toán các giá trị cho mảng Output với đầu vào là mảng mô tả bãi mìn MineField

1 ≤ 𝑁, 𝑀 ≤ 10 là kích thước thực sự của bãi mìn hiện tại

Bài 26 Cho kiểu dữ liệu trừu tượng tập hợp với

• Các phần tử của tập hợp là các số nguyên

• Các phép toán của tập hợp gồm :

Trang 17

o Member(x,S): Kiểm tra xem phần tử x có thuộc tập hợp S hay không

o Union(A,B): Hợp của hai tập hợp A, B, trả về một tập hợp 𝐴 ∪ 𝐵 thông qua tập

o Insert(x,S): thêm phần tử x vào tập hợp S

o Delete(x,S) : loại bỏ phần tử x khỏi tập S (nếu x có trong S)

Hãy cài đặt ADT trên sử dụng các phương pháp biểu diễn

a) Mảng

b) Danh sách liên kết

c) Xâu bit (bit 1 biểu diễn phần tử có trong tập hợp và bit 0 biểu diễn phần tử không có) Chú ý: Đối với cách biểu diễn thứ 3 các phần tử phải được biểu diễn theo một thứ tự xác định Các phần tử trong tập hợp không trùng nhau.

Bài 27 Cho một dãy số nguyên dương gồm n số, khoảng cách giữa hai vị trí chính là độ chênh lệch

về giá trị của hai số tại vị trí đó

Ví dụ cho dãy gồm 5 số 1, 3, 4, 3, 7 Chêch lệch giữa số thứ 1 và 4 là 3 − 1 = 2

Chọn một vị trí k bất trong dãy n số, tổng độ chệnh lệch của vị trí k với tất cả 𝑛 − 1 vị trí còn lại được tính bằng tổng độ chênh lệch của số ở vị trí 𝑘 tới 𝑛 − 1 vị trí còn lại

Ví dụ với k=2 (số giá trị 3) thì tổng độ chêch lệch ứng với 2 sẽ là 2+1+0+4=7

Hãy viết chương trình tìm vị trí k sao cho có tổng độ chênh lệch là nhỏ nhất

Bài 28 Viết chương trình đảo ngược thứ tự các từ trong một câu được nhập vào từ bàn phím

Ví dụ Câu đầu vào là “ the quick brown fox jumps over the lazy dog”

Thì kết quả hiển thị ra màn hình sẽ là câu “dog lazy the over jumps fox brown quick the”

Bài 29 Nhập vào từ bàn phím một dãy số thực gồm n số (0<n<100) Thực hiện các công việc sau:

• In ra màn hình dãy số vừa nhập

• Tìm và in ra màn hình các số âm trong dãy, nếu không có số nào thì in ra thông báo “Dãy không có số âm”

• Tìm và in ra màn hình giá trị phần tử dương lớn nhất, nhỏ nhất trong dãy

• Nhập vào một giá trị k, xóa tất cả các phàn tử có giá trị lớn hơn k trong dãy In ra màn hình dãy sau khi xóa

Bài 30 Giáo viên chủ nhiệm muốn quản lý thông tin về tình hình học tập của tất cả các thành viên

trong lớp Thông tin về mỗi thành viên gồm:

• Họ tên

• Giới tính

• Ngày sinh (lưu bằng xâu ký tự)

Ngày đăng: 01/03/2022, 13:39

TỪ KHÓA LIÊN QUAN

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