1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Cấu trúc dữ liệu mảng

44 87 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 44
Dung lượng 112,5 KB

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

Nội dung

Chẳng hạn , mảng năng suất lao động có mô tả NS [1..10].Chúng ta dễ dàng truy nhập các thành phần của mảng bằng cáchdùng tên mảng và chỉ số đi kèm với nó tức là dùng biến mangchỉ số .Ví

Trang 1

Biểu 1: Thống kê mức sử dụng nguyên vật liệu

Biểu này có năm dòng và 4 cột chứa 15 số liệu khác nhau

về mức độ sử dụng nguyên vật liệu của mỗi phân xưởng Ta nóirằng đây là một mảng gồm 5 dòng và 4 cột

Định nghĩa

Trang 2

Mảng ( Array ) là một tập hợp có thứ tự bao gồm một

số lượng cố định các phần tử,được truy cập với cùng một tên.

Trong ví dụ trên đây, biểu thống kê sử dụng nguyên vậtliệu là một mảng hai chiều

Chúng ta xét thêm ví dụ sau đây Cho số liệu về năng suấtlao động của 10 doanh nghiệp (Đơn vị tính: Triệu đồng)

nó Chẳng hạn , mảng năng suất lao động có mô tả NS [1 10].Chúng ta dễ dàng truy nhập các thành phần của mảng bằng cáchdùng tên mảng và chỉ số đi kèm với nó tức là dùng biến mangchỉ số Ví dụ biến mang chỉ số NS [2] xác định năng suất củadoanh nghiệp thứ 2

2.2 Cấu trúc dữ liệu mảng một chiều

Trang 3

Trước hết chúng ta xem xét cấu trúc dữ liệu mảng mộtchiều Cấu trúc dữ liệu loại này thường gặp rất nhiều trong hoạtđộng kinh tế Chẳng hạn năng suất lao động của 10 doanh nghiệp

là một mảng một chiều , một dãy số thống kê gồm 20 giá trị vềdoanh số bán lẻ của 20 trung tâm thương mại trong năm 1998, sốtiền đầu tư vào một công trình xây dựng của 15 nhà đầu tư nướcngoài cũng đều là các mảng một chiều.Trong các ví dụ trên đây ta

có các mảng một chiều Mảng NS[1 10] biểu diễn năng suất laođộng của các doanh nghiệp Mảng DOANHSO [1 20] biểudiễn mức doanh số bán lẻ của 20 trung tâm thương mại MảngDAUTU[1 15] biểu diễn mức đầu tư của 15 nhà đầu tư vào mộtcông trình xây dựng

Trang 4

Khai báo này chỉ thị cho chương trình dịch để ra một vùng

bộ nhớ liên tục đủ lớn để chứa các phần tử của mảng Địa chỉ của

ô nhớ đầu tiên dùng để chứa các phần tử đó được gọi là địa chỉ cơ

sở ( Base address) của mảng, ký hiệu là Base(A).Địa chỉ của bất

cứ phần tử nào cũng được tính dựa vào địa chỉ cơ sở này

Chúng ta xét một ví dụ khác Cho mảng B với mô tả: Var

B: array[-3 3] of real; giả sử mỗi phần tử được lưu trữ trong hai

từ máy

Trang 5

Trong trường hợp tổng quát, mảng một chiều (véc tơ C)

có n phần tử là C1, C2, Cn Giả sử mỗi phần tử chiếm L từ

máy thì mảng này được lưu trữ trong L *N từ máy liên tiếp nhau

theo mô hình sau đây:

Trang 6

F (i) = L * (i-1) gọi là hàm địa chỉ.

Ví dụ Xét cấu trúc lưu trữ của mảng năng suất lao độngcủa 15 doanh nghiệp; Giả sử năng suất lao động của mỗi doanhnghiệp chứa trong1 từ máy.Ta có hình ảnh của cấu trúc lưu trữtrong bộ nhớ như sau:

Trang 7

2.2.2 phép toán với mảng một chiều

Các phép toán thông dụng đối với mảng một chiều gồm : CREATE Tạo lập mảng một chiều

SORTING Sắp xếp mảng một chiều

SEACHING Tìm kiếm trong mảng một chiều

CALCULATE Tính toán với mảng một chiều

Trang 8

Trong các giải thuật với mảng một chiều dưới đây, biếnVector có mô tả như sau:

Var

Vector : array [ 1 n] of real;

2.2 3 Giải thuật tạo lập mảng một chiều.

Cho mảng một chiều A=(a i ) i=1,2 n

Giải thuật tạo lập mảng.như sau:

Procedure CreateVector ( a: Vector ; var n : interger );

2.2.4 Giải thuật sắp xếp mảng một chiều

Trong thực tế thường xuất hiện nhu cầu sắp xếp các thànhphần của mảng một chiều theo một trình tự xác định tiện lợi choviệc nghiên cứu đánh giá một hiện tượng , một quá trình kinh tế -

Trang 9

kỹ thuật nào đó Chẳng hạn, chúng ta cần sắp xếp mảng năng suấtlao động của 10 doanh nghiệp theo trình tự giảm dần để có mộtcái nhìn tổng quát về kết quả hoạt động của các doanhnghiệp.Hoặc sắp sếp vốn đầu tư của 15 nhà đầu tư theo chiềutăng dần giúp ta đánh giá dễ dàng qui mô đầu tư v v

Bây giờ ta xét giải thuật sắp xếp Cho mảng một chiều a(n)gồm n phần tử Giải thuật sắp xếp mảng một chiều này theo chiềutăng dần biểu diễn như sau

Procedure SortVector (a : Vector; Var n : integer);

Trang 10

Trong trường hợp sắp xếp giảm dần ta chỉ cần có một thayđổi nhỏ trong giải thuật bằng cách thay điều kiện kiểm tra a[i]>a[jbằng điều kiện a[i]<a[j].Tổng quan về sắp xếp và các giải thuậtsắp xếp khác nhau sẽ được nghiên cứu kỹ hơn trong chương 6

2.2.5 Giải thuật tìm kiếm trong mảng một chiều

Vấn đề tìm kiếm cũng thường xuất hiện khi giải quyết cácbài toán trong hoạt động kinh tế Chẳng hạn, trong số các nhàđầu tư nước ngoài, yêu cầu tìm kiếm và in ra họ tên nhà đầu tư có

số tiền đầu tư ban đầu là 120 triệu đôla , hoặc tìm kiếm và in ratên của các doanh nghiệp có giá trị tổng sản lượng bằng giá trịtổng sản lượng động trung bình v v

Bây giờ chúng ta xét giải thuật tìm kiếm Cho mảng mộtchiều A gồm n phần tử Giải thuật tìm kiếm một phần tử củamảng có giá trị bằng một đại lượng T cho trước được biểu diễnnhư sau:

Function SeachingVector (a : Vector ; Var n: integer ) : real;

Trang 11

end;

2.2.6 Giải thuật tính toán trong mảng một chiều

Các vấn đề tính toán trong mảng một chiều luôn luôn xuấthiện khi chúng ta muốn xác định các chỉ tiêu thống kê đặc trưngcủa mảng.Chẳng hạn, đối với mảng các nguồn vốn đầu tư vàomột công trình người ta muốn xác định vốn đầu tư trung bình củacác nguồn vốn đầu tư, mức độ chênh lệch của các mức đâu tư sovới giá trị trung bình v v

Các tiêu thức thống kê thông dụng nhất là:

- Giá trị trung bình;

- Phương sai;

- Độ lệch chuẩn

Sau đây là giải thuật:

Procedure CalculateVector (a : Vector; Var n : integer);

Trang 12

số dương Lập giải thuật xác định xem có bao nhiêu mức vốn đầu

tư và trong mỗi mức có bao nhiêu nhà đầu tư ?

Ta có chương trình sau đây :

Trang 14

if b[i]<>0 then muc:=muc+1;

end;

writeln(' ');

writeln('Tong so co ',muc,' muc von dau tu');

for i:=1 to muc do

2 .3 Cấu trúc dữ liệu mảng hai chiều ( Ma trận)

Xét mảng hai chiều trong trường hợp tổng quát có n dòng

và m cột.Loại cấu trúc dữ liệu này rất thường gặp trong kinh tế.Chẳng hạn như bảng tổng hợp kinh doanh trong một trung tâmthương mại đã bán ra m mặt hàng cho n khách hàng là một mảnghai chiều Bảng thống kê các định mức tiêu thụ n loại nguyên vậtliệu để chế tạo ra m loại sản phẩm trong một phân xưởng cũng làloại cấu trúc dữ liệu mảng hai chiều

2.3.1 Cấu trúc lưu trữ mảng hai chiều

Cho mảng hai chiều( hay một ma trận) sau đây A sau đây :

A=(A i j) i=1,2,3 n

j=1,2,3, m

Có hai phương pháp lưu trữ mảng hai chiều:

1 - Lưu trữ theo dòng(như trong BASIC, PASCAL)

Trang 15

2 - Lưu trữ theo cột ( như trong FORTRAN )

Đối với trường hợp lưu trữ theo cột, các phần tử củamảng sẽ được lưu trữ liên tiếp bắt đầu từ cột thứ nhất sau đó sangcột thứ hai, cột thứ ba vv,, cho đến hết cột cuối cùng của mảng

Cho mảng hai chiều với mô tả:

Trang 16

ĐC (Aij) = Base(A[i,j]) +(i-1) *m+(j-1)

Trong trường hợp lưu trữ theo cột ,cấu trúc trong bộ nhớ

sẽ như sau:

Trang 17

ĐC (Aij) = Base(A[i,j]) + (j-1) * n + (i-1)

Ví dụ cho mảng A = a[3,4], mỗi phần tử chiếm 1 từ máy.Tính địa chỉ của phần tử a23?

Phương pháp lưu trữ theo cột:

Trong trường hợp này n = 3 ; m = 4

Đc (A23) =Base (A) +(3-1)*3+(2-1) = Base (A) + 7

Lưu trữ theo dòng:

Công thức tính địa chỉ như sau:

ĐC (A23) = Base (A)+ (2-1)*3 + (3-1)=Base(A) +5

Trang 18

2.3.2 Các phép toán với mảng hai chiều

Các phép toán thông dụng với mảng hai chiều là:

1 - Tạo lập mảng hai chiều

2 - Tìm kiếm một phần tử của mảng hai chiều

3 - Cộng hai hoặc nhiều mảng hai chiều với nhau

4 - Nhân mảng hai chiều với mảng một chiều

5 - Nhân mảng hai chiều với mảng hai chiều

Trong các giải thuật với mảng hai chiều dưới đây,biếnMatrix được mô tả như sau:

Giải thuật tạo lập mảng hai chiều như sau:

Procedure CreateMatrix (a : Matrix; Var n ,m: integer );

Trang 19

end;

end;

Giải thuật này tạo lập một mảng hai chiều bằng cách sửdụng phương pháp lưu trữ theo dòng Trong quá trình này sẽ lầnlượt nạp các thành phần của mảng bắt đầu từ dòng thứ nhất,sau

đó sang dòng thứ hai v.v cho đến dòng cuối cùng để tạo thànhmột Storage Structure chứa các thành phần của mảng hai chiều

2.3.4 Giải thuật tìm kiếm

Cho mảng hai chiều A=(a i j) i=1,2,3, n

Trang 20

2 3.5 Giải thuật nhân mảng hai chiều với một véctơ

Bài toán nhân mảng hai chiều với một véc tơ có rất nhiềuứng dụng trong thực tế nhất là trong kinh tế Chẳng hạn, chúng taxét bài toán lập bảng tổng hợp kinh doanh của một trung tâmthương mại điệnvà điện tử gồm 5 cửa hàng và đã bán ra 10 loạihàng hoá khác nhau.Biết số lượng mỗi loại hàng mà từng cửahàng đã bán và đơn giá của mỗi mặt hàng Trong trường hợpnày bảng số liệu về số lượng các mặt hàng ( có 10 loại ) đã bántrong 5 cửa hàng là một mảng hai chiều kích thước 5x10 ,còn đơngiá từng mặt hàng là một véctơ gồm 10 thành phần( Mỗi loạihàng có một giá bán cố định) Thực hiện nhân ma trận với véctơchúng ta sẽ tính toán được được doanh số của mỗi cửa hàng

Số liệu của bài toán kinh tế này được biểu diễn trong cấutrúc mảng hai chiều như sau:

Biểu 1: Thống kê số lượng các loại hàng đã bán

trong từng cửa hàng ( CH ) của Trung tâm thương mại

Loại hàng 1 Loại hoàng 2 Loại hàng10

Trang 21

Loại hàng 2 150

Kết quả tính toán sẽ được biểu diễn dưới dạng biểu 3 sau đây:

Biểu 3 : Tính toán doanh số bán lẻ trong 5 cửa hàng của

một Công ty thương mại

Tên cửa hàng Tiền bán hàng

Trang 22

Giải thuật biểu diễn như sau:

Procedure MultiMatrix (a : Matrix;b,c : Vector; var n,m :integer );

Trang 23

2.3.6 Giải thuật cộng mảng hai chiều

Chúng ta xét bài toán dưới dạng tổng quát sau đây:

Cho mảng hai chiều A=(aij) và B=(bij) i=1,2, n

j=1,2, m

Lập giải thuật cộng hai mảng

Như đã biết công thức cộng hai mảng C = A+B ,

trong đó mỗi thành phần của mảng kết quả Cij được xácđịnh theo công thức:

Cij = Aij + Bij i = 1,2 n

j= 1,2 m

Sau đây là giải thuật :

Procedure AdditionMatrix(a,b,c : Matrix; Var n,m : integer);

Trang 25

Biểu 2 : Thống kê kết quả kinh doanh 6 tháng cuối năm 1998

Tên CH tiền hàng 1 tiền hàng 2 tiền hàng 10

Biếu 3 : Thống kê kết quả kinh doanh trong năm 1998 (Triệu

Trang 26

2 3.7 Giải thuật nhân mảng hai chiều với mảng hai chiều

Mô hình nhân mảng hai chiều với mảng hai chiều có rấtnhiều ứng dụng trong việc giải quyết các bài toán kinh tế Chẳng hạn chúng ta xét bài toán lập bảng tổng hợp kinh doanhcủa một trung tâm thương mại trong điều kiện giá cả biến độngtrong từng tháng, tức là mô hình đã khá gần hơn với điều kiệnkinh doanh trong thực tế Trong mô hình của giải thuật nhânmảng hai chiều với mảng một chiều trên đây chúng ta đã đơngiản hoá đi so với thực tế Đó là chúng ta đã giả sử rằng giá cảcủa các mặt hàng không phụ thuộc vào yếu tố thời gian, tức là giábán của chúng là như nhau tại tất cả các tháng trong năm Nhưngtrong thực tế thì giá cả lại luôn luôn biến động từ tháng này sangtháng khác Do đó bây giờ chúng ta giả sử rằng trung tâm thươngmại đã bán ra 10 loại hàng được thống kê theo từng tháng của 6tháng đầu năm ( Từ tháng 1 đến tháng 6) , cho biết số lượng mỗiloại hàng đã bán trong từng tháng,đơn giá của mỗi loại hàngtrong từng tháng Trong trường hợp này ,bảng số liệu về sốlượng các mặt hàng gồm 10 chủng loại đã bán trong 6 tháng

là một mảng hai chiều kích thước (6 * 10) , còn đơn giá từng mặthàng trong mỗi tháng là một mảng hai chiều kích thước (10 *6) Thực hiện nhân hai mảng hai chiều này với nhau chúng ta thuđược doanh số trong từng tháng của trung tâm thương mại

Các bảng thống kê làm cơ sở để tính toán được biểu diễnnhư sau:

Bảng 1: Thống kê số lượng các loại hàng đã bán mỗi tháng

trong 6 tháng đầu năm

Trang 27

loại hàng 1 loại hàng 2 loại hàng 10

Kết quả tính toán là bảng tổng hợp kinh doanh sau đây:

Bảng 3: Bảng tổng hợp kết quả kinh doanh theo giá bán lẻ từng

tháng của 6 tháng đầu năm

Trang 28

Giải thuật nhân mảng hai chiều với mảng hai chiều như sau:

Procedure MultiMatrix(a,b, c :Matrix; var n,m ,q :integer);

Trang 30

sử dụng cấu trúc dữ liệu mảng sẽ giúp chúng ta giải quyết cácbài toán đặt ra một cách hiệu quả, tiện lợi cho việc tổ chức cácquá trình tính toán, biểu diễn chương trình một cách ngắn gọn.Cấu trúc dữ mảng cũng là loại cấu trúc dữ liệu rất thông dụngđối với các mô hình tối ưu hoá nhằm xác định phương án tối ưutrong các mô hình kinh tế

Bây giờ chúng ta xem xét việc ứng dụng cấu trúc dữ liệumảng hai chiều trong việc giải một số bài toán

Chương trình như sau :

Program Tinh_ max ;

write(' Cho biet so dong: ');readln(m);

write(' Cho biet so cot: ');readln(n);

for i:=1 to m do

for j:=1 to n do

Trang 32

Bài toán 2

Cho mảng hai chiều A= (Aij) i=1,2,3, n;j=1,2, m

Lập giải thuật sắp sếp các thành phần của mỗi dòng theo trình tựtăng dần?

write(' Cho biet so dong: ');readln(m);

write(' Cho biet so cot: ');readln(n);

Trang 33

2 - Xác định số lượng các thành phần khác không của mỗi cột?

3 - Xác định tỷ lệ các thành phần khác không của mảng so với

Trang 34

l,m,n,i,j:integer;

tl:real;

Begin

write(' Cho biet so dong: ');readln(m);

write(' Cho biet so cot: ');readln(n);

Trang 35

1 - Sắp sếp các dòng lẻ của mảng theo thứ tự giảm dần;

2 - Sắp sếp các dòng chẵn của mảng theo thứ tự tăng dần?

Program Sap _ dong_cot;

Trang 36

write(' Cho biet so dong: ');readln(m);

write(' Cho biet so cot: ');readln(n);

Trang 37

Điều tra mức thu nhập của dân cư

1 triệu 2 triệu 10 triệu

Trang 38

2- Xác định mức thu nhập có số người đông nhất của mỗi tỉnh

3 - Tính tỷ trọng của những người có mức thu nhập 100 0000

đồng so với tổng số người điều tra ?

Program Dieu_ tra_ muc_ thu_ nhap;

Trang 39

write(' Cho biet so cot: ');readln(n);

{Hien ket qua tu day}

writeln (' 1 trieu 2 trieu 10 trieu ');

Trang 40

if g[j]=3 then f[j]:='Hai phong'

else f[j]:='Da nang';

writeln(' Muc thu nhap ', e[j], ' co so nguoi nhieu nhat o ',f[j]);end;

Trang 43

Câu hỏi chương 2

1 - Định nghĩa cấu trúc dữ liệu mảng Cho ví dụ mảng một chiều

và mảng hai chiều? Phương pháp truy nhập mảng?

2 - Khái niệm mảng một chiều, phương pháp lưu trữ mảng một

5 - Trình bày giải thuật tìm kiếm trong mảng một chiều?

6 - Trình bày giải thuật tính toán đối với mảng một chiều? Minhhoạ giải thuật bằng một ví dụ số cụ thể?

7 - Khái niệm mảng hai chiều? Phương pháp lưu trữ mảng hai

chiều? Tính toán địa chỉ của thành phần A[2,4] của một mảnghai chiều A gồm 4 dòng và 4 cột , biết mỗi phần tử của mảnglưu trữ trong một từ máy?

8 - Trình bày giải thuật tạo lập mảng hai chiều?

9 - Trình bày giải thuật tìm kiếm một phần tử trong mảng hai

chiều?

10 - Trình bày giải thuật cộng mảng hai chiều? Cho một ví dụ cụ

thể cộng mảng hai chiều ứng dụng trong kinh tế?

11 - Trình bày giải thuật nhân mảng hai chiều với véc tơ? Cho

một ví dụ ứng dụng giải thuật này trong kinh tế?

12 - Trình bày giải thuật nhân mảng hai chiều với nhau Cho

một ví dụ ứng dụng giải thuật này trong kinh tế

Ngày đăng: 18/12/2018, 12:14

TỪ KHÓA LIÊN QUAN

w