Sự phân tích các đoạn(Segment decomposition)

Một phần của tài liệu Lý thuyết danh sách và quá trình tự động hóa vận chuyển tại nhà máy sản xuất xi măng việt nam (Trang 28)

Định lý sau là có thể được sử dụng như việc sử dụng các điểm để phân chia các đoạn.

Định lý 1: [segment Decompostion] giả sử S T là được định nghĩa bởi:

S x = / f * p segs x T x = / f * p tails x

Sau đó ta có: Sx= / T * inits x.

Chứng minh: chứng minh bằng việc tinh toán như sau:

S x = /f * p segs x

= /f * p ( /tails * inits x) (defn.seqs) = /f * ( /(p )* tails * inits x) ( promotion) = /( /(f * ) * (p )* tails * inits x) (* promotion) = /( /) * (f * ) * (p ) * tails * inits x (/ promotion) = /(( /) . (f *) . (p ) . tails) * inits x (*, . distrib.) = /T * inits x (defn. T)

Hệ quả 1. Giả sử T = ( e) cho một vài phép toán và giá trị e. Từ đó:

S = ( /) . ( e).

Chứng minh: ta sử dụng mối quan hệ giữa và .

Điều đó được chỉ ra từ hệ quả này nếu và có giá trị xác định thì Sx có thể được tính toán trong O(n) bước, trong đó n = #x.

28 Theo bổ đề nếu đưa ra điều kiện phù hợp cho T để mở rộng như việc rút gọn trái.

Bổđề 6: Giả sử T x = /f * tails x, trong đó: f = ( e). Nếu phân phối theo như: (a b) c = (a c) (b c), từ đó:

T = ( e) trong đó: a b = (a b) e.

Chứng minh: dễ dàng để chỉ ra T[] = e. Chúng ta chứng minh :

T (x [a]) = (T x a) e. Để thỏa mãn công thức, ta xét nếu f = ( e), từ đó:

f * ( [a]) * xs = ( a) * f * xs, với mọi danh sách xs. Nếu phép phân phối với phép , từ đó: / ( a) * xs = ( a)( / xs).

Sử dụng kết quả này, cùng với tính chuyên môn hóa đệ quy của tails, chúng ta có thể tính toán:

T(x [a]) = / f * tails(x [a])

= / f * (( [a]) * tails x [[]] ) = /(( a) * f * tails x e) = ( /( a) * f * tails x) e =( a)( / f * tails x) e = (T x a) e. Bổ đề đã được chứng minh. 1.3.3. Cực trị(Extremal problems).

Một vấn đề phổ biến là một số đoạn dài nhất của danh sách thỏa mãn điều kiện p. Ví dụ chúng ta có lẽ muốn đặt một đoạn đầu dài nhất của danh sách các từ , danh dách mà sẽ

29 được đặt trên một dòng và có chiều dài xác định, điều đó là có khả năng để giải quyết vấn đề về định dạng text. Vấn đề này sẽ được trình bày chi tiết trong phần sau.

Chúng ta hãy xem xét các vấn đề tính toán của các hàm:

S x = ↑ #/ p segs x. I x = ↑ # / p inits x T x = ↑ # / p tails x

Nó sẽ được giả sử rằng p sẽ gồm ít nhất một danh sách trống, và được đưa vào một danh sách x. Giả sử cần O(nk) bước để xác định nếu p là một danh sách có chiều dài n thì số bước tính toán cho S x là O(nk+2) bước, trong đó n = #x. Mục đích của chúng ta là kiểm tra sự hữu dụng của các điều kiện trên p.

Chúng ta có 3 điều kiện với mọi x và y như sau:

- Một điều kiện chỉ ra p trên các danh sách được gọi là prefix-closed nếu: P(x y) => px

- P được gọi là sufix-closed nếu : p (x y) => p y.

- Cuối cùng: p được gọi là segment-closed nếu nó là cả hai prefix và suffix- close:

p (x y) => p x ˄ py.

Bổđê 7. Nếu p là prefix-closed thì T = ( []), trong đó: (adsbygoogle = window.adsbygoogle || []).push({});

x a = ↑# /p tails(x [a])

do đó, S = (↑#/) . ( []).

Bổđề 8. Giả sử p là segment-closed và thỏa mãn:

30 thỏa mãn một số đặc điểm của q. Từ đó, T = ( []), trong đó:

x a = (↑# / q a tails x) [a].

Do đó, S = (↑#/) . ( []).

Điều đó chỉ ra rằng nếu q là tính toán trong O(nk) bước, sau đó Sx có thể được tính toán trong O(nk+1) bước.

31

CHƯƠNG II. CÁC NG DNG CA LÝ THUYT DANH SÁCH

Bài toán lý thuyết danh sách là bài toán rất rộng trong nhiều lĩnh vực mà cần xử lý một hoặc nhiều danh sách để đưa ra kết quả. Trong đó, các lĩnh vực khác nhau đã định nghĩa các phép toán khác nhau cho danh sách dữ liệu, các danh sách được sử dụng rất nhiều trong các ngôn ngữ lập trình: C#, VB, Java, …và trong lập trình tính toán: Mathematica, mapble…

Trong tài liệu này không đưa ra một ngôn ngữ lập trình nào để giải quyết bài toán mà chỉ đưa ra vấn đề và hướng giải quyết vì các ngôn ngữ lập trình hiện này đã có thể hỗ trợ rất nhiều, đặc biệt trong tính toán đã có bộ lập trình Mathematica rất hữu ích cho việc tính toán trên bộ dữ liệu lớn để giải quyết các bài toán thực tế trong các lĩnh vực khác nhau như: bài toán lãi tức, bài toán dự báo, tính lãi tức năm, bài toán trả góp, bài toán dự chi, bài toán dự báo giá chứng khoán,…Ngoài ra còn giải quyết được các bài toán tính min, max và quy hoạch tuyến tính.

2.1. Bài toán lãi tức

Một bài toán quan trọng trong tài chính là xác định lãi tức nhận được từ một lượng đầu tư cho trước. Giả sử ta cần đầu tư P$ với lợi tức hàng năm là r% được tính dồn m lần trong mỗi năm.

Khi đó tổng số tiền A(t) tại thời điểm t được tính theo công thức: A(t) =𝑃𝑃 �1 +𝑚𝑚𝑟𝑟�mt

Còn nếu P$ được đầu tư trong t năm với lợi tức năm r% và được tính dồn vào vốn liên tục, thì tổng số đầu tư A(t) tại thời điểm t là:

32 Ví du: giả sử đầu tư 12,500$ với lợi tức năm 7% và lãi được nhập vào vốn hàng ngày. Bao nhiêu tiền được tích lại và số lãi được bao nhiêu sau mỗi định kỳ 5 năm (tức là t = 0,5 ,10, 15, 20 năm), nếu số lãi được nhập vào vốn một cách liên tục( chứ không nhập hàng ngày) thì người đầu tư nhận được bao nhiêu tiền tại các thời điểm nói trên.

2.2. Bài toán dự báo

Bài toán: một người đầu tư vào cuối mỗi kỳ R$ và hàng năm anh ta đầu tư n kỳ. Nếu lãi tức tính theo từng thời kỳ đầu tư là j% thì giá trị dự báo của lãi tức năm sẽ được cho bởi công thức:

Sfuture = 𝑅𝑅 �(1+𝑗𝑗𝑗𝑗 )𝑛𝑛�

Ví dụ: Tìm hàm dự báo future cho phép tính dự báo lãi tức trong 60 tháng nếu một người đầu tư vào cuối mỗi tháng số tiền 250$ với lãi tức năm là 7%. Lập bảng dự báo lãi tức cho 12 tháng nếu số tiền đầu tư cuối mỗi tháng là 150$, lãi tức năm là 8%, và với t = 1,5,9,13,…,21,25.

2.3. Tính lãi tức hàng năm

Một loại bài toán khác thường gặp trong ngành tài chính là bài toán sau: bắt đầu mỗi kỳ đầu tư R$, với lãi suất j%/kỳ và đầu tư mỗi năm n kỳ. Khi đó lãi tức năm được cho bởi công thức:

Sdue = 𝑅𝑅 �(1+𝑗𝑗)𝑛𝑛+1𝑗𝑗 −1−1�

Ví dụ: gọi “due” là hàm tính lãi tức, hãy dùng due để tính (a) lãi tức nếu mỗi đầu tháng đầu tư 500$ với lãi tức năm 12% và phải trích nhập lãi hàng tháng, trong thời hạn 3 năm, (b) Tính lãi tức cho khoản đầu tư hàng tháng 100$ với lãi tức 9%, lãi được nhập vào hàng tháng và thời gian đầu tư là 10 năm; xét cho trường hợp k = 1,2,3,..,10.

33

2.4. Giá trị hiện thời

Một bài toán thường gặp trong toán học tài chính là xác định số tiền cần phải đầu tư để bảo đảm cho một lợi tức nhất định trong khoảng thời gian nào đó. Gọi p là giá trị hiện thời (present value) của lợi tức nếu đầu tư n lần/ năm và mỗi lần là R$, lãi suất hàng kỳ là j% và lãi được nhập vào vốn sau mỗi kỳ. Khi đó ta có công thức:

P = 𝑅𝑅 �1−(1+𝑗𝑗𝑗𝑗 )−𝑛𝑛�

Ví dụ: hãy định nghĩa hàm Present để tính giá trị hiện thời cho từng năm. Tiếp đó: a. Tìm tổng số tiền cần phải đâù tư nếu lãi suất năm 7.5% được nhập vào hàng

năm , để thu được tổng số 45000$ hàng năm (trong thời gian 40 năm) (adsbygoogle = window.adsbygoogle || []).push({});

b. Tìm số tiền phải đầu tư (với lãi suất 8%/năm) để mỗi năm đạt lợi tức là 20000$ + 5000$ với thời gian đầu tư 35 năm và với k = 0, 1, 2, 3, 4, 5 năm.

2.5. Tiền chịu nợhàng năm

Có thể xem xét tiền chịu nợ hàng năm như sau.

Gọi Pdef là giá trị hiện tại của tiền nợ do khoản vay R$ theo từng giai đoạn với n giai đoạn chịu nợ và với k giai đoạn, lãi suất nợ theo từng kỳ là j%. Khi đó Pdef được tính bởi công thức:

P = 𝑅𝑅 �1−(1+𝑗𝑗𝑗𝑗)−(𝑛𝑛+𝑘𝑘)−1−(1+𝑗𝑗𝑗𝑗 )−𝑘𝑘�

Ví dụ: gọi def[r,n,k,j] là hàm tính giá trị nợ, trong đó r là số nợ hàng năm, n là số năm phải chịu nợ, k là sốnăm mà vốn được đầu tư, j là tỷ lệ lãi suất. Dùng def để tính tổng số cần đầu tư trong 30 năm với lãi suất 15%/ năm để nhận được lợi tức năm 35000$ và thời gian là 35 năm. Bao nhiêu tiền phải đầu tư ở tuổi 25, 35, 45, 55 năm và thời gian là 40 năm kể từ tuổi 65 ?

34 Trước hết định nghĩa def sau đó dùng def để tính tổng số phải đầu tư cho 30 năm với

lãi tức 15% và đảm bảo lợi tức năm 35000$ và thời gian là 35 năm. Hàm tính giá trị hiện tại của lợi tức năm sẽ được cho sau đây, với

r = tổng số nợ

n = sốnăm được nhận lợi tức k = số năm thực hiện đầu tư j = lợi tức hàng năm.

2.6. Bài toán trả góp

Một món nợ được gọi là trả dần(trả góp) nếu cả phần nợ chính và lãi được trả lần lượt sau một thời kỳ nhất định. Nếu ta vay một khoản P$ với lãi suất j%/ kì và phải trả theo n lần, mỗi lần phải trả R$,

Trong đó, R =1−(1+𝑗𝑗𝑃𝑃𝑗𝑗)^(−𝑛𝑛)

Hàm amort[P,j,n] được định nghĩa sau đây cho phép xác định số tiền phải trả để hoàn số nợ P$ với lãi suất j% và tính lãi dồn hàng tháng trong thời gian n tháng.

Ví dụ: hãy tính số tiền phải trả hàng tháng cho một món nợ gồm 75000$ với lãi suất 9,5 %, hình thức trả góp trong thời hạn 20 năm.

2.7. Bài toán dự chi

Có thể dùng các hàm được định nghĩa ở phần trước để hoạch định một kế hoạch dự trù tài chính.

Ví dụ: một người về hưu có 1200000$. Nếu ông ta đầu tư số tiền này với lãi suất 7%/ năm thì hàng năm ông ta thu được bao nhiêu tiền nếu thời gian đầu tư là 40 năm.

35

2.8. Dạng chuẩn của bài toán quy hoạch tuyến tính

Dạng chuẩn của bài toán quy hoạch tuyến tính là bài toán cực tiểu hóa hàm mục tiêu được phát biểu như sau.

Cực tiểu hóa hàm:

Z = c1x1 + c2x2 +…+ cnxn

Trong đó x1,…,xn phải thỏa mãn các điều kiện: a11x1 + a12x2 +…+ a1nxn ≥ b1

a11x1 + a12x2 +…+ a1nxn ≥ b2 và x1 ≥ 0, x2 ≥ 0

..

a11x1 + a12x2 +…+ a1nxn ≥ bn

Ví dụ: cực tiểu hóa z(x1, x2,x3) = 4x1- 3x2+2x3 với điều kiện 3x1 – 5x2 + 2x3 ≤ 60, x1 – x2 + 2x3 ≤ 10, x1 + x2 - x3 ≤ 20 và x1, x2, x3 không âm.

2.9. Bài toán đối ngẫu

Cho bài toán quy hoạch tuyến tính dưới dạng chính tắc sau: (adsbygoogle = window.adsbygoogle || []).push({});

Cực tiểu hóa hàm z = � �𝑐𝑐𝑛𝑛𝑗𝑗=1 𝑗𝑗𝑥𝑥𝑗𝑗� với điều kiện � �𝑐𝑐𝑛𝑛𝑗𝑗=1 𝑖𝑖𝑗𝑗𝑥𝑥𝑗𝑗� ≥ bi và i=1,2,…,m;

xj ≥ 0 với j = 1,2,..,n.

Bài toán đối ngẫu có dạng sau: Cực tiểu hóa y = ∑𝑛𝑛 (𝑏𝑏𝑖𝑖𝑦𝑦𝑖𝑖)

𝑖𝑖=1 với điều kiện � �𝑎𝑎𝑚𝑚𝑖𝑖=1 𝑖𝑖𝑗𝑗𝑦𝑦𝑖𝑖� ≤cj và j=1,2,…,n; yi ≥ 0 với i = 1,2,..,m.

Tương tự đối với bài toán cực tiểu hóa z = � �𝑐𝑐𝑛𝑛𝑗𝑗=1 𝑗𝑗𝑥𝑥𝑗𝑗� với điều kiện � �𝑐𝑐𝑛𝑛𝑖𝑖=1 𝑖𝑖𝑗𝑗𝑥𝑥𝑗𝑗� ≤bi

và i=1,2,…,m; xj ≥ 0 với i = 1,2,..,n. Bài toán đối ngẫu là:

36 Cực tiểu hóa hóa y = ∑𝑛𝑛 (𝑏𝑏𝑖𝑖𝑦𝑦𝑖𝑖)

𝑖𝑖=1 với điều kiện � �𝑎𝑎𝑚𝑚𝑖𝑖=1 𝑗𝑗𝑦𝑦𝑖𝑖� ≤cj và j=1,2,…,n; yi ≥ 0 với i = 1,2,..,m.

Ví dụ: Cực tiểu hóa hàm z = 6x + 8y với điều kiện ràng buộc 5x + 2y ≤ 20, x + 2y ≤ 10, x ≥ 0, y ≥ 0.

Tuy nhiên, ngoài những bài toán trên Mathematica còn định nghĩa các phép toán đối với danh sách để giải quyết các bài toán về: Chuỗi Fourier, xấp xỉ danh sách nhờ các hàm chuỗi Fourier, phương trình truyền nhiệt một chiều.

Các ứng dụng của lý thuyết danh sách vào đại số tuyến tính để giải quyết các bài toán: không gian con cơ sở liên kết với một ma trận, thuật toán Gram – Schmidt, Ánh xạ tuyến tính, dạng chuẩn Jordan, phương pháp QR, áp dụng phương pháp QR để tính giá trị riêng.

37

CHƯƠNG III. LÝ THUYẾT DANH SÁCH VÀ QUÁ TRÌNH T

ĐỘNG HÓA VN CHUYN VÀO BÀI TOÁN QUN LÝ XÍ

NGHIỆP XI MĂNG.

3.1. Đầu vào bài toán

Trong luận văn, một ứng dụng nhỏ đã được xây dựng để mô phỏng cho các ứng dụng của lý thuyết danh sách trên thực tế.

Bài toán gồm các yêu cầu như sau:

- Quản lý người lái xe cho nhà máy - Quản lý xe cho nhà máy

- Quản lý các loại hàng hóa - Quản lý đơn vị nhập hàng - Quản lý xe ra vào nhà máy

- Sắp xếp hàng đợi và có chức năng gọi xe mang biển số XXX được đi qua. Đây là những chức năng cơ bản cần được giải quyết cho bài toán quản lý xí nghiệp xi măng Việt Nam.

Như vậy nhìn qua bài toán ta có những nhận xét sau:

- Bài toán cần phải sử dụng đến danh sách: danh sách người lái xe, danh sách các loại hàng hóa, danh sách xe của nhà máy, danh sách đơn vị nhập hàng và danh sách xe ra vào nhà máy.

- Khi đi vào các chức năng chi tiết: thêm, sửa, xóa. Chính các chức năng này đã sử dụng đến các phép toán trên danh sách như phép toán bỏ một phần tử trên danh sách, thêm một phần tử vào danh sách.

- Đặc biệt là chức năng: gọi xe mang biển số XXX được phép đi qua thì đã sử dụng đến phép toán tuần tự trên danh sách.

38

3.2. Giải pháp

Lý thuyết danh sách bao gồm rất nhiều phép toán trên danh sách và trên thức thế có rất nhiều ứng dụng cần sử dụng danh sách để chứa dữ liệu.

Danh sách dữ liệu để tính toán bằng các phép toán về lý thuyết danh sách, trên excel. Đặc biệt các danh sách được sử dụng rất nhiều trong các ngôn ngữ lập trình và thường được gọi là mảng, danh sách dữ liệu.

Từ các tính chất và phép toán trên danh sách mà danh sách được sử dụng rất nhiều trong các lĩnh vực sau đây: (adsbygoogle = window.adsbygoogle || []).push({});

Thứ nhất, Sử dụng trong đại số, trong toán học để miêu tả các tính chất, định lý, bổ đề có sử dụng đến danh sách để mô tả tính chất và định lý đó.

Thứ hai, danh sách được sử dụng rất nhiều trong các lĩnh vực trên thực tế: đời sống, trường học, khoa học, công việc nhưng đặc biết được sử dụng trong ngân hàng, cơ quan tài chính và các công việc về dự báo: khí tượng thủy văn, những công việc này hàng ngày có rất nhiều số liệu cần xử lý và trong đó đã sử dụng các phần mềm, công nghệ để chứa và xử lý dữ liệu này như : dataminning, datawirehouse và về cơ bản là vẫn sử dụng đến các danh sách dữ liệu để xử lý.

Thứ ba, lý thuyết về danh sách và các phép toán của nó cũng được mô phỏng trên các ngôn ngữ lập trình khác nhau. Các ngôn ngữ lập trình này đã đưa vào các phép toán trên các danh sách để người dùng có thể sử dụng một cách đơn giản nhất vào các công việc của họ.

Bài toán quản lý xí nghiệp Xi Măng gồm các chức năng: quản lý xe ra vào kho ở xí nghiệp; quản lý người lái xe; quản lý xe ra và vào kho; quản lý lượng hàng ra và vào kho, quản lý loại hàng và quản lý đơn vị nhập hàng…

39 Bài toán này đã sử dụng đến lý thuyết danh sách để giải quyết bài toán, bao gồm: danh sách người lái xe, danh sách xe, danh sách người đăng ký ra vào kho, danh sách đơn vị nhập hàng,…Thông qua ngôn ngữ lập trình (.NET) để xử lý các danh sách dữ liệu này để người dùng có thể sử dụng thuận tiện nhất.

Bài toán quản lý xí nghiệp Xi Măng đã giải quyết bài toán quản lý xe, quản lý người lái và đặc biệt quản lý việc các xe ra và vào kho. Tuy nhiên ngoài việc sử dụng lý thuyết

Một phần của tài liệu Lý thuyết danh sách và quá trình tự động hóa vận chuyển tại nhà máy sản xuất xi măng việt nam (Trang 28)