CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT ĐỀ CƯƠNG ÔN THI ĐÁP ÁN

6 136 0
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT  ĐỀ CƯƠNG ÔN THI  ĐÁP ÁN

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

Thông tin tài liệu

Mối quan hệ cấu trúc dữ liệu vs giải thuật : 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 toán như dữ liệu vào, ra hay kết quả trung gian. Khong thể nói tới giải thuật mà k 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 vs giải thuật có mỗi quan hệ mật thiết . có thể coi chúng như hình vs bóng. Không thể nói tới cái này mà k 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 vs việc xác lập các giải thuật xử lên trên cấu trúc đó 2. 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ữ. VD ? Trả lời 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ử đk 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à đk thể hiện trong bộ nhớ bởi cùng một kiểu cấu trúc lưu trữ . Vd: cấu trúc lưu trữ kế tiếp ( mảng) và cấu trúc lưu trữ móc nối đều có thể đk dùng để cài đặt cấu trúc dữ liệu ngăn xếp (stack). Mặt khác, các cấu trúc dữ liệu nhue : 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. 3. Các cấu trúc dữ liệu tiền định của ngôn ngữ có đủ đáp

1 Mối quan hệ cấu trúc dữ liệu vs giải thuật : - Giải thuật chỉ phản ánh các phép xử lý, còn đối tượng để xử lý máy là dữ liệu, chúng biểu diễn các thông tin cần thiêt cho bài toán dữ liệu vào, hay kết quả trung gian - Khong thể nói tới giải thuật mà k 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 vs giải thuật có mỗi quan hệ mật thiết có thể coi chúng hình vs bóng Không thể nói tới cái này mà k nhắc tới cái - Do đó cần nghiên cứu các cấu trúc dữ liệu đôi vs việc xác lập các giải thuật xử lên cấu trúc đó Trình bày sự khác giữa cấu trúc dữ liệu và cấu trúc lưu trữ VD ? Trả lời Cách biểu diễn một cấu trúc dữ liệu bợ nhớ máy tính điện tử đk gọi cấu trúc lưu trữ Đó là cách cài đặt cấu trúc ấy máy tính điện tử sở cấu trúc lưu trữ mà thực hiện phép xử lí Ta cần phân biệt giữa cấu trúc dữ liệu cấu trúc lưu trữ tương ứng Có thể có nhiều cấu trúc lưu trữ khác cho một cấu trúc dữ liệu, có thể có những cấu trúc dữ liệu khác mà đk thể hiện bộ nhớ bởi một kiểu cấu trúc lưu trữ Vd: cấu trúc lưu trữ kế tiếp ( mảng) cấu trúc lưu trữ móc nới có thể đk dùng để cài đặt cấu trúc dữ liệu ngăn xếp (stack) Mặt khác, cấu trúc dữ liệu nhue : danh sách, ngân xếp và có thể cài đặt máy thơng qua cấu trúc lưu trữ móc nới 3 Các cấu trúc dữ liệu tiền định của ngôn ngữ có đủ đáp ứng mọi yêu cầu về tổ chức dữ liệu hay không? Cho ví dụ minh họa Trả lời: Không phải các CTDL tiền định của ngôn ngữ lập trình được sử dụng đáp ứng được nhu cầu cần thiết dữ liệu của người dùng VD: Xử lý hồ sơ học sinh, sinh viên mà dùng ngôn ngữ PASCAL, thì ta có thể tổ chức mỗi hồ sơ dưới dạng bản ghi bao gồm nhiều thành phần, mỗi thành phần của bản ghi đó ta gọi là trường sẽ không nhất thiết phải dùng kiểu (VD: Trường: “Họ và tên” có kiểu kí tự Trường: “Ngày sinh” có kiểu số nguyên) Nhưng nếu dùng ngôn ngữ FORTRAN thì lại gặp khó khăn Ta chỉ có thể mô phỏng các mục của hồ sơ dưới dạng vectơ hay ma trận và đó việc xử lý sẽ phức tạp Việc chia bài toán thành những bài toán nhỏ có những thuận lợi gì? Trả lời: Các bài toán giải được máy tính điện tử ngày càng đa dạng và phức tạp Các giải thuật và chương trình để giải chúng ngày càng có quy mô lớn và càng khó thiết lập muốn tìm hiểu Nhưng việc sẽ trở lên đơn giản nếu có thể phân chia bài toán lớn thành các bài toán nhỏ Việc chia bài toán thành những bài toán nhỏ thì việc tìm hiểu sửa chữa chỉnh lý chương trình sẽ dễ dàng 5 Trình bày nguyên tắc thiết kế từ đỉnh xuống (Top – Down), cho ví dụ minh họa Ngun tắc: Phân tích tởng quát toà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 dần vào giải quyết các phần cụ thể một cách chi tiết VD: Ta phải quản lý và bào trì các hồ sơ học bổng của các sinh viên ở diện được 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 Do đó, chương trình lập phải tạo điều kiện cho người sử dụng giải quyết được các vấn đề sau: - 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 - Cập nhật được bản ghi của 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 - In bản tổng kết chứa những thong 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: - Những thông tin sinh viên được học bổng, lưu đĩa phải được đọc vào bộ nhớ để có thế xử lý - Xử lý các thông tin này để tạo kết quả mong muốn - Sao chép các thông tin đã được cập nhật vào tệp đĩ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ụ Chẳng hạn nhiệm vụ xử lý thông tin có thể phân thành 3: - Tìm lại bản ghi của một sinh viên cho trước - Cập nhật thông tin bản ghi sinh viên - In bảng tổng kết những thông tin các sinh viên được học bổng Những nhiệm vụ này có thể chia thành nhiệm vụ nhỏ hơn… Trình bày phương pháp tinh chỉnh từng bước Trả lời: 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 quá trình mô – dun hóa bài toá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 ý 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ỏ Đó là các bước tinh chỉnh Sự tinh chỉnh sẽ được hướng 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à 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 ứng với các câu lệnh của ngôn ngữ lập trình đã chọn Dữ liệu quá trình này đượ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ể 7 Trình bày phân tích thời gian thực hiện giải thuật Trả lơi: Với bài toán, không phải chỉ có giải thuật Do đó đòi hỏi phải chọn 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 giải thuật cần được biểu diễn hàm của n: T(n) 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 ảnh hưởng tới thời gian thực hiện; những yếu tố này khơng đờng với loại máy tính đó 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 thời gian thực hiện của một giải thuật là T1(n) = cn2 và thời gian thực hiện một giải thuật khác T2(n) = kn, thì n khá lớn, thời gian thực hiện T2 rõ ràng với giải thuật T1 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 ́u tớ liên quan tới máy vậy sẽ dẫn tới khái niệm độ phức tạp vê thời gian của giải thuật 8 Trình bày xác định độ phức tạp tính toán giải thuật (phép toán tích cực, qui tắc tổng, qui tắc nhân, cho ví dụ minh họa) Trả lời: - Phép toán tích cực: Là phép toán thuộc giải thuật mà thời gian thực hiện nó khơng thời gian thực hiện các phép toán khác, hay số lần thực hiện nó không kém gì cách thực hiện nó - Qui tắc tổng: Giả sử T1(n) và T2(n) là thời gian thực hiện của đoạn chương trình P1 và P2 mà T1(n) = O(f(n)); T2(n) = O(g(n)) thì thời gian thực hiện P1 và P2 kế tiếp sẽ là: T1(n) + T2(n) = O(max(f(n), g(n))) VD : chương trình có bước thực hiện mà thời gian thực hiện từng bước : O(n2), O(n3) và O(nlog2n) thì thời gian thực hiện bước đầu là O(max(n2, n3)) = O(n3) Thời gian thực hiện chương trình sẽ là O(max(n3, nlog2n)) = O(n3) - Qui tắc nhân: Nếu tương ứng với P1 và P2 là T1(n) = O(f(n)), T2(n) = O(g(n)) thì thời gian thực hiện P1 và P2 lồng sẽ là : T1(n)T2(n) = O(f(n)g(n)) VD : Câu lệnh gán: x := x + có thời gian thực hiện bằng c (hằng số) nên được đánh giá là O(1) Câu lệnh: for i :=1 to n x :=x+1 ; Có thời gian thực hiện O(n.1) = O(n) ... liệu tiền định của ngôn ngữ có đủ đáp ứng mọi yêu cầu về tổ chức dữ liệu hay không? Cho ví dụ minh họa Trả lời: Không phải các CTDL tiền định của ngôn ngữ lập trình được... là trường sẽ không nhất thi ́t phải dùng kiểu (VD: Trường: “Họ và tên” có kiểu kí tự Trường: “Ngày sinh” có kiểu số nguyên) Nhưng nếu dùng ngôn ngữ FORTRAN thi lại gặp khó... tắc thi ́t kế từ đỉnh xuống (Top – Down), cho ví dụ minh họa Ngun tắc: Phân tích tởng quát toà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

Ngày đăng: 28/09/2019, 09:56

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan