Giáo trình Cấu trúc dữ liệu và Giải thuật - Trần Hạnh Nhi, Dương Anh Đức (ĐH CNTT)

Giáo trình cấu trúc dữ liệu và giải thuật Trần Hạnh Nhi Dương Anh Đức phần 1 cung cấp kiến thức cơ bản và nâng cao cho sinh viên CNTT.

Trường đại học

Trường Đại Học

Người đăng

Ẩn danh

Thể loại

Giáo Trình

2023

98
1
0

Phí lưu trữ

35 Point

Tóm tắt

I. Tổng quan giáo trình Cấu trúc dữ liệu và Giải thuật

Giáo trình Cấu trúc dữ liệu và Giải thuật của nhóm tác giả Trần Hạnh Nhi và Dương Anh Đức được xem là một trong những tài liệu nền tảng và quan trọng nhất đối với sinh viên ngành Công nghệ thông tin tại Việt Nam. Được biên soạn bởi các giảng viên uy tín từ Đại học Khoa học Tự nhiên TPHCM, cuốn sách này không chỉ cung cấp kiến thức chuẩn mực mà còn chú trọng đến tính ứng dụng thực tiễn, giúp người học xây dựng tư duy lập trình một cách có hệ thống. Nội dung cốt lõi của giáo trình xoay quanh mối quan hệ mật thiết giữa việc tổ chức dữ liệu và các phương pháp xử lý dữ liệu đó. Như chính các tác giả đã nhấn mạnh, một chương trình máy tính hiệu quả là sự kết hợp hài hòa giữa cấu trúc dữ liệu phù hợp và giải thuật tối ưu. Công thức kinh điển "Cấu trúc dữ liệu + Giải thuật = Chương trình" được trình bày ngay từ những chương đầu, khẳng định vai trò không thể tách rời của hai thành phần này. Việc lựa chọn một cấu trúc dữ liệu tốt sẽ giúp giải thuật xử lý trên đó phát huy tối đa hiệu quả, giúp chương trình chạy nhanh hơn và tiết kiệm tài nguyên hệ thống. Cuốn sách CTDL&GT Dương Anh Đức và Trần Hạnh Nhi đã thành công trong việc diễn giải các khái niệm phức tạp một cách trực quan, đi kèm với nhiều ví dụ và code minh họa C++ CTDL&GT, giúp sinh viên dễ dàng tiếp cận và tự nghiên cứu. Đây là tài liệu CTDL&GT không thể thiếu cho bất kỳ ai muốn nắm vững những kỹ năng cốt lõi của khoa học máy tính.

1.1. Vai trò của tài liệu CTDL GT trong ngành Công nghệ Thông tin

Cấu trúc dữ liệu và Giải thuật là môn học xương sống của ngành Công nghệ Thông tin. Nó cung cấp các công cụ và kỹ thuật cần thiết để giải quyết các bài toán trên máy tính một cách hiệu quả. Một lập trình viên giỏi không chỉ biết viết mã lệnh mà còn phải biết cách tổ chức dữ liệu sao cho việc truy xuất và xử lý diễn ra nhanh nhất. Giáo trình Cấu trúc dữ liệu và Giải thuật Trần Hạnh Nhi Dương Anh Đức phần 1 đóng vai trò là kim chỉ nam, dẫn dắt người học đi từ những khái niệm cơ bản như kiểu dữ liệu, mảng, chuỗi đến các cấu trúc phức tạp hơn như danh sách liên kết, ngăn xếp và hàng đợi (stack and queue), hay cây nhị phân tìm kiếm. Việc nắm vững kiến thức từ giáo trình này giúp xây dựng một nền tảng vững chắc để học các môn chuyên ngành khác và là tiêu chí quan trọng trong các cuộc phỏng vấn tuyển dụng của những tập đoàn công nghệ lớn.

1.2. Triết lý biên soạn của Trần Hạnh Nhi và Dương Anh Đức

Triết lý chính của nhóm biên soạn là "vừa đáp ứng yêu cầu chuẩn mực của sách giáo khoa, vừa có giá trị thực tiễn". Điều này thể hiện rõ qua cách trình bày logic, kết hợp giữa lý thuyết hàn lâm và các ví dụ thực tế. Giáo trình không sa đà vào các chứng minh toán học khô khan mà tập trung vào việc giải thích ý tưởng đằng sau mỗi cấu trúc dữ liệu và giải thuật. Các tác giả Trần Hạnh NhiDương Anh Đức đã thành công trong việc xây dựng một lộ trình học tập khoa học. Mỗi chương đều có mục tiêu rõ ràng, phần trình bày chi tiết và hệ thống bài tập cấu trúc dữ liệu có lời giải (gợi ý) ở cuối chương. Cách tiếp cận này không chỉ giúp sinh viên hiểu sâu vấn đề mà còn khuyến khích khả năng tự học, tự nghiên cứu, một kỹ năng cực kỳ quan trọng trong lĩnh vực công nghệ thông tin vốn luôn thay đổi.

II. Thách thức khi học Cấu trúc dữ liệu và Giải thuật

Mặc dù là môn học nền tảng, Cấu trúc dữ liệu và Giải thuật cũng là một trong những môn học gây nhiều khó khăn nhất cho sinh viên. Thách thức lớn nhất đến từ tính trừu tượng của các khái niệm. Việc hình dung cách dữ liệu được tổ chức trong bộ nhớ hay cách một thuật toán hoạt động qua từng bước đòi hỏi một tư duy logic cao. Nhiều sinh viên gặp khó khăn trong việc chuyển đổi từ ý tưởng giải thuật trên giấy sang mã lệnh thực tế. Hơn nữa, việc phân tích và đánh giá hiệu quả của một giải thuật thông qua các khái niệm toán học như độ phức tạp thuật toánBig O Notation là một rào cản không nhỏ. Nếu không có một nguồn tài liệu hướng dẫn tốt như giáo trình cấu trúc dữ liệu và giải thuật Trần Hạnh Nhi Dương Anh Đức phần 1, người học rất dễ bị lạc lối trong mớ lý thuyết phức tạp. Cuốn sách này giải quyết các thách thức trên bằng cách cung cấp những giải thích cặn kẽ, các ví dụ minh họa trực quan và mã nguồn tham khảo rõ ràng, giúp sinh viên từng bước vượt qua các khó khăn và xây dựng sự tự tin khi giải quyết các bài toán phức tạp. Việc tìm kiếm một ebook cấu trúc dữ liệu và giải thuật chất lượng cao cùng các tài liệu bổ trợ như slide bài giảng CTDL&GT ĐH KHTN cũng là một nhu cầu thiết yếu để hỗ trợ quá trình học tập.

2.1. Khó khăn khi tiếp cận độ phức tạp thuật toán Big O Notation

Một trong những khái niệm cốt lõi nhưng khó nắm bắt nhất là độ phức tạp thuật toán. Đây là phương pháp để đo lường hiệu suất của một thuật toán, cụ thể là thời gian thực thi hoặc không gian bộ nhớ cần dùng, dựa trên kích thước của dữ liệu đầu vào (N). Ký hiệu Big O Notation được sử dụng để mô tả hành vi của thuật toán ở trường hợp xấu nhất. Sinh viên thường bối rối khi phải xác định độ phức tạp O(1), O(log N), O(N), O(N log N), hay O(N²). Giáo trình Trần Hạnh Nhi PDF đã dành một phần quan trọng trong chương 1 để giải thích cặn kẽ về vấn đề này. Sách định nghĩa rõ ràng các bước phân tích thuật toán và phân loại các hàm độ phức tạp phổ biến, giúp người đọc hiểu tại sao Quick Sort (trung bình O(N log N)) lại hiệu quả hơn Bubble Sort (O(N²)) khi xử lý dữ liệu lớn.

2.2. Nhu cầu tìm kiếm bài tập cấu trúc dữ liệu có lời giải

Học đi đôi với hành. Việc chỉ đọc lý thuyết là không đủ để làm chủ môn học này. Sinh viên cần phải thực hành giải quyết nhiều dạng bài tập khác nhau. Tuy nhiên, việc tìm kiếm một nguồn bài tập cấu trúc dữ liệu có lời giải uy tín và chi tiết là một thách thức. Nhiều tài liệu trên mạng cung cấp lời giải sơ sài hoặc không chính xác. Cuối mỗi chương trong sách CTDL&GT Dương Anh Đức, hệ thống bài tập được thiết kế từ cơ bản đến nâng cao, bao gồm cả bài tập lý thuyết và thực hành. Điều này giúp sinh viên củng cố kiến thức và rèn luyện kỹ năng cài đặt. Nhu cầu tìm kiếm lời giải bài tập sách Trần Hạnh Nhi là rất lớn, cho thấy tầm quan trọng của việc thực hành và đối chiếu kết quả trong quá trình học tập.

III. Phương pháp tiếp cận các thuật toán then chốt trong sách

Giải thuật là trái tim của việc lập trình. Giáo trình Cấu trúc dữ liệu và Giải thuật Trần Hạnh Nhi Dương Anh Đức phần 1 đã hệ thống hóa các giải thuật quan trọng nhất thành hai nhóm chính: tìm kiếm và sắp xếp. Cách tiếp cận của giáo trình là bắt đầu từ những thuật toán đơn giản, dễ hiểu, sau đó dần dần giới thiệu các thuật toán phức tạp hơn nhưng hiệu quả hơn. Mỗi thuật toán đều được phân tích chi tiết qua các bước: trình bày ý tưởng, minh họa bằng ví dụ cụ thể, cài đặt mã giả hoặc mã C/C++, và cuối cùng là đánh giá độ phức tạp thuật toán. Ví dụ, khi trình bày về thuật toán tìm kiếm, sách bắt đầu với tìm kiếm tuyến tính (Linear Search) đơn giản nhưng không hiệu quả, sau đó giới thiệu tìm kiếm nhị phân (Binary Search) với tốc độ vượt trội trên dữ liệu đã được sắp xếp. Tương tự, các thuật toán sắp xếp được phân loại rõ ràng, từ các phương pháp cơ bản như Interchange Sort, Bubble Sort đến các thuật toán nâng cao như Heap Sort, Quick Sort. Cách trình bày có hệ thống này giúp người học không chỉ biết cách hoạt động của thuật toán mà còn hiểu được khi nào nên áp dụng thuật toán nào để đạt hiệu quả tốt nhất.

3.1. Phân tích chi tiết thuật toán tìm kiếm tuyến tính và nhị phân

Chương 2 của giáo trình bắt đầu với hai thuật toán tìm kiếm cơ bản. Tìm kiếm tuyến tính (Linear Search) có độ phức tạp O(N), duyệt qua từng phần tử cho đến khi tìm thấy hoặc hết danh sách. Đây là phương pháp tổng quát nhất nhưng chậm. Ngược lại, Tìm kiếm nhị phân (Binary Search) yêu cầu danh sách phải được sắp xếp trước. Nó hoạt động bằng cách liên tục chia đôi không gian tìm kiếm, giúp giảm đáng kể số lần so sánh và đạt độ phức tạp O(log N). Sách đã chỉ rõ ưu nhược điểm của từng phương pháp, giúp người đọc đưa ra lựa chọn phù hợp tùy vào bài toán thực tế. Trích dẫn từ sách: "Giải thuật tìm nhị phân tiết kiệm thời gian hơn rất nhiều so với giải thuật tìm tuyến tính... Tuy nhiên khi muốn áp dụng giải thuật tìm nhị phân cần phải xét đến thời gian sắp xếp dãy số."

3.2. So sánh hiệu quả các thuật toán sắp xếp từ O N² đến O N log N

Phần lớn nội dung chương 2 dành cho các thuật toán sắp xếp. Giáo trình phân loại chúng thành các nhóm dựa trên độ phức tạp. Nhóm O(N²) bao gồm các thuật toán đơn giản như Selection Sort, Insertion Sort, Bubble Sort, phù hợp với tập dữ liệu nhỏ. Nhóm hiệu quả hơn, O(N log N), bao gồm các thuật toán phức tạp hơn như Heap Sort, Merge Sort và đặc biệt là Quick Sort. Sách CTDL&GT Dương Anh Đức giải thích rất rõ tại sao Quick Sort, mặc dù có trường hợp xấu nhất là O(N²), nhưng trong thực tế lại thường là thuật toán nhanh nhất. Phân tích này giúp sinh viên có cái nhìn sâu sắc về hiệu năng và sự đánh đổi giữa các thuật toán.

3.3. Hiểu rõ kỹ thuật đệ quy qua thuật toán Quick Sort

Kỹ thuật đệ quy là một khái niệm mạnh mẽ nhưng cũng dễ gây nhầm lẫn. Quick Sort là một ví dụ điển hình và hoàn hảo để minh họa cho sức mạnh của đệ quy. Thuật toán này hoạt động dựa trên chiến lược "Chia để trị": chọn một phần tử làm "chốt" (pivot), phân hoạch mảng thành hai phần (nhỏ hơn chốt và lớn hơn chốt), sau đó gọi đệ quy để sắp xếp hai phần này. Giáo trình đã trình bày thuật toán Quick Sort một cách cực kỳ rõ ràng, từ việc chọn chốt, quá trình phân hoạch, cho đến đoạn code minh họa C++ CTDL&GT đệ quy. Việc phân tích ví dụ từng bước trong sách giúp người học gỡ rối được logic phức tạp của đệ quy và áp dụng nó vào các bài toán khác.

IV. Ứng dụng thực tiễn với bài tập và code minh họa C

Lý thuyết sẽ trở nên vô nghĩa nếu không thể áp dụng vào thực tiễn. Điểm sáng của giáo trình cấu trúc dữ liệu và giải thuật Trần Hạnh Nhi Dương Anh Đức phần 1 chính là sự cân bằng giữa lý thuyết và thực hành. Cuốn sách không chỉ dừng lại ở việc mô tả thuật toán mà còn cung cấp các đoạn mã cài đặt bằng ngôn ngữ C/C++, giúp sinh viên hình dung rõ ràng cách một thuật toán được hiện thực hóa. Các bài tập thực hành ở cuối mỗi chương được thiết kế để giải quyết những vấn đề cụ thể, chẳng hạn như quản lý nhân viên, sắp xếp bảng lương, hay xử lý dữ liệu. Việc hoàn thành các bài tập này giúp sinh viên củng cố kiến thức, rèn luyện kỹ năng gỡ lỗi (debug) và tối ưu hóa mã nguồn. Hơn nữa, các slide bài giảng CTDL&GT ĐH KHTN đi kèm giáo trình thường chứa thêm nhiều ví dụ và bài tập mở rộng, tạo thành một hệ sinh thái học tập hoàn chỉnh. Việc tìm kiếm và sử dụng các tài liệu này, bao gồm cả ebook cấu trúc dữ liệu và giải thuật và các phiên bản giáo trình Trần Hạnh Nhi PDF, sẽ hỗ trợ đắc lực cho quá trình tự học và nghiên cứu của sinh viên.

4.1. Cách giải bài tập cấu trúc dữ liệu có lời giải hiệu quả

Để giải bài tập hiệu quả, người học nên tuân theo một quy trình có hệ thống. Đầu tiên, cần đọc kỹ đề bài để hiểu rõ yêu cầu và các ràng buộc về dữ liệu đầu vào, đầu ra. Tiếp theo, hãy chọn cấu trúc dữ liệu và giải thuật phù hợp nhất dựa trên kiến thức đã học. Trước khi viết mã, nên phác thảo ý tưởng ra giấy hoặc sử dụng mã giả (pseudocode). Quá trình này giúp làm rõ logic và phát hiện sớm các sai sót. Sau khi cài đặt, việc kiểm thử (testing) với nhiều bộ dữ liệu khác nhau, bao gồm cả các trường hợp biên (edge cases), là cực kỳ quan trọng. Khi gặp khó khăn, việc tham khảo lời giải bài tập sách Trần Hạnh Nhi hoặc thảo luận cùng bạn bè sẽ giúp mở ra những hướng đi mới.

4.2. Tầm quan trọng của code minh họa C CTDL GT trong giáo trình

Các đoạn code minh họa C++ CTDL&GT trong sách đóng vai trò như một cầu nối giữa lý thuyết trừu tượng và ứng dụng cụ thể. Chúng cho thấy cách các cấu trúc như danh sách liên kết hay các thuật toán như Quick Sort được cài đặt trong một ngôn ngữ lập trình thực tế. Việc đọc, hiểu và tự mình gõ lại các đoạn mã này là một phương pháp học tập vô cùng hiệu quả. Nó không chỉ giúp ghi nhớ cú pháp mà còn giúp hiểu sâu hơn về cách quản lý bộ nhớ, con trỏ và các kỹ thuật lập trình cấp thấp. Đây là kỹ năng thiết yếu để trở thành một kỹ sư phần mềm chuyên nghiệp.

V. Kết luận Tầm quan trọng của giáo trình Trần Hạnh Nhi

Tóm lại, giáo trình cấu trúc dữ liệu và giải thuật Trần Hạnh Nhi Dương Anh Đức phần 1 không chỉ là một cuốn sách giáo khoa, mà là một tài liệu học tập toàn diện, một người thầy dẫn đường cho nhiều thế hệ sinh viên công nghệ thông tin. Với cách trình bày logic, nội dung phong phú từ cơ bản đến nâng cao, và sự chú trọng vào ứng dụng thực tiễn, cuốn sách đã đặt một nền móng vững chắc cho bất kỳ ai muốn theo đuổi sự nghiệp lập trình. Từ việc phân tích độ phức tạp thuật toán đến việc cài đặt các thuật toán sắp xếp và tìm kiếm, mọi khía cạnh đều được diễn giải một cách rõ ràng. Đây đích thực là một tài liệu CTDL&GT kinh điển, được công nhận rộng rãi không chỉ trong phạm vi Đại học Khoa học Tự nhiên TPHCM mà còn trên cả nước. Việc đầu tư thời gian để nghiên cứu kỹ lưỡng cuốn sách này, kết hợp với các tài liệu bổ trợ như slide bài giảng và các phiên bản ebook cấu trúc dữ liệu và giải thuật, chắc chắn sẽ mang lại giá trị to lớn và lâu dài cho người học.

5.1. Vì sao đây là tài liệu CTDL GT không thể thiếu cho sinh viên

Cuốn sách này là không thể thiếu vì nó đáp ứng được ba yếu tố quan trọng nhất của một tài liệu kỹ thuật tốt: tính chính xác, tính rõ ràng và tính ứng dụng. Nội dung được biên soạn và kiểm duyệt bởi các chuyên gia hàng đầu, đảm bảo kiến thức chuẩn xác. Ngôn ngữ trình bày trong sáng, dễ hiểu, đi kèm nhiều hình ảnh minh họa, giúp các khái niệm trừu tượng trở nên hữu hình. Cuối cùng, hệ thống ví dụ và bài tập thực hành phong phú giúp sinh viên không chỉ "biết" mà còn "làm được". Đây chính là lý do vì sao sách CTDL&GT Dương Anh Đức và Trần Hạnh Nhi luôn là lựa chọn hàng đầu của giảng viên và sinh viên.

5.2. Lộ trình học tập hiệu quả với sách và các tài liệu bổ trợ

Để tối ưu hóa quá trình học, sinh viên nên tiếp cận cuốn sách theo từng chương. Sau khi đọc kỹ phần lý thuyết, hãy cố gắng tự cài đặt lại các ví dụ trong sách mà không nhìn vào mã nguồn. Tiếp theo, hãy bắt tay vào giải các bài tập ở cuối chương. Kết hợp việc đọc giáo trình Trần Hạnh Nhi PDF với việc xem lại slide bài giảng CTDL&GT ĐH KHTN để củng cố kiến thức. Đồng thời, tham gia các diễn đàn lập trình, các nhóm học tập để trao đổi và tìm kiếm lời giải bài tập sách Trần Hạnh Nhi khi cần thiết. Một lộ trình học tập chủ động và có hệ thống như vậy sẽ giúp bạn chinh phục hoàn toàn môn học quan trọng này.

17/07/2025
Giáo trình cấu trúc dữ liệu và giải thuật trần hạnh nhi dương anh đức phần 1

Trích đoạn nội dung tài liệu

CHƯƠNG 1 TONG QUAN Vé GIAI THUẬT VÀ CẤU TRÚC DỮ LIỆU. Mục tiêu 2 Giới thiệu vai trò của việc tổ chức đữ liệu trong một để án tin học. #“ Mối quan hệ giữa giải thuật và cấu trúc dữ liệu. '#' Các yêu câu tổ chức cấu trúc dữ liệu 'ˆ Khái niệm kiểu dữ liệu_cấu trúc dữ liệu *# Tổng quan vẻ đánh giá độ phức tạp giải thuật 1.

VAI TRÒ CỦA CẤU TRÚC DỮ LIỆU TRONG MỘT bE AN TIN HOC + Thực hiện một để án tin học là chuyển bài toán thực tế thành bài toán có thể giải quyết trên máy tính. Một bài toán thực tế bất kỳ đều bao gồm các đối tượng dữ liệu và các yêu cầu xử lý trên những đối tượng đó. Vì thế, để xây dựng một mô hình tin học phản ánh được bài toán thực tế cẩn chú trọng đến hai vấn để: “Tổ chức biểu diễn các đối tượng thực tế Các thành phần dữ liệu thực tế đa dang, phong phú và thường chứa đựng những quan hệ nào đó với nhau, do đó trong mô hình tin học của bài toán, cẩn phải tổ chức , xây dựng các cấu trúc thích hợp nhất sao cho vừa có thể phản ánh chính xác các đữ liệu thực tế này, vừa có thể dễ dàng dùng máy tính để xử lý. Công việc này được gọi là xây dựng edu trúc dữ liệu cho bài toán.

Xây dựng các thao tác xử lý đữ liệu Từ những yêu cẩu xử lý thực tế, cẩn tìm ra các giải thuật tương ứng để xác định trình tự các thao tác máy tính phải thi hành để cho ra kết quả mong muốn, đây là bước xây dựng giải thuật cho bài toán. + Tuy nhiên khi giải quyết một bài toán trên máy tính, chúng ta thường có khuynh hướng chỉ chú trọng đến việc xây dựng giải thuật mà quên đi tầm quan trọng của việc tổ chức dữ liệu trong bài toán. Giải thuật phản ánh các phép xử lý, còn đối tượng xử lý của giải thuật lại là dữ liệu, chính dữ liệu chứa đựng các thông, tin cẩn thiết để thực hiện giải thuật. Để xác định được giải thuật phù hợp cần phải biết nó tác động đến loại dữ liệu nào (ví dụ để làm nhuyễn các hạt đậu, người ta dùng cách xay chứ không băm bằng đao, vì đậu sẽ văng ra ngoài) và khi chọn lựa cấu trúc dữ liệu cũng cẩn phải hiểu rõ những thao tác nào sẽ tác động đến nó (ví dụ để biểu diễn các điểm số của sinh viên người ta dùng số thực thay vì chuỗi ký tự vì còn phải thực hiện thao tác tính trung bình từ những điểm số đó).

Như vậy trong một để án tin học, giải thuật và cấu trúc dữ liệu có mối quan hệ chặt chẽ với nhau, được thể hiện qua công thức : Cấu trúc dữ liệu + Giải thuật = Chương trình - Với một cấu trúc dữ liệu đã chọn, sẽ có những giải thuật tương ứng, phù hợp. Khi cấu trúc dữ liệu thay đổi, thường giải thuật cũng phải thay đổi theo để tránh việc xử lý gượng ép, thiếu tự nhiên trên một cấu trúc không phù hợp. Hơn nữa, một cấu trúc dữ liệu tốt sẽ giúp giải thuật xử lý trên đó có thế phát huy tác dụng tốt hơn, vừa đáp ứng nhanh vừa tiết kiệm vật tự, giải thuật cũng đễ hiểu và đơn giản hơn. Ví dụ 1: Một chương trình quản lý điểm thỉ của sinh viên cẩn lưu trữ các điểm số của 3 sinh viên.

Do mỗi sinh viên có 4 điểm số ứng với 4 môn học khác nhau nên dữ liệu có dạng. bảng như sau: Sinh viên | Môn 1 | Môn 2 | Môn 3 | Môn 4 SV1 vỉ 9 5 2 sv2 5 0 9 4 sv3 6 x ? 4 Chỉ xét thao tác xử lý là xuất điểm số các môn của từng sinh viên. Giả sử có các phương án tổ chức lưu trữ sau: Phương án 1 : Sử dựng màng một chiều Có tất cả 3SV)*4(Môn) = 12 điểm số cẩn lưu trữ, do đó khai báo mắng resu)t như sau : int result {12} = {7, 9 5, 2, 5, 0, 9, 4, 6, 3, 7, 4}; khi đó trong mảng result' các phần tử sẽ được lưu trữ như sau: z[Ƒs|s|z|z|o|9 sw 2 bo Và truy xuất. điểm số môn j của sinh viên ¡ - là phần tử tại (dòng i, cột j) trong bảng - phải sử dụng một công thức xác định chỉ số tương ứng trong mắng result: bảngđiểm(dòng i, cộtJ) => resul((-1)*số cột) + j] Ngược lại, với một phản tử bất kỳ trong mảng, muốn biết đó là điểm số của sinh viên nào, môn gì, phải dùng công thức xác định sau result i] = bảngđiểm (dong((i / số cột) +1), cột (i % số cột) ) Với phương án này, thao tác xử lý được cài đặt như sau : void t XuatDiem() - ⁄/Xuất điểm số của tất cả sinh viên const int so mon = 4; int sv,mon; for (int i=0; i<12; i+) ( sv = i/so_mon; mon = ¡ $ so non; rint£ (*Điểm môn %d của sv %d là:%d”, mon, sv, zesu1t[1)); } Phương án 2 : Sử dụng mảng 2 chiều Khai báo mảng 2 chiều result c6 kích thước 3 dòng* 4 cột như sau: int result(31(4] =({ 7, 9 5, 2), (5, 0, 9, 4}, (6, 3,7, 4 112 khi đó trong mảng result các phần tử sẽ được lưu trữ như sau : Dòng 0 Sano =7| Sai] =9 result{012] =ð |result[0][3) =2 Dòng 1 |result[1(0) =5 |result[1](1] =0 [result{112] =9|result[11{3) =4 Đồng 2 |result[21(0] =6 | result[2)(1] =3 |resultL2]{2] =7 |result[21(3] =4.

Và truy xuất điểm số mônj của sinh viên ¡ - là phần tử tại (dòng ¡, cột j) trong bảng - cũng chính là phẩn tử nằm ở vị trí (dòng ¡, cột j) trong mảng 8 bảngđiểm(dòng icộtj) => resul[ ¡]U] 'Với phương án này, thao tác xử lý được cài đặt như sau : void XuatDiem() //Xuat điểm số của tất cả sinh viên { int so_mon = 4, so_sv for ( int i=0; i<so_svs i+) for ( int j=0; iSso mon; 4+) print£ (*Điểm môn %d của sv %d là: %d“, j„ i, result {i} {3])7 Y NHẬN XÉT ©ó thể thấy rõ phương án 2 cung cấp một cấu trúc lưu trữ phù hợp với dữ liệu thực tế hơn phương án 1, và do vậy giải thuật xử lý trên cấu trúc dữ liệu của phương án 2 cũng đơn giản, tự nhiên hơn. CÁC TIÊU CHUẨN ĐÁNH GIÁ CẤU TRÚC DỮ LIỆU Do tắm quan trong đã được trình bày trong phần 1.1, nhất thiết phải chú trọng đến việc lựa chọn một phương án tổ chức dữ liệu thích hợp cho để án. Một cấu trúc dữ liệu tốt phải thỏa mãn các tiêu chuẩn sau : * Phản ánh đúng thực tế : Đây là tiêu chuẩn quan trọng nhất, quyết định tính đúng đắn của toàn bộ bài toán. Cẩn xem xét kỹ lưỡng cũng như dự trù các trạng thái biến đổi của dữ liệu trong chu trình sống để có thể chọn cấu trúc dữ liệu lưu trữ 9 thể hiện chính xác đối tượng thực tế.

Ví dụ : Một số tình huống chọn cấu trúc lưu trữ sai : - Chọn một biến số nguyên int để lưu trữ tiền thưởng bán hàng (được tính theo công thức tiển thưởng bán hàng = tri giá hàng * 5%), do vậy sẽ làm tròn mọi giá trị tiền thưởng gây thiệt hại cho nhân viên bán hàng. Trường hợp này phải sử dụng biến số thực để phản ánh đúng kết quả của công. thức tính thực tế. ~ Trong trường trung học, mỗi lớp có thể nhận tối đa 28 học sinh.

Lớp hiện có 20 học sinh, mỗi tháng mỗi học sinh đóng. Chọn một biến số nguyên unsigned char ( khả năng lưu trữ 0 - 255) để lưu trữ tổng học phí của lớp học trong tháng, nếu xảy ra trường hợp có thêm 6 học sinh được nhận vào lớp thì giá trị tổng học phf thu được là $260, vượt khỏi khả năng lưu trữ của biến đã chọn, gây ra tình trạng tràn, sai lệch. * Phù hợp uói các thao tác trên đó: Tiêu chuẩn này giúp tăng tính hiệu “quả của để án: việc phát triển các thuật toán đơn giản, tự nhiên hơn; chương trình đạt hiệu quả cao hơn về tốc độ xử lý. Ví dụ: Một tình huống chọn cấu trúc lưu trữ không phù hợp: Cần xây dựng một chương trình soạn thảo văn bản, các thao tác xử lý thường xảy ra là chèn, xoá sửa các ký tự trên văn bản.

Trong thời gian xử lý văn bản, nếu chọn cấu trúc lưu trừ văn bản trực tiếp lên tập tin thì sẽ gây khó khăn khi xây 10 dựng các giải thuật cập nhật văn bản và làm chậm tốc độ xử lý của chương trình vì phải làm việc trên bộ nhớ ngoài. Trường hợp này nên tìm một cấu trúc dữ liệu có thể tổ chức ở bộ nhớ trong để lưu trữ văn bản suốt thời gian soạn thảo. lưu ý F Đối với mỗi ứng dụng , cẢn chú ý đến thao tác nào được sử dụng nhiều nhất để lựa chọn cấu trúc dữ liệu cho thích hợp. * Tiết kiệm tài nguyên hệ thống: Cấu trúc đữ liệu chỉ nên sử dụng tài nguyên hệ thống vừa đủ để đảm nhiệm được chức năng của nó.

Thông thường có 2 loại tài nguyên cẩn lưu tâm nhất : CPU và bộ nhớ. Tiêu chuẩn này nên cân nhắc tùy vào tình huống cụ thể khi thực hiện để án. Nếu tổ chức sử dụng. để án cẩn có những xử lý nhanh thì khi chọn cấu trúc đữ liệu yếu tố tiết kiệm thời gian xử lý phải đặt nặng hơn tiêu chuẩn sử dụng tối ưu bộ nhớ, và ngược lại.

Ví dụ : Một số tình huống chọn cấu trúc lưu trữ lãng phí: - Sử dụng biến int (2 bytes) để lưu trữ một giá trị cho biết. tháng biện hành. Biết rằng tháng chỉ có thể nhận các giá trị từ 1-12, nên chỉ cần sử dụng kiểu char _ (1 byte) là đủ. - Để lưu trữ danh sách học viên trong một lớp, sử dụng mảng 50 phần tử (giới hạn số học viên trong lớp tối đa là 50).

Nếu số lượng học viên thật sự ít hơn 50, thì gây lãng phí. Trường hợp này cẩn có một cấu trúc dữ liệu linh động hơn mảng: ví dụ xâu liên kết - sẽ được bàn đến trong các chương. KIỂU DỮ LIỆU Máy tính thực sự chỉ có thể lưu trữ đữ liệu ở dạng nhị phân thô. Nếu muốn phản ánh được dữ liệu thực tế đa dạng và phong phú,cẩn phải xây dựng những phép ánh xạ, những qui tắc tổ chức phức tạp che lên tắng dữ liệu thô, nhằm đưa ra những khái niệm logic vẻ hình thức lưu trữ khác nhau thường được gọi là kiểu đử liệu.

Như đã phân tích ở phần 1.1, giữa hình thức lưu trữ dữ liệu và các thao tác xử lý trên đó có quan hệ mật thiết với nhau.

Nội dung được bảo vệ bản quyền — Tải xuống đầy đủ