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

CÁC VẤN ĐỀ CẦN QUAN TÂM CÂU TRÚC DỮ LIỆU VÀ GIẢI THUẬT

32 537 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 32
Dung lượng 0,92 MB

Nội dung

1.Hãy nêu vai trò tổ chưc dữ lieu trong máy tính. Bộ nhớ máy vi tính chưa bộ mã nào, Các hệ cơ số đếm trong máy tính, Cách chuyển đổi cơ số trong máy tính sang cơ số thập phân.2, Hãy nêu mối lien hệ cấu truc dữ liệu và giải thuật trong Công nghệ lập trình. Vai trò chương trình của máy tính đóng vai trò gì trong xử lý thong tin.3. Hãy đưa các khái niêm các kiểu dữ liệu trong cấu truc dữ liệu máy tính.4. Anh (Chị) hiểu thế nào kiểu dữ liệu tĩnh và dộng (Cho Ví dụ) chi tiết từng loại bằng C++7.Nêu các ví dụ nguyên tắc cài đặt hàm tìm kiếm bằng mã giả đê thực hiện tìm kiếm theo thuật toán tuyến tính.8. Nêu các ví dụ nguyên tắc cài đặt hàm tìm kiếm bằng mã giả đê thực hiện tìm kiếm theo thuật toán nhị phân.(Binary Search)9. Hãy nêu 5 giải thuật sắp xếp căn bản, nêu ý tưởng của từng loại. Cho ví dụ ít nhất hai giải thuật (Viết bằng NN C++)10. Hãy nêu độ phức tạp của 5 loại thuật toán sắp xếp căn bản, theo Anh (Chị) loại nào có tốc đọ tìm kiếm nhanh nhất, loại nào chậm nhất.

Trang 1

CÁC VẤN ĐỀ CẦN QUAN TÂM CÂU TRÚC DỮ LIỆU VÀ GIẢI THUẬT

1.Hãy nêu vai trò tổ chưc dữ lieu trong máy tính Bộ nhớ máy vi tính chưa bộ mã nào, Các hệ cơ số đếm trong máy tính, Cách chuyển đổi cơ số trong máy tính sang cơ số thập phân.

 Vai trò tổ chức dữ liệu trong máy tính: Nhằm mục đích khai thác hiệu quả các dữ liệu trong máy tính

 Bộ nhớ máy tính chứa bộ mã:

 Các hệ cơ số đếm trong máy tính: Hệ nhị phân (cơ số 2), hệ thập phân (cơ số 10), hệ thập lục phân (cơ số 16)

 Cách chuyển đổi cơ số trong máy tính sang cơ số thập phân:

Bảng quy tắc: binary (nhị phân), hex (thập lục phân), decimal (thập phân)

Trang 2

- Chuyển từ nhị phân sang thập phân:

- Chuyển từ thập lục phân sang thập phân:

Để chuyển đổi từ hex sang decimal đầu tiên ta chuyển hex sang binary, sau đó lại từ binary

ta chuyển về decimal

Lấy số FEED làm ví dụ:

Từ hex sang binary:

FEED (hex) = 1111 1110 1110 1101 (binary)

Từ binary sang decimal:

1*(2^15) + 1*(2^14) + 1*(2^13) + 1*(2^12) + 1*(2^11) + 1*(2^10) +1*(2^9) + 0*(2^8) + 1*(2^7) +1*(2^6) +1*(2^5) + 0*(2^4) +1*(2^3) +1*(2^2) + 0*(2^1) + 1*(2^0) = 65261Như vậy:

FEED (hex) = 1111111011101101 (binary) = 65261 (decimal)

Cách 2:

Tính luôn FEED= (15x16^3)+(14x16^2)+(14x16^1)+(13x16^0)=(15x4096)+

(14x256)+(14x16)+(13x1)=61440+3584+224+13=65261

Trang 3

2, Hãy nêu mối lien hệ cấu truc dữ liệu và giải thuật trong Công nghệ lập trình Vai trò chương trình của máy tính đóng vai trò gì trong xử lý thong tin.

 Mối liên hệ: Các cấu trúc dữ liệu và các giải thuật được xem như là 2 yếu tố quan trọng nhất trong lập trình, đúng như câu nói nổi tiếng của Niklaus Wirth: Chương trình = Cấu trúc dữ liệu + Giải thuật (Programs = Data Structures + Algorithms)

 Vai trò chương trình của máy tính trong xử lý thông tin: Chương trình máy tính giúp ta

xử lý thông tin một cách nhanh hơn, chính xác hơn, tiết kiệm được nhân lực Xử lý các bài toán lớn một cách dễ dàng hơn

3 Hãy đưa các khái niêm các kiểu dữ liệu trong cấu truc dữ liệu máy tính.

- Tên loại dữ liệu (Cho Ví dụ)

- Miền giá trị dữ liệu (Cho Ví dụ)

- Kích cỡ lưu trữ

- Tập các lệnh thao tác dữ liệu (Cho Ví dụ)

Nhiều ngôn ngữ định nghĩa sẵn các kiểu dữ liệu thông dụng như:

 integer: rất thông dụng, được dùng để biểu diễn các số nguyên

 char: biểu diễn các ký tự đơn lẻ

 string: biểu diễn chuỗi các kí tự, hay còn gọi là chuỗi, để tạo thành câu hay cụm từ

Ví dụ: trong C++, kiểu integer thông dụng có tên là int và chiếm 2 byte; kiểu string là một dãycác char, với kí tự NULL hoặc '/0' ở vị trí chuỗi kết thúc – dãy có thể dài hơn chuỗi nó lưu trữ

Trang 4

Được gắn kết với một con trỏ (tại

thời điểm biên dịch chưa có).

• Phát sinh lúc thực thi

• Không xác định giá trị ban đầu

• Được giải phóng khỏi bộ nhớ khi cần

Trang 6

5 Hãy liệt kê các loại dữ liệu dung trong C++ (Cho Ví dụ)

-Các kiểu dữ liệu trong C++:

Kiểu cơ sở :số nguyên ,số thực, kiểu logic

4 unsigned short Số nguyên dương 2 bytes

Trang 7

8 unsigned long Số nguyên dương 4 bytes

1 Boolean Gồm 2 giá trị: true hoặc false

hoặc: int a[] = {3, 6, 2, 10, 17};

Phát sinh ngẫu nhiên <time.h>

- Khởi tạo phát sinh ngẫu nhiên

srand((unsigned int)time(NULL));

Trang 8

- Phát sinh giá trị ngẫu nhiên

Khai báo theo con trỏ

char *<Tên chuỗi>;

Trang 9

unsigned char ngay;

unsigned char thang;

int nam;

};

typedef struct ttDate DATE;

Biến cấu trúc kiểu tĩnh

<tên biến>.thành phần cấu trúc

VD:

DATE d;

d.nam = 2012;

Biến cấu trúc kiểu con trỏ

<tên biến>thành phần cấu trúc

VD:

DATE *d;

dnam = 2012;

Trang 10

6 Nêu các giải thuật tìm kiếm(Search) trong công nghệ lập trình Cho ít nhất hai ví

dụ của các giải thuật này (Mô tả bằng C++)

Các giải thuật tìm kiếm

 Có 2 giải thuật thường được áp dụng: Tìm tuyến tính và tìm nhị phân

Trang 11

int Mid=(First + Last)/2;

Nguyên tắc cài đặt hàm tìm kiếm

 Nếu có xuất hiện phần tử có giá trị x thì trả về vị trí tìm được

 Ngược lại thì trả về -1

Giải thuật

Bước 1:

i = 1; // bắt đầu từ phần tử đầu tiên của dãy

Bước 2: So sánh a[i] với x, có 2 khả năng :

Bước 3:

Ngược lại: Lặp lại Bước 2

Trang 12

8 Nêu các ví dụ nguyên tắc cài đặt hàm tìm kiếm bằng mã giả đê thực hiện tìm kiếm theo thuật toán nhị phân.(Binary Search)

mid = (left+right)/2; // lấy mốc so sánh

So sánh a[mid] với x, có 3 khả năng :

 a[mid] = x: Tìm thấy Dừng

 a[mid] > x: //tìm tiếp x trong dãy con aleft amid -1,right =mid - 1;

 a[mid] < x: //tìm tiếp x trong dãy con amid +1 aright,,left = mid + 1;

Các giải thuật sắp xếp cơ bản

 Đổi chổ trực tiếp – Interchange Sort

 Chọn trực tiếp – Selection Sort

 Chèn trực tiếp – Insertion Sort

 Nổi bọt – Bubble Sort

Quick Sort

Trang 13

Ý Tưởng

Đổi chổ trực tiếp – interchange sort

-giải thuật là xuất phát từ đầu dãy, tìm tất cả nghịch thế chứa phần tử này, triệt tiêu chúngbằ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 xử lýtrên với các phần tử tiếp theo trong dãy

Giải thuật

 Bước 1 : i = 1;// bắt đầu từ đầu dãy

 Bước 2 : j = i+1;//tìm các phần tử a[j] < a[i], j>i

 Bước 3 :

Trong khi j <= N thực hiện

Nếu a[j]<a[i]: Hoán vị a[i], a[j];

j = j+1;

 Bước 4 : i = i+1;

Nếu i < N: Lặp lại Bước 2

Ngược lại: Dừng

 Chọn trực tiếp – Selection Sort

-Chọn phần tử nhỏ nhất trong N phần tử ban đầu, đưa phần tử này về vị trí đúng là đầu dãyhiện hành; lúc này dãy hiện hành chỉ còn N-1 phần tử cần sắp xếp, bắt đầu từ vị trí thứ 2; lặplại quá trình trên cho dãy hiện hành đến khi dãy hiện hành chỉ còn 1 phần tử

Giải thuật

Bước 1: i = 1;

Bước 2: Tìm phần tử a[vtmin] nhỏ nhất trong dãy hiện hành từ a[i] đến a[N]

Bước 3: Hoán vị a[vtmin] và a[i]

Bước 4:

i = i+1

Trang 14

Nếu i < N thì lặp lại Bước 2 Ngược lại: Dừng.

 Nổi bọt – Bubble Sort

Xuất phát từ cuối dãy, đổi chỗ các cặp phần tử kế cận để đưa phần tử nhỏ hơn trong cặp phần

tử đó về vị trí đúng đầu dãy hiện hành, sau đó sẽ không xét đến nó ở 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 xử lý trên cho đến khi không còn cặp phần tửnào để xét

Giải thuật

Bước 1: i = 1;

Bước 2: j = N;

Trong khi (j > i) thực hiện:

Nếu a[j]<a[j-1]: Hoán vị a[j] và a[j-1]

j = j-1;

Bước 3: i = i+1;

Nếu i >N-1: Hết dãy Dừng

Ngược lại: Lặp lại Bước 2

 Chèn trực tiếp – Insertion Sort

Cho dãy ban đầu a 1 , a 2 , ,a n , ta có thể xem như đã có đoạn gồm một phần tử a 1 đã được sắp,

sau đó thêm a 2 vào đoạn a 1 sẽ có đoạn a 1 a 2 được sắp; tiếp tục thêm a 3 vào đoạn a 1 a 2 để có đoạn

a 1 a 2 a 3 được sắp; tiếp tục cho đến khi thêm xong a N vào đoạn a 1 a 2 a N-1 sẽ có dãy a 1 a 2 a N

được sắp

Giải thuật

Bước 1: i = 2; // giả sử có đoạn a[1]đã được sắp

Trang 15

Bước 2: x = a[i];

Tìm vị trí pos thích hợp trong đoạn [1 i-1] để chèn a[i] vào

Bước 3: Dời chỗ các phần tử từ pos đến i-1 sang phải 1 vị trí để dành chỗ cho a[i]

Bước 4: a[pos] = x; // có đoạn a[1] a[i] đã được sắp

Cách “chia”: ½ dãy bên trái chứa các giá trị nhỏ hơn ½ dãy bên phải

Thực hiện việc sắp xếp trên từng dãy con (đệ qui)

 Nếu (L<j) Phân hoạch dãy aL … aj

 Nếu (i<R) Phân hoạch dãy ai … aR

Giải thuật phân hoạch dãy a L , a L+1 , … a R thành 2 dãy con

Bước 1.1:

Trang 16

Chọn tùy ý một phần tử a[k] trong dãy, L≤k≤R

x=a[k], i=L, j=R

Bước 1.2:

Phát hiện và hiệu chỉnh cặp a[i] và a[j] nằm sai chỗ:

Bước 1.2a: Trong khi (a[i]<x) i++

Bước 1.2b: Trong khi (a[j]>x)

Bước 1.2c: Nếu (i≤j): Hoán vị a[i] và a[j]; i++,

j Bước 1.3:

Nếu i<j: Lặp lại bước 1.2

Ngược lại: Dừng phân hoạch

10 Hãy nêu độ phức tạp của 5 loại thuật toán sắp xếp căn bản, theo Anh (Chị) loại nào có tốc đọ tìm kiếm nhanh nhất, loại nào chậm nhất.

trong đó O biểu diễn độ phức tạp của thuật toán đi kèm với một giá trị n biểu diễn kích thước của số lần chạy tối đa mà thuật toán đó dựa vào để xử lý trên dữ liệu

Đổi chổ trực tiếp – interchange sort O(n2)

Chọn trực tiếp – selection sort O(n^2)

Nổi bọt – bubble sort O(n^2)

Chèn trực tiếp – insertion sort O(n^2)

Quick sort

Chi phí trung bình O(n*log 2 n)

Chi phí cho trường hợp xấu nhất O(n 2

Vì tốc độ sắp xếp có thể thay đổi rất nhiều tùy theo đặc điểm của dữ liệu, nên để các kết quả thống kê chính xác dựa trên kinh nghiệm đòi hỏi việc chạy các thuật toán nhiều lần trên các dữ liệu khác nhau và tính trung bình Thông thường tập dữ liệu kiểm tra được tạo ngẫu nhiên.quick sort có lẽ là thuật toán nhanh nhất, nhưng nếu sử dụng nó để sắp xếp một tập 20 phần tử thì cũng giống như vác đại bác ra bắn ruồi

Trang 17

Tùy vào bài toán nhưng nhìn chung thì Bubble sort là giải pháp cực kì không hiệu quả

11 Hãy đưa ra khái niệm danh sách lien kết đơn, nêu cách tổ chức dữ liệu động bằng danh sách liên kết và minh họa được các thao tác xử lý trên danh sách liên kết đơn.

Khái niệm

Danh sách liên kết đơn: gồm một chuỗi các phần tử (node) Trong đó mỗi phần tử chứa dữ liệu

và địa chỉ để liên kết đến phần tử tiếp theo Các phần tử kết dính với nhau bằng “sợi dây liênkết”

Tổ chức dữ liệu động

 Biến động

<kiểu dữ liệu> *tên biến;

 Vd: int *a; float *y;

 Chứa địa chỉ của một đối tượng dữ liệu

 Được cấp phát hoặc giải phóng bộ nhớ tùy thuộc vào người lập trình

 Kích thước có thể thay đổi

Trang 18

Trước khi tạo lập Sau khi tạo lập

void CreateEmptyList(LIST &list)

30

Trang 19

TH danh sách đã có phần tử

Có 2 TH thêm pNew vào danh sách :

+Thêm vào đầu danh sách

l

pTai l pHead

pTai l pHead

Trang 20

+Thêm vào cuối danh sách

Chèn node vào DSLK đơn

Chèn vào sau node p

Trang 21

Chèn vào trước node p

+Cách 1

pPre

+

Cách 2:

Bước 1 Chèn pNew vào sau p

Bước 2 Hoán vị giá trị pNew và p

List

pTai l pHead

pNew

p

List

pTai l pHead

Trang 22

Xóa một nút trong danh sách

Xóa nút đầu của danh sách Ảnh hưởng pHead

Xóa nút cuối của danh sách Ảnh hưởng pTail

NODE *pDel = list.pTail

NODE *pPrev = “Tìm node trước pTail

List

Cần xóa

pTai l

Trang 23

Cần xóa

pTai l pHead

Trang 24

LƯU ĐỒ THUẬT TOÁNViết lưu đồ chương trình cho phép nhập vào một số nguyên dương N In ra màn mình cho biết số đảo ngược của số N ( Ví dụ: N=12345 sẽ có số đảo là 54321 )

KẾT THÚC

Xuất sdn

Trang 26

Kiểm tra mảng đã cho có đối xứng không

Mảng không đối xứng

Trang 27

In ra tổng bình phương các phần tử mà giá trị của nó là số nguyên tố

Trang 28

Xuất ra mảng con tăng có chiều dài lớn nhất.

Trang 29

Kiểm tra mảng đã cho có phải là một mảng tăng dần hay không

Trang 31

Viết hàm tính tổng các phần tử mà giá trị của nó là số nguyên tố

Trang 32

Bắt đầu

j=0

j*17<=14 0

k=0

k*40<=14 0

Viết lưu đồ cho Chương trình sau: Trong kho có một số hàng cùng loại đựng trong các hộp

có khối lượng 16kg, 17kg và 40 kg Hãy viết lưu đồ chương trình, khi biết người giữ kho có thể xuất 140 kg hàng mà không cần tháo dỡ một hộp nào không ?

- Kết quả sau khi chạy sẽ là:

+ 2 hộp 16kg

+ 4 hộp 17kg

+ 1 hộp 40kg

Ngày đăng: 13/04/2017, 22:14

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w