Tải bản đầy đủ (.pdf) (4 trang)

Ôn tập lý thuyết cấu trúc dữ liệu và giải thuật (KMA)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (165.43 KB, 4 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

<b>Câu 1: Trình bày mối quan hệ giữa cấu trúc dữ liệu và giải thuật, cho ví dụ minh hoạ: </b>

- Giải thuật chỉ phản ánh các phép xử lý, còn đối tượng để xử lý trên máy là dữ liệu. Chúng biểu diễn các thơng tin cần thiết cho bài tốn dữ liệu vào, ra hay kết quả trung gian.

- Khơng thể nói tới giải thuật mà khơng nhắc đến các tác động của nó lên dữ liệu nào. Còn xét tới dữ liệu là phải hiểu dữ liệu đó cần được tác động bởi giải thuật nào để được kết quả mong muốn.

- Giữa cấu trúc dữ liệu và giải thuật có mối quan hệ mật thiết, có thể coi chúng như hình với bóng. Khơng thể nói tới cái này mà khơng nhắc tới cái kia.

- Do đó cần nghiên cứu các cấu trúc dữ liệu đi đôi với việc xác lập các giải thuật xử lý lên trên cấu trúc đó.

<b>Câu 2: Trình bày mối quan hệ giữa cấu trúc dữ liệu và các phép toán trên cấu trúc dữ liệu </b>

- Đối với các bài tốn phi số, đi đơi với các cấu trúc dữ liệu mới cũng xuất hiện các phép toán mới tác động trên các cấu trúc ấy. Thông thường có các phép tốn như: Phép tạo lập hoặc huỷ bỏ một cấu trúc, phép truy nhập vào từng phần tử của cấu trúc, phép bổ sung hoặc loại bỏ một phần tử trên cấu trúc …

- Các phép tốn đó sẽ có những tác dụng khác nhau đối với từng cấu trúc. Có phép tốn hữu hiệu đối với cấu trúc này nhưng lại tỏ ra không hữu hiệu trên các cấu trúc khác.

- Vì vậy, khi chọn một cấu trúc dữ liệu ta phải nghĩ ngay tới các phép toán tác động trên cấu trúc ấy. Và ngược lại, nói tới phép tốn thì lại phải chú ý tới phép đó được tác động trên cấu trúc dữ liệu nào. Cho nên người ta thường quan niệm: nói tới cấu trúc dữ liệu là bao hàm ln cả phép tốn tác động trên các cấu trúc ấy.

<b>Câu 3: Trình bày sự khác nhau giữa cấu trúc dữ liệu và cấu trúc lưu trữ, cho ví dụ minh </b>

hoạ:

- Cách biểu diễn một cấu trúc dữ liệu trong bộ nhớ máy tính điện tử được gọi là cấu trúc lưu trữ. Đó chính là cách cài đặt cấu trúc ấy trên máy tính điện tử và trên cơ sở cấu trúc lưu trữ này mà thực hiện các phép xử lý.

- Ta cần phân biệt giữa cấu trúc dữ liệu và cấu trúc lưu trữ tương ứng. Có thể có nhiều cấu trúc lưu trữ khác nhau cho cùng một cấu trúc dữ liệu, cũng như có thể có những cấu trúc dữ liệu khác nhau mà được thể hiện trong bộ nhớ bởi cùng một kiểu cấu trúc lưu trữ.

<i><b>- Ví dụ: Cấu trúc lưu trữ mảng và cấu trúc lưu trữ móc nối đều có thể được dùng để </b></i>

cài đặt cấu trúc dữ liệu cây. Mặt khác, các cấu trúc dữ liệu như: danh sách, ngăn xếp và cây đều có thể cài đặt trên máy thông qua cấu trúc lưu trữ móc nối.

</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">

<b>Câu 4: Trình bày những đặc điểm về cấu trúc dữ liệu trong các ngơn ngữ lập trình bậc cao, </b>

có liên hệ với ngôn ngữ C.

- Trong các ngôn ngữ lập trình bậc cao, các dữ liệu được phân thành các kiểu dữ liệu. Kiểu dữ liệu của một biến được xác định bởi một tập các giá trị mà biến đó có thể nhận và các phép tốn có thể thực hiện trên các giá trị đó.

<i><b>- Ví dụ: Kiểu dữ liệu “int” trong ngơn ngữ C có miền giá trị từ: -32768 đến 32767, </b></i>

các phép tốn có thể thực hiện trên các giá trị này là: Các phép toán số học, các phép toán thao tác bit, các phép toán logic và các phép toán so sánh.

- Chẳng hạn, ngôn ngữ C cung cấp cho người lập trình các quy tắc để xác định các kiểu dữ liệu mới như: Kiểu mảng, kiểu cấu trúc (struct), kiểu móc nối, … Các kiểu dữ liệu được tạo thành từ nhiều kiểu dữ liệu khác (các kiểu này có thể là kiểu cơ bản hoặc kiểu dữ liệu đã được xây dựng) được gọi là kiểu dữ liệu có cấu trúc. Các dữ liệu thuộc kiểu dữ liệu có cấu trúc được gọi là các cấu trúc dữ liệu.

<i><b>- Ví dụ: Các mảng, các cấu trúc, các danh sách móc nối,… trong ngơn ngữ C, là các </b></i>

cấu trúc dữ liệu.

- Từ các kiểu cơ bản, bằng cách sử dụng các quy tắc cú pháp để kiến tạo các kiểu dữ liệu, người lập trình có thể xây dựng nên các kiểu dữ liệu mới thích hợp cho từng vấn đề. Các kiểu dữ liệu mà người lập trình xây dựng nên được gọi là các kiểu dữ liệu được xác định bởi người sử dụng.

- Như vậy, một cấu trúc dữ liệu là một dữ liệu phức hợp, gồm nhiều thành phần dữ liệu, mỗi thành phần hoặc là dữ liệu cơ sở (số nguyên, số thực, ký tự,… ) hoặc là một cấu trúc dữ liệu đã được xây dựng.

- Các thành phần dữ liệu tạo nên một cấu trúc dữ liệu được liên kết với nhau theo một cách nào đó.

- Trong các ngơn ngữ lập trình như: Pascal, C/C+ +, có ba phương pháp đ ể liên kết các dữ liệu:

o Liên kết các dữ liệu cùng kiểu tạo thành mảng dữ liệu.

o Liên kết các dữ liệu (không nhất thiết cùng kiểu) tạo thành cấu trúc (struct) trong C/C+ +, hoặc bản ghi (record) trong Pascal.

o Sử dụng con trỏ để liên kết dữ liệu. Chẳng hạn, sử dụng con trỏ ta có thể tạo nên các danh sách móc nối, hoặc sử dụng con trỏ để biểu diễn cây…

<b>Câu 5: Trình bày nguyên tắc thiết kế top – down, cho ví dụ minh hoạ: </b>

- Ngun tắc: Phân tích tổng qt tồn bộ vấn đề, xuất phát từ dữ kiện và các mục tiêu đặt ra, để đề cập đến công việc chủ yếu, rồi sau đó mới đi dần vào giải quyết các phần cụ thể một cách chi tiết hơn.

<i><b>- VD: Ta phải quản lý và bào trì các hồ sơ về học bổng của các sinh viên ở diện được </b></i>

tài trợ, đồng thời thường xuyên phải lập báo cáo tổng kết để trình lên hiệu trưởng.

</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">

Do đó, chương trình lập ra phải tạo điều kiện cho người sử dụng giải quyết được các vấn đề sau:

o Tìm lại và hiển thị được bất kì bản ghi của bất kì sinh viên nào tại thiết bị cuối của người dùng.

o Cập nhật được bản ghi của 1 sinh viên cho trước bằng các thay đổi điểm trung bình, điểm đạo đức, khoản tiền tài trợ, nếu cần.

o In bản tổng kết chứa những thông tin hiện thời gồm số hiệu, điểm trung bình, điểm đạo đức, khoản tiền tài trợ.

- Từ những nhận định trên, giải thuật sẽ phải giải quyết các vấn đề sau:

o Những thông tin về sinh viên được học bổng, lưu trên đĩa phải được đọc vào bộ nhớ trong để có thế xử lý.

o Xử lý các thông tin này để tạo ra kết quả mong muốn.

o Sao chép các thông tin đã được cập nhật vào tệp trên đĩa để lưu trữ cho việc xử lý sau này. Các nhiệm vụ ở mức đầu này thường phức tạp, cần phải chia thành các nhiệm vụ con.

- Chẳng hạn nhiệm vụ xử lý thơng tin có thể phân thành: o Tìm lại bản ghi của một sinh viên cho trước o Cập nhật thông tin trong bản ghi sinh viên

o In bảng tổng kết những thông tin về các sinh viên được học bổng Những nhiệm vụ con này cũng có thể chia thành nhiệm vụ nhỏ hơn…

<b>Câu 6: Trình bày phương pháp tinh chỉnh từng bước, cho ví dụ minh hoạ: </b>

- Tinh chỉnh từng bước là phương pháp thiết kế giải thuật gắn liền với lập trình. Nó phản ánh tinh thần của q trình mơ – dun hóa bài tốn và thiết kế kiểu top – down. - Ban đầu chương trình thể hiện giải thuật được trình bày bằng ngôn ngữ tự nhiên phản ánh ý chính của cơng việc cần làm. Từ các bước sau, những lời, những ý đó sẽ được chi tiết hóa dần dần tương ứng với những cơng việc nhỏ hơn. Đó là các bước tinh chỉnh. Sự tinh chỉnh sẽ được hướng về phía ngơn ngữ lập trình mà ta chọn. - Quá trình thiết kế giải thuật và phát triển chương trình sẽ được thể hiện dần dần từ

dạng ngôn ngữ tự nhiên, qua giả ngôn ngữ rồi đến ngôn ngữ lập trình và đi từ mức “làm cái gì” đến mức “làm thế nào”, ngày càng sát với các chức năng ứng với các câu lệnh của ngôn ngữ lập trình đã chọn. Dữ liệu trong quá trình này cũng được “tinh chế” dần dần từ dạng cấu trúc đến dạng lưu trữ để cài đặt cụ thể.

<b>Câu 7: Trình bày cách phân tích thời gian thực hiện giải thuật. Định nghĩa O lớn. </b>

- Với 1 bài tốn, khơng phải chỉ có 1 giải thuật. Do đó địi hỏi phải chọn 1 giải thuật đưa tới kết quả nhanh.

- Thời gian thực hiện giải thuật phụ thuộc vào rất nhiều yếu tố. Một yếu tố cần được chú ý trước tiên là kích thước của dữ liệu vào thì thời gian thực hiện T của 1 giải thuật cần được biểu diễn như 1 hàm của n: T(n).

</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">

- Các kiểu lệnh và tốc độ xử lý của máy tính, ngơn ngữ viết chương trình và chương trình dịch ngơn ngữ ấy đều ảnh hưởng tới thời gian thực hiện; nhưng những yếu tố này khơng đồng đều với mọi loại máy tính trên đó cài đặt giải thuật, vì vậy khơng thể dựa vào chúng để xác lập T(n). Nghĩa là T(n) không thể biểu diễn thành đơn vị thời gian bằng giây, bằng phút…được. Tuy nhiên nếu như thời gian thực hiện của một giải thuật là T<small>1</small>(n) = cn<small>2</small> và thời gian thực hiện một giải thuật khác T<small>2</small>(n) = kn, thì khi n khá lớn, thời gian thực hiện T<small>2</small> rõ ràng ít hơn với giải thuật T<small>1</small>.

- Cách đánh giá thời gian thực hiện giải thuật độc lập với máy tính và các yếu tố liên quan tới máy như vậy sẽ dẫn tới khái niệm về độ phức tạp vê thời gian của giải thuật.

<b>Câu 8: </b>

Trình bày cách Xác định độ phức tạp tính tốn của giải thuật, với những nội dung: Quy tắc tổng, Phép tốn tích cực, thời gian chạy của các câu lệnh lặp, cho ví

khơng kém gì cách thực hiện nó.

thì thời gian thực hiện P1 và P2 lồng nhau sẽ là : T1(n)T2(n) = O(f(n)g(n))

O(n.1) = O(n)

<b>Câu 9: Trình bày ưu điểm, nhược điểm của ba phương pháp sắp xếp: Sắp xếp nhanh </b>

(Quick - sort), sắp xếp kiểu vun đống (Heap - sort), sắp xếp kiểu hồ nhập (Merge - sort). Trình bày những nhận xét khi sử dụng các phương pháp sắp xếp

</div>

×