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

Đáp án lý thuyết kỹ thuật lập trình

21 23 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 21
Dung lượng 327 KB

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

Nội dung

Danh sách liên kết đơn là một cấu trúc dữ liệu bao gồm một tập các nút, mà mỗi nút bao temp ->next = NULL; if list == NULL //nếu phần tử đầu tiên là rỗng thì gán phần tử đó bằng temp Câ

Trang 1

ĐÁP ÁN LÝ THUYẾT KTLT

Câu 1: Nêu khái niệm và vai trò của sắp xếp Cho ví dụ minh họa về vai trò của sắp xếp.

Trả lời:

Khái niệm: Sắp xếp là quá trình bố trí các phần tử trong một tập hợp theo một trình tự

nào đó Trong khoa học máy tính và trong toán học, thuật toán sắp xếp là một thuật toán sắpxếp các phần tử của một danh sách (hoặc một mảng) theo thứ tự (tăng hoặc giảm)

Vai trò: Sắp xếp nhằm mục đích giúp quản lý và tìm kiếm các phần tử dễ dàng và nhanh

chóng hơn

Ví dụ: Các ứng dụng quản ký danh bạ điện thoại thì có sắp xếp theo số, theo tên Quản lý

học sinh thì có sắp xếp theo điểm, theo lớp, theo trường

Câu 2: Nêu ý tưởng giải thuật sắp xếp chèn Cho ví dụ và thực hiện từng bước của giải thuật

B1: Khởi tạo mảng với dãy con đã sắp xếp có k = 1 phần tử (phần tử đầu tiên – phần tử

có chỉ số 0)

B2: Duyệt từng phần tử từ phần tử thứ 2, tại mỗi lần duyệt phần tử ở chỉ số i thì đặtphần tử đó vào vị trí nào đó trong đoạn từ [0 … i] sao cho dãy số từ [0…i] vẫn đảm bảo tínhchất dãy số tăng dần Sau mỗi lần duyệt, số phần tử đã được sắp xếp trong mảng tăng thêm 1phần tử

B3: lặp cho tới khi duyệt hết tất cả các phần tử của mảng

Trang 2

Câu 3: Nêu ý tưởng giải thuật sắp xếp chọn Cho ví dụ và thực hiện từng bước của giải thuật

sắp xếp chọn

Trả lời:

Ý tưởng:

- Tìm phần tử nhỏ nhất trong mảng đưa lên vị trí đầu tiên

- Giả sử có k phần tử ở đầu đã được sắp xếp

- Tìm phần tử bé nhất từ k+1 đến n, đổi chổ cho phần tử tại k+1

− Xét 2 phần tử đầu tiên của dãy, nếu không đúng thứ tự thì đổi chỗ cho nhau

− Tiếp tục xét các cặp đến cuối dãy

− Lặp lại quá trình với cặp đầu dãy đến khi không có cặp nào sai thứ tự

Sắp xếp dãy: X ={ 14 33 27 35 10} thành dãy không giảm

Trang 3

Câu 5: Trình bày phương pháp tìm kiếm tuần tự cho danh sách đã sắp xếp và danh sách chưa

sắp xếp Nhập một dãy số nguyên đã sắp xếp, sử dụng phương pháp tìm kiếm tuần tự để tìmtất cả các phần tử có giá trị bằng x được nhập

Trả lời:

Thuật toán tìm kiếm tuyến tính (linear search) hay còn gọi là thuật toán tìm kiếm tuần

tự (Sequential search) là một phương pháp tìm kiếm một phần tử cho trước trong một danh

sách bằng cách duyệt lần lượt từng phần tử của danh sách đó cho đến lúc tìm thấy giá trịmong muốn hay đã duyệt qua toàn bộ danh sách

Ý tưởng thuật toán: xét dãy số cần tìm có n phần tử: a[0], a[1], a[2], , a[n-1].Giá trị

cần tìm là x

- Bắt đầu từ khoá đầu tiên, lần lượt so sánh khoá x với khoá tương ứng trong dãy

- Quá trình tìm kiếm kết thúc khi tìm được khoá thoả mãn hoặc đi đến hết dãy hoặc gặp điều kiện dừng vòng lặp

Với danh sách chưa sắp xếp, ta tìm kiếm đến khi tìm thấy phần tử có giá trị bằng giá trị

cần tìm, nếu phần tử cuối cùng của danh sách không bằng thì kết luận không tìm thấy Với

danh sách đã sắp xếp, ta phải duyệt danh sách để tìm kiếm, nếu giá trị của phần tử lớn hơn giá

trị cần tìm thì dừng lại và không kết luận tìm thấy

Trên danh sách đã được sắp xếp

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

int i=0;

while (i <n && a[i]<x)

i = i+1;

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

else return 0; // giá trị trả về là i (tìm thấy), 0 (không tìm thấy)

}

Trên danh sách chưa sắp xếp

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

Trang 4

Trả lời:

Phép tìm kiếm nhị phân được thực hiện trên dãy khoá có thứ tự (xét dãy tăng dần): a[0] <= a[1] <= a[2] <= <= a[n-1] Giá trị cần tìm x

Chia đôi dãy khoá cần tìm kiếm So sánh khoá giữa dãy với x, có 3 trường hợp xảy ra:

- Giá trị khoá này bằng x, tìm kiếm thành công

- Giá trị khoá này lớn hơn x, thì ta tiến hành tìm x với nữa bên trái của khoá này

- Giá trị khoá này nhỏ hơn x, thì ta tiến hành tìm x với nữa bên phải của khoá nàyTrường hợp tìm kiếm thất bại khi dãy khoá cần tìm không có phần tử nào

• Ví dụ:

Giả sử chúng ta cần tìm vị trí của giá trị 31 trong một mảng bao gồm các giá trị như hìnhdưới đây bởi sử dụng Binary Search:

Đầu tiên, chúng ta chia mảng thành hai nửa theo phép toán sau:

mid = left + (right + left)/ 2

Với ví dụ trên là 0 + (9 – 0)/ 2 = 4 (giá trị là 4.5) Do đó 4 là chỉ mục giữa của mảng

Bây giờ chúng ta so sánh giá trị phần tử giữa với phần tử cần tìm Giá trị phần tử giữa là

27 và phần tử cần tìm là 31, không bằng nhau Bởi vì giá trị cần tìm là lớn hơn nên phần tửcần tìm sẽ nằm ở mảng con bên phải phần tử giữa

Chúng ta thay đổi giá trị left thành (mid + 1) và lại tiếp tục tìm kiếm giá trị mid

left = mid + 1

mid = left + (right + left)/ 2

Bây giờ mid của chúng ta là 7 Chúng ta so sánh giá trị tại chỉ mục này với giá trị cần tìm

Giá trị tại chỉ mục 7 là không kết nối, và ngoài ra giá trị cần tìm là nhỏ hơn giá trị tại chỉmục 7 do đó chúng ta cần tìm trong mảng con bên trái của chỉ mục giữa này

Trang 5

Tiếp tục tìm mid lần nữa Lần này nó có giá trị là 5.

So sánh giá trị tại chỉ mục 5 với giá trị cần tìm và thấy rằng nó bằng nhau

Do đó chúng ta kết luận rằng giá trị cần tìm 31 được lưu giữ tại vị trí chỉ mục 5

Câu 7: Trình bày cấu trúc dữ liệu danh sách liên kết đơn Cài đặt thao tác thêm một phần tử

vào đầu danh sách

Node*temp =new Node; //câp vùng nhớ cho temp

temp->value =x; //gán giá trị x cho node temp

temp->next = NULL; //cho con trỏ next của node temp trỏ tới null

if (list == NULL) //nếu phần tử đầu tiên là rỗng thì gán phần tử bằng temp

Câu 8: Trình bày cấu trúc dữ liệu danh sách liên kết đơn Cài đặt thao tác thêm một phần tử

vào cuối danh sách

Trả lời:

Trang 6

Danh sách liên kết đơn là một cấu trúc dữ liệu bao gồm một tập các nút, mà mỗi nút bao

temp ->next = NULL;

if (list == NULL) //nếu phần tử đầu tiên là rỗng thì gán phần tử đó bằng temp

Câu 9: Trình bày cấu trúc dữ liệu danh sách liên kết đơn Cài đặt thao tác thêm một phần tử

vào sau phần tử thứ p trong danh sách

Trả lời:

Danh sách liên kết đơn là một cấu trúc dữ liệu bao gồm một tập các nút, mà mỗi nút bao

gồm:

Trang 7

- Dữ liệu cần lưu trữ.

- Liên kết đến nút tiếp theo

void ThemNode_VaoSauNode_p(int x, int vt)

Trang 8

Câu 10: Trình bày cấu trúc dữ liệu danh sách liên kết đơn Cài đặt thao tác xóa một phần tử ở

cout << "Danh sach rong" << endl;

while (temp->next->next != NULL)

Trang 9

Câu 12: Trình bày cấu trúc dữ liệu danh sách liên kết đơn Cài đặt thao tác xóa một phần tử vào

sau phần tử thứ p trong danh sách

Trả lời:

Danh sách liên kết đơn là một cấu trúc dữ liệu bao gồm một tập các nút, mà mỗi nút bao

gồm:

- Dữ liệu cần lưu trữ

- Liên kết đến nút tiếp theo

void DelAt(int a){

if(list == NULL)

cout << "khong co gi de xoa"; // Nếu DS rỗng thì không có gì để xóa

// Bắt đầu tìm vị trí cần xóa Ta sẽ dùng k để đếm cho vị trí

Trang 10

Câu 13: Trình bày cấu trúc dữ liệu danh sách liên kết đơn Cài đặt thao tác làm rỗng một danh

Câu 14: Trình bày khái niệm cấu trúc dữ liệu stack (ngăn xếp) Cài đặt stack bằng mảng Trình

bày thao tác pop của stack đã cài đặt

Trả lời:

Ngăn xếp (Stack) là một danh sách mà ta

giới hạn việc thêm vào hoặc loại bỏ một phần tử

chỉ thực hiện tại một đầu của danh sách, đầu này

gọi là đỉnh (top) của ngăn xếp

Có thể hình dung stack như một chồng đĩa

Muốn thêm vào chồng đó 1 đĩa ta để đĩa mới trên

đỉnh chồng, muốn lấy các đĩa ra khỏi chồng ta

cũng lấy đĩa trên trước Như vậy ngăn xếp là một

cấu trúc có tính chất “vào sau – ra trước” – LIFO

Trang 11

Câu 15: Trình bày khái niệm cấu trúc dữ liệu stack (ngăn xếp) Cài đặt stack bằng mảng Trình

bày thao tác push của stack đã cài đặt

Trả lời:

Ngăn xếp (Stack) là một danh sách mà ta

giới hạn việc thêm vào hoặc loại bỏ một phần tử

chỉ thực hiện tại một đầu của danh sách, đầu này

gọi là đỉnh (top) của ngăn xếp

Có thể hình dung stack như một chồng đĩa

Muốn thêm vào chồng đó 1 đĩa ta để đĩa mới trên

đỉnh chồng, muốn lấy các đĩa ra khỏi chồng ta cũng

lấy đĩa trên trước Như vậy ngăn xếp là một cấu

trúc có tính chất “vào sau – ra trước” – LIFO

Câu 16: Trình bày khái niệm cấu trúc dữ liệu stack (ngăn xếp) Cài đặt stack bằng mảng Trình

bày thao tác peek của stack đã cài đặt

Trả lời:

Ngăn xếp (Stack) là một danh sách mà ta

giới hạn việc thêm vào hoặc loại bỏ một phần tử

chỉ thực hiện tại một đầu của danh sách, đầu này

gọi là đỉnh (top) của ngăn xếp

Có thể hình dung stack như một chồng đĩa

Muốn thêm vào chồng đó 1 đĩa ta để đĩa mới trên

đỉnh chồng, muốn lấy các đĩa ra khỏi chồng ta

cũng lấy đĩa trên trước Như vậy ngăn xếp là một

cấu trúc có tính chất “vào sau – ra trước” – LIFO

else return stack[top];

}

Trang 12

Câu 17: Trình bày khái niệm cấu trúc dữ liệu stack (ngăn xếp) Cài đặt stack bằng danh sách liên

kết Trình bày thao tác pop của stack đã cài đặt

Trả lời:

Ngăn xếp (Stack) là một danh sách mà ta

giới hạn việc thêm vào hoặc loại bỏ một phần tử

chỉ thực hiện tại một đầu của danh sách, đầu này

gọi là đỉnh (top) của ngăn xếp

Có thể hình dung stack như một chồng đĩa

Muốn thêm vào chồng đó 1 đĩa ta để đĩa mới trên

đỉnh chồng, muốn lấy các đĩa ra khỏi chồng ta

cũng lấy đĩa trên trước Như vậy ngăn xếp là một

cấu trúc có tính chất “vào sau – ra trước” – LIFO

Cài đặt stack bằng danh sách:

Trang 13

Câu 18: Trình bày khái niệm cấu trúc dữ liệu stack (ngăn xếp) Cài đặt stack bằng danh sách liên

kết Trình bày thao tác push của stack đã cài đặt

Trả lời:

Ngăn xếp (Stack) là một danh sách mà ta

giới hạn việc thêm vào hoặc loại bỏ một phần tử

chỉ thực hiện tại một đầu của danh sách, đầu này

gọi là đỉnh (top) của ngăn xếp

Có thể hình dung stack như một chồng đĩa

Muốn thêm vào chồng đó 1 đĩa ta để đĩa mới trên

đỉnh chồng, muốn lấy các đĩa ra khỏi chồng ta

cũng lấy đĩa trên trước Như vậy ngăn xếp là một

cấu trúc có tính chất “vào sau – ra trước” – LIFO

Cài đặt stack bằng danh sách:

Trang 14

Câu 19: Trình bày khái niệm cấu trúc dữ liệu stack (ngăn xếp) Cài đặt stack bằng danh sách liên

kết Trình bày thao tác peek của stack đã cài đặt

Trả lời:

Ngăn xếp (Stack) là một danh sách mà ta

giới hạn việc thêm vào hoặc loại bỏ một phần tử

chỉ thực hiện tại một đầu của danh sách, đầu này

gọi là đỉnh (top) của ngăn xếp

Có thể hình dung stack như một chồng đĩa

Muốn thêm vào chồng đó 1 đĩa ta để đĩa mới trên

đỉnh chồng, muốn lấy các đĩa ra khỏi chồng ta

cũng lấy đĩa trên trước Như vậy ngăn xếp là một

cấu trúc có tính chất “vào sau – ra trước” – LIFO

Cài đặt stack bằng danh sách:

Trang 15

Câu 20: Trình bày khái niệm cấu trúc dữ liệu stack (ngăn xếp) Trình bày ý tưởng đảo một mảng

số nguyên có sử dụng stack

Trả lời:

Ngăn xếp (Stack) là một danh sách mà ta

giới hạn việc thêm vào hoặc loại bỏ một phần tử

chỉ thực hiện tại một đầu của danh sách, đầu này

gọi là đỉnh (top) của ngăn xếp

Có thể hình dung stack như một chồng đĩa

Muốn thêm vào chồng đó 1 đĩa ta để đĩa mới trên

đỉnh chồng, muốn lấy các đĩa ra khỏi chồng ta

cũng lấy đĩa trên trước Như vậy ngăn xếp là một

cấu trúc có tính chất “vào sau – ra trước” – LIFO

Ý tưởng đảo một mảng số nguyên có sử

dụng stack:

-Duyệt từ đầu mảng đến cuối mảng Lần lượt cho các phần tử duyệt được vào ngăn xếp,cho hết mảng vào ngăn xếp

-Lần lượt lấy các phần tử từ ngăn xếp và in ra cho đến khi ngăn xếp rỗng

Câu 21: Trình bày khái niệm cấu trúc dữ liệu stack (ngăn xếp) Trình bày ý tưởng đảo chuỗitheo từ có sử dụng stack

Trả lời:

Ngăn xếp (Stack) là một danh sách mà ta

giới hạn việc thêm vào hoặc loại bỏ một phần tử

chỉ thực hiện tại một đầu của danh sách, đầu này

gọi là đỉnh (top) của ngăn xếp

Có thể hình dung stack như một chồng đĩa

Muốn thêm vào chồng đó 1 đĩa ta để đĩa mới trên

đỉnh chồng, muốn lấy các đĩa ra khỏi chồng ta

cũng lấy đĩa trên trước Như vậy ngăn xếp là một

cấu trúc có tính chất “vào sau – ra trước” – LIFO

Ý tưởng đảo chuỗi theo từ có sử dụng stack:

- Duyệt từ đầu xâu đến cuối xâu Lần lượt cho các ký tự duyệt được vào ngăn xếp, cho hếtcác ký tự vào ngăn xếp

- Lần lượt lấy các phần tử từ ngăn xếp và in ra cho đến khi ngăn xếp rỗng

Trang 16

Câu 22: Trình bày khái niệm cấu trúc dữ liệu stack (ngăn xếp) Trình bày ý tưởng chuyển đổi

một số từ cơ số 10 sang cơ số 2 có sử dụng stack

Trả lời:

Ngăn xếp (Stack) là một danh sách mà ta

giới hạn việc thêm vào hoặc loại bỏ một phần tử

chỉ thực hiện tại một đầu của danh sách, đầu này

gọi là đỉnh (top) của ngăn xếp

Có thể hình dung stack như một chồng đĩa

Muốn thêm vào chồng đó 1 đĩa ta để đĩa mới trên

đỉnh chồng, muốn lấy các đĩa ra khỏi chồng ta

cũng lấy đĩa trên trước Như vậy ngăn xếp là một

cấu trúc có tính chất “vào sau – ra trước” – LIFO

Ý tưởng chuyển đổi một số từ cơ số 10 sang

cơ số 2 có sử dụng stack:

-Lấy số cần chuyển chia lấy dư cho cơ số 2 và đẩy vào stack

-Tiếp tục lấy kết quả của phép chia đó chia cho cơ số 2 cho đến khi kết quả bằng khôngthì dừng

-Lấy lần lượt các số trong stack ra ta được số cần tìm

Câu 23: Trình bày khái niệm cấu trúc dữ liệu stack (ngăn xếp) Trình bày ý tưởng chuyển đổi

một số từ cơ số 10 sang cơ số 16 có sử dụng stack

Trả lời:

Ngăn xếp (Stack) là một danh sách mà ta

giới hạn việc thêm vào hoặc loại bỏ một phần tử

chỉ thực hiện tại một đầu của danh sách, đầu này

gọi là đỉnh (top) của ngăn xếp

Có thể hình dung stack như một chồng đĩa

Muốn thêm vào chồng đó 1 đĩa ta để đĩa mới trên

đỉnh chồng, muốn lấy các đĩa ra khỏi chồng ta

cũng lấy đĩa trên trước Như vậy ngăn xếp là một

cấu trúc có tính chất “vào sau – ra trước” – LIFO

Ý tưởng chuyển đổi một số từ cơ số 10 sang

cơ số 16 có sử dụng stack:

-Lấy số cần chuyển chia lấy dư cho cơ số 16 và đẩy vào stack

-Tiếp tục lấy kết quả của phép chia đó chia cho cơ số 16 cho đến khi kết quả bằng khôngthì dừng

-Lấy lần lượt các số trong stack ra, nếu số lấy ra >= 10 thì ta in ra ký tự A, B, C …, F tươngứng từ 10-15 Khi đó, ta được số cần tìm

Trang 17

Câu 24: Trình bày khái niệm về cấu trúc dữ liệu queue (hàng đợi) Cài đặt hàng đợi tuyền tính

bằng mảng, DSLK Trình bày thao tác lấy một phần tử trên hàng đợi tuyến tính (Dequeue)

Trả lời:

Queue: Queue là một danh sách mà các đối tượng đượcbthêm vào ở một đầu của danhsách và lấy ra ở một đầu kia của danh sách Vì thế, việc thêm một đối tượng vào Queue hoặclấy một đối tượng ra khỏi Queue được thực hiện theo cơ chế FIFO (First In First Out - Vàotrước ra trước) Phần tử được lấy ra ở phần đầu queue (front/ first), và được thêm vào ở cuốiqueue (rear/last)

Cài đặt hàng đợi tuyền tính bằng mảng:

return;

} x=queue[front];

Câu 25: Trình bày khái niệm về cấu trúc dữ liệu queue (hàng đợi) Cài đặt hàng đợi tuyến tính

bằng mảng Trình bày thao tác thêm một phần tử vào hàng đợi tuyến tính (Enqueue)

Trang 18

Trả lời:

Queue: Queue là một danh sách mà các đối tượng đượcbthêm vào ở một đầu của danhsách và lấy ra ở một đầu kia của danh sách Vì thế, việc thêm một đối tượng vào Queue hoặclấy một đối tượng ra khỏi Queue được thực hiện theo cơ chế FIFO (First In First Out - Vàotrước ra trước) Phần tử được lấy ra ở phần đầu queue (front/ first), và được thêm vào ở cuốiqueue (rear/last)

Cài đặt hàng đợi tuyền tính bằng mảng:

Câu 26: Trình bày khái niệm về cây nhị phân tìm kiếm Cài đặt cây nhị phân tìm kiếm bằng danh

sách liên kết Trình bày thao tác thêm một node vào cây nhị phân tìm kiếm

Trang 19

Trả lời:

Cây nhị phân tìm kiếm là một cấu trúc dữ

liệu đặc biệt được sử dụng cho mục đích tìm

kiếm hiệu quả Một cây nhị phân có một điều

kiện đặc biệt là mỗi nút có thể có tối đa hai nút

con Các khóa của node trên cây con bên trái

nhỏ hơn khóa của root, khóa của các node trên

cây con bên phải lớn hơn khóa của root Cây con

bên trái và phải cũng là cây nhị phân tìm kiếm

Cấu tạo gồm 3 phần:

• Node gốc (root): là node bắt đầu hay còn gọi là "rễ"

• Node trong (internal node): là node có ít nhất 1 con

• Node lá (leaf): là node không có con

Cài đặt cây nhị phân tìm kiếm bằng danh sách liên kết

Ngày đăng: 16/02/2022, 20:23

TỪ KHÓA LIÊN QUAN

w