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

Dap an tham khao de thi giua ky CTDL HK2 2015 2016

7 52 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 7
Dung lượng 250,48 KB

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

Nội dung

ĐẠI HỌC QUỐC GIA TP.HCM TRƯỜNG ĐẠI HỌC CNTT CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập -Tự do - Hạnh phúc ĐỀ THI GIỮA KỲ MÔN CẤU TRÚC DỮ LIỆU & GIẢI THUẬT THỜI GIAN: 60 PHÚT Sinh viên kh

Trang 1

ĐẠI HỌC QUỐC GIA TP.HCM

TRƯỜNG ĐẠI HỌC CNTT

CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM

Độc lập -Tự do - Hạnh phúc

ĐỀ THI GIỮA KỲ MÔN CẤU TRÚC DỮ LIỆU & GIẢI THUẬT

THỜI GIAN: 60 PHÚT Sinh viên không tham khảo tài liệu

Câu 1:

a Trình bày ý tưởng thuật toán tìm kiếm nhị phân (2 đ)

Sinh viên trình bày được ý tưởng của thuật toán :

- Thuật toán chỉ thực hiện đúng khi dãy / mảng đã có thứ tự

- Khác với thuật toán tìm kiếm tuyến tính, thuật toán tìm kiếm nhị phân không

so sánh phần tử cần tìm kiếm với tất cả phần tử trong dãy /mảng, mà so sánh với phần tử ở giữa dãy / mảng để quyết định phần tử sẽ so sánh trong bước tiếp theo nằm ở nửa bên trái hay bên phải của phần tử đang xét trong dãy/mảng tìm kiếm cho đến khi tìm thấy hoặc kết thúc thuật toán

b Mô tả từng bước kết quả chạy thuật toán tìm giá trị x=10 trong mảng A={1,

2, 3, 4, 6, 7, 8, 9} bằng phương pháp tìm kiếm nhị phân (2 đ)

Số phần tử N= 8, phần tử cần tìm X= 10

Lần 1

Trang 2

Left = 0, Right = N - 1 = 7

Mid = (Left + Right) / 2 = (0 + 7) / 2 = 3

0.25 đ

A[Mid] = A[3] = 4 < X =10 : cập nhật Left = Mid +1 = 3 +1 = 4

Do Left <= Right : thuật toán tiếp tục

Lần 2

0.25 đ

Left = 4, Right = N - 1 = 7

Mid = (Left + Right) / 2 = (4 + 7) / 2 = 5

0.25 đ

A[Mid] = A[5] = 7 < X =10 : cập nhật Left = Mid +1 = 5 +1 = 6

Do Left <= Right : thuật toán tiếp tục

Lần 3

0.25 đ

Left = 6, Right = N - 1 = 7

Mid = (Left + Right) / 2 = (6 + 7) / 2 = 6

0.25 đ

A[Mid] = A[6] = 8 < X =10 : cập nhật Left = Mid +1 = 6 +1 = 7

Do Left <= Right : thuật toán tiếp tục

Trang 3

Lần 4

0.25 đ

Left = 7, Right = N - 1 = 7

Mid = (Left + Right) / 2 = (7 + 7) / 2 = 7

0.25 đ

A[Mid] = A[7] = 9 < X =10 : cập nhật Left = Mid +1 = 7 +1 = 8

Do Left > Right : thuật toán kết thúc

Kết luận : không có X = 10 trong dãy

Câu 2:

a Trình bày ý tưởng thuật toán sắp xếp Quick Sort (2 đ)

Thuật toán QuickSort sắp xếp dãy a

1 , a

2 ., a

N dựa trên việc phân hoạch dãy ban đầu thành 3 đoạn / phần :

Đoạn 1: Gồm các phần tử có giá trị bé hơn x Đoạn 2: Gồm các phần tử có giá trị bằng x Đoạn 3: Gồm các phần tử có giá trị lớn hơn x

với x là giá trị của một phần tử tùy ý trong dãy ban đầu

Sau khi thực hiện phân hoạch, dãy ban đầu được phân thành 3 đoạn:

Xét từng đoạn :

- Xét đoạn thứ 2 : đã có thứ tự, không cần sắp xếp

- Xét đoạn 1 và 3 :

+ Nếu các đoạn 1 và 3 chỉ có 1 phần tử : đã có thứ tự, không cần

sắp xếp khi đó dãy ban đầu đã được sắp xếp

Trang 4

có thứ tự khi các đoạn 1, 3 được sắp Để sắp xếp các đoạn 1 và 3, ta lần

lượt tiến hành việc phân hoạch từng dãy con theo cùng phương pháp phân hoạch dãy ban đầu vừa trình bày

b Mô tả từng bước kết quả chạy thuật toán với mảng các số nguyên cho dưới đây để sắp xếp mảng giảm dần: (2 đ)

22 12 9 7 31 19 27

0.5 đ

Số phần tử N= 7

Giả sử chọn phần tử phân hoạch : phần tử đầu dãy X= 22

Ta được :

Đoạn 1 : 12, 9, 7, 19

Đoạn 2 : 22

Đoạn 3 : 31, 27

0.5 đ

Phân đoạn : đoạn 1 của dãy đã cho : 12, 9, 7, 19

Giả sử chọn phần tử phân hoạch : phần tử đầu dãy X= 12

Ta được :

Đoạn 1.1 : 9, 7

Đoạn 1.2 : 12

Đoạn 1.3 : 19

Trang 5

9 7 12 19

0.5 đ

Phân đoạn đoạn 1.1 tiếp theo

Giả sử chọn phần tử phân hoạch : phần tử đầu dãy X= 9

Ta được :

Đoạn 1.1.1 : 7

Đoạn 1.1.2 : 9

Đoạn 1.1.3 : không có phần tử

Vậy đoạn 1 đã sắp xếp :

0.5 đ

Phân đoạn : đoạn 3 của dãy đã cho: 31, 27

Giả sử chọn phần tử phân hoạch : phần tử đầu dãy X= 31

Ta được :

Đoạn 3.1 : 27

Đoạn 3.2 : 31

Đoạn 3.3 : không có phần tử

Vậy đoạn 3 đã sắp xếp :

Trang 6

7 9 12 19 22 27 31

Câu 3 :

Viết hàm cài đặt thuật toán sắp xếp chọn trực tiếp (selection sort) (2 đ)

Viết được hàm sắp xếp : 1.5 đ

0.5 đ

void SelectionSort(int a[],int N )

{

int min;

int i,j;

for (i=0; i< N-1 ; i++)

0.75 đ

min = i;

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

0.25 đ

Swap(a[min],a[i]); // Hàm hoán vị hai giá trị

} }

Viết được hàm hoán vị Swap : 0,5 đ

0.25 đ

void Swap(int a, int b )

{

int temp ;

0.25 đ

Trang 7

temp = a ;

a = b ;

b = temp ;

}

Hết

Ngày đăng: 25/10/2019, 11:17

TỪ KHÓA LIÊN QUAN

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

w