Thuật toán chuyển đổi sơ đồ cấutrúc logic thành sơ đồ khối

Một phần của tài liệu Nghiên cứu các phương pháp nâng cao độ tin cậy cho hệ thống tính toán qua cấu trúc hệ thống (Trang 27)

Sơ đồ cấu trúc logic [20] là biểu diễn cấu trúc logic của hệ thống bằng sơ đồ theo các quy ƣớc về cách mã hoá và biểu diễn mối quan hệ giữa các thành phần dƣới dạng các ký hiệu.

Xây dựng sơ đồ cấu trúc logic của hệ thống cho hình ảnh trực quan về cấu trúc hệthống và sẽ làđiều kiện tiên đề để có thể phân tích và đánh giá độ tin cậy của hệ thống.

- Các phần tử của một cấu trúc logic (hay còn gọi là các đỉnh), các nút trung gian có một nút khởi đầu và kết thúc (đầu vào và đầu ra).

- Mỗi phần tử của cấu trúc logic đƣợc thay thế bởi một giá trị hợp lý. Mỗi phần tử đại diện cho một đỉnh.

b. Các đỉnh đƣợc kết nối bởi các cạnh. c. Hƣớng của các cạnh trong đồ thị :

- Nếu việc truyền trao đổi thông tin giữa các đỉnh chỉ theo một hƣớng thì các cạnh tƣơng ứng trong sơ đồ cấu trúc logic có hƣớng theo hƣớng truyền. - Nếu các đỉnh truyền thông tin theo cả hai hƣớng thì các cạnh tƣơng ứng

trong sơ đồ khối là vô hƣớng.

d. Cặp gồm hai đỉnh khác nhau trao đổi thông tin cho nhau đƣợc gọi là một cạnh (cung) của sơ đồ cấu trúc logic.

1.4.2.2 Thuật toán chuyển đổi sơ đồ cấu trúc logic sang đồ thị liên kết:

Theo bài toán về lý thuyết đồ thị thì ta có các định nghĩa về phân loại các đỉnh và các cạnh của đồ thị liên kết: định nghĩa về nút nguồn, nút đích, các cạnh, các cung, đƣờng đi đầy đủ, đơn đồ thị,… Dựa trên lý thuyết đồ thị về các đỉnh và cạnh đồ thị thì chúng ta xây dựng thuật toán chuyển đổi từ sơ đồ cấu trúc logic sang đồ thị liên kết[1] gồm các bƣớc sau:

Bước 1:Nguồn của sơ đồ cấu trúc logic đƣợc thay thể bằng các đỉnh của đồ thị, gọi là đỉnh gốc. Các cung bắt đầu từ đỉnh nguồn của sơ đồ cấu trúc logic đƣợc thay thế bằng các cung của đồ thị và xuất phát từ đỉnh gốc.

Bước 2: Các nút đỉnh đƣợc thay thế bằng các đỉnh của sơ đồ cấu trúc logic .

Bước 3:Các cung trong sơ đồ cấu trúc logic đƣợc thể hiện bằng các cung trong đồ thị với các đỉnh tƣơng ứng.

Bước 4:Tất cả các đỉnh khác (đỉnh khuyên - bắt đầu và kết thúc tại chính nó) đƣợc thể hiện bằng các cung trong đồ thị.

Bước 5:Các cung và các cạnh của đồ thị đƣợc thay thế bởi các cung của sơ đồ cấu trúc logic .

Đồ thị liên kết nói chung (có ít nhất một cạnh) là có hƣớng nếu các cặp (i,j) đƣợc sắp thứ tự và mỗi cặp (i,j) là một cung. Đồ thị là vô hƣớng nếu các cặp (i,j) không sắp thứ tự và mỗi cặp (i,j) gọi là một cạnh

1.4.2.3Thuật toán tìm tất cả các đường đi trong ma trận liên kết:

Ý tưởng thuật toán: Đồ thị có thể đƣợc biểu diễn bằng ma trận kề vuông cấp n, với n là số đỉnh của đồ thị. Phần tử δij ở hàng i cột j (i,j=0,1,2, ..., n) đƣợc xác định nhƣ sau:

- δij =1 nếu cặp đỉnh xi và xj có cạnh nối với nhau.

- δij =0 nếu cặp đỉnh xi và xj không có cạnh nào nối với nhau.

Ma trận của đồ thị vô hƣớng là ma trận đối xứng, tức là các phần tử đối xứng qua đƣờng chéo chính sẽ tƣơng ứng bằng nhau.

b. Trường hợp đồ thị cần biểu diễn là có hướng [1]:

Ý tưởng thuật toán: Đồ thị có thể đƣợc biểu diễn bằng ma trận kề vuông cấp n, với n là số đỉnh của đồ thị. Phần tử δij ở hàng i cột j (i,j=0,1,2, ..., n) đƣợc xác định nhƣ sau:

- δij =1 nếu cặp đỉnh (xi, xj ) có cung.

- δij =0 nếu cặp đỉnh (xi, xj ) không có cung nào.

Ma trận của đồ thị có hƣớng không phải là ma trận đối xứng và ma trận biểu diễn đồ thị đơn là ma trận logic.

c. Thuật toán tìm tất cả các đường đi trong ma trậnkề:

Để tìm tất cả các đƣờng đi trong ma trận kề dựa trên thao tác nhân ma trận liên kết một cột tƣơng ứng của ma trận đó đƣợc thể hiện nhƣ sau:

Bk = A B*k- 1(*)

Trong đó: - Bk cột ma trận kết quả của phép nhân (*). - B*k- 1 là kết quả của phép chuyển đổi B k- 1 ;

Bài toán tìm tất cả các đƣờng đi trong ma trận kề trở thành bài toán cho ma trận A và ma trận cột B1 hãy tìm tất cả các đƣờng đi có thể có từ nguồn (điểm phát) tới đích (điểm nhận). (adsbygoogle = window.adsbygoogle || []).push({});

Thuật toán:

- Bước 1: Kiểm tra ma trận cột B1 có chứa cung bắt đầu từ đỉnh nguồn hay không. Nếu cung tồn tại thì ghi nhận đƣờng đi đó và thay thế cung đó bởi giá trị 0. Sự thay đổi này sẽ cho ta kết quả là B*1 ;

- Bước 2: Xét với k=2.

- Bước 3: Thực hiện phép tính (*) để tìm các giá trị Bk tƣơng ứng.

- Bước 4: Kiểm tra Bk bắt đầu từ nguồn, nếu đƣờng đi tồn tại thì ghi nhớ và thay thế cung đƣờng đi đó bởi giá trị 0. Nếu đƣờng đi xuất hiện trong Bk là đƣờng đi đầy đủ thì thay thế Bk =0. Sự thay đổi này cho ta kết quả là B*k .

- Bước 5: Kiểm tra B*k . Nếu B*k =0 thì thực hiện tiếp bƣớc 7. Nếu B*k ≠0 thì thực hiện tiếp bƣớc 6.

- Bước 6: Kiểm tra điều kiện k ≤ n-1. Nếu thoả mãn điều kiện k < n-1 thì tăng k lên 1 và thực hiện tiếp bƣớc 3. Nếu điều kiện k = n-1thì thực hiện tiếp bƣớc 7.

- Bước 7: Kiểm tra lại danh sách đƣờng đi và kết quả nhận đƣợc là danh sách các đƣờng đi có thể có từ đỉnh đầu đến đỉnh cuối.

d. Ví dụ mô tả:

Xét ví dụ sau: cho đồ thị có hƣớng và đồ thị vô hƣớng

Đồ thị nhƣ hình 1.10a và 1.10b đƣợc chuyển thành dạng ma trận liên kết tƣơng ứng là A1 và A2 trong đó các phần tử là 0 hoặc (i,j):

𝐴1 = 0 (2,1) (3,1) (4,1) (1,2) 0 (3,2) (4,2) (1,3) (2,3) 0 (4,3) (1,4) (2,4) (3,4) 0 𝐴2 = 0 0 0 0 (1,2) 0 0 0 (1,3) (2,3) 0 0 (1,4) (2,4) (3,4) 0

Để thuận tiện và đơn giản hóa cách viết các phần tử trong ma trận thì ta bỏ dấu ngoặc đơn và dấu phẩy giữa hai đỉnh kết nối. Ví dụ: (1,2) = 12,…

Áp dụng thuật toán vừa trình bày ở trên mục 1.4.1.4 để áp dụng với ma trận A1 để tìm tất các các đƣờng đi trong ma trận từ đỉnh nguồn là đỉnh 1 và đỉnh đích là đỉnh 4: 𝐴1 = 0 21 31 41 12 0 32 42 13 23 0 43 14 24 34 0 ; 𝐵1 = 14 24 34 0 ; 𝐵1∗ = 0 24 34 0

Các bƣớc tiếp theo của thuật toán đƣợc thực hiện nhƣ sau: 𝐵2 = 12 ∗ 24 v 13 ∗ 34 23 ∗ 34 32 ∗ 24 0 ; 𝐵2∗ = 0 23 ∗ 34 32 ∗ 24 0 ; 𝐵3 = 12 ∗ 23 ∗ 34 v 13 ∗ 32 ∗ 24 23 ∗ 32 ∗ 24 32 ∗ 23 ∗ 34 0 ;𝐵3∗ = 0 Theo thuật toán thì ở bƣớc 6 khi gặp điều kiện k = n -1 thì dừng lại và chuyển sang bƣớc 7 tức là liệt kê tất các đƣờng đi đã tìm đƣợc. Với bài toán này ta đã tính đƣợc các ma trận B1, B2, B3 và danh sách tất cả các đƣờng đi từ đỉnh 1

(đỉnh nguồn) đến đỉnh 4 (đỉnh đích)là: 14, 12*24, 13*34, 12*23*34, 13*32*24. Hệ thống có cấu trúc phức tạp đƣợc mô tả thông qua đồ thị có tất cả các đƣờng đi thành công f(1,4): 14 v 124 v 134 v1234 v 1324

1.4.2.4Thuật toán tìm tất cả đường đi của ma trận liên kết theo lý thuyết đồ thị

Thuật toán tìm tất cả các đƣờng đi trong ma trận kề chỉ thích hợpvới những đồ thị có kích thƣớc nhỏ. Đối với các đồ thị có kích thƣớc lớn thì việc thực hiện bƣớc 4 và 5 là rất khó khăn, việc tính toán dài và dễ nhầm lẫn vì các phần tử của ma trận lúc này là các chuỗi dài. Chính vì sự khó khăn đó nên ta sẽ xây dựng thuật toán tự động tìm kiếm tất cả các đƣờng đi giữa 2 đỉnh đồ thị.

Trong bài toán lý thuyết đồ thị [1] thì chúng ta biết đến bài toán tìm đƣờng đi ngắn nhất,bài toán đƣờng đi tối thiểu giữa hai đỉnh của đồ thị, bài toán tìm đƣờng đi qua tất cả các đỉnh của đồ thị nhƣng bài toán ở đây là tìm tất cả danh sách các đƣờng đi từ đỉnh đầu đến đỉnh cuối của đồ thị.

a. Ý tưởng thuật toán:Thuật toán sử dụng phƣơng pháp tìm kiếm theo chiều sâu. Tƣ tƣởng của tìm kiếm theo chiều sâu là: Từ đỉnh nguồn (đỉnh đầu) của đồ thị ta di chuyển đến một đỉnh khác (một đỉnh bất kỳ mà có thể đi từ đỉnh đầu). Từ đỉnh này ta tiếp tục đi đến khác đỉnh khác. Nếu không thể đi tiếp đƣợc nữa thì quay lại đỉnh trƣớc đó và đi đến đỉnh khác. Cứ nhƣ vậy cho đến khi đến đỉnh cuối của đồ thị.

b. Ví dụ mô tả:

Xét lại ví dụ trên, cho đồ thị vô hƣớng:

Áp dụng thuật toán tìm kiếm theo chiều sâu, ma trận A1 sẽ đƣợc viết lại nhƣ sau:

𝐴1 = 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0

Để tìm tất cả các đƣờng dẫn từ đỉnh 1 (nguồn) đến đỉnh 4 (đích) theo thuật toán 1.4.1.5, chúng ta có đƣờng đi đầu tiên từ đỉnh 1 2, đỉnh 2 không phải là đỉnh đích nên chuyển tiếp sang đỉnh 3, theo đƣờng: 123; đỉnh 3 không phải là đỉnh đích nên đi tiếp sang đỉnh 4, đỉnh 4 là đỉnh đích nên ta có đƣờng đi:

1234. Ghi nhớ lại đƣờng đi này và quay trở lại đỉnh 3, nhƣng không có đƣờng đi nào từ đỉnh 3 đến đỉnh 4 ngoài con đƣờng đã tìm đƣợc nên từ đỉnh 3 quay lại đỉnh 2 hoặc đỉnh 1.

- Nếu quay lại đỉnh 2 thì từ đỉnh 2 ta có thể đi tiếp đến đỉnh 4, vậy ta có đƣờng đi:124.

- Nếu quay lại đỉnh 1 thì ta có thể đi tiếp đến đỉnh 4, vậy ta có đƣờng đi:134.

Tƣơng tự nhƣ vậy ta cũng tìm đƣợc các đƣờng đi: 1 3 2  4 1 4. Hệ thống phức tạp đƣợc mô tả bằng phƣơng pháp đồ thị, áp dụng thuật toán ở mục 1.4.1.5 ta tìm đƣợc tất cả các đƣờng đi thành công f(1,4): 14 v 124 v 134 v 1234 v 1324.

c. Kết luận: (adsbygoogle = window.adsbygoogle || []).push({});

- Thông qua phƣơng pháp chuyển đổi sơ đồ cấu trúc logic sang đồ thị liên kết, từ đó khi áp dụng hai thuật toán tìm tất cả các đƣờng đi trong ma trận liền kềvà tìm tất cả đƣờng đi của ma trận liên kết theo lý thuyết đồ thị đều cho kết quả nhƣ nhau.

- Thuật toán tìm tất cả các đƣờng đi trong ma trận kề chỉ thích hợp với những đồ thị có kích thƣớc nhỏ, đối với các đồ thị có kích thƣớc lớn thì việc thực hiện các là khó khăn hơn so với thuật toán tìm tất cả đƣờng đi của ma trận liên kết theo lý thuyết đồ thị.

1.4.3 Bài toán tối thiểu phần tử logic

Các phương pháp cơbản để tối thiểu hoá các toán tử logic:

Việc tối thiểu hoá các toán tử logic thƣờng dựa trên các hằng đẳng thức Boole hay còn đƣợc gọi là các luật trong đại số Boole. Một đại số Boole [1] là một cấu trúc đại số gồm một tập hợp S chứa ít nhất là 2 phần tử, đƣợc ký hiệu là 0 và 1, cùng với hai phép toán 2 ngôi “+” (tuyển - ˅) và “.” (hội - ˄) và một phép toán 1 ngôi “¯” (phủ định) thỏa mãn các tính chất: kết hợp, giao hoán, lũy đẳng, luật phân phối, luật đồng nhất, luật bù kép, luật De Morgan,…

việctốithiểu hóa hàm Boole tức là tìm dạng biểu thức Boole đơn giản nhất của hàm Boole đó. Giới thiệu 3 phƣơng pháp để tối thiểu hoá hàm Boole:

- Phƣơng pháp biến đổi đại số; - Phƣơng pháp bảng Karnaugh; - Phƣơng pháp Quine – Mc.Cluskey.

Phƣơng pháp biến đổi đại số [1] này dựa trên các luật, các hằng đẳng thức của đại số boole để tối thiểu hoá các các biến và các phép toán trên biểu thức Boole.

Ví dụ: Tối ƣu hoá hàm Boole: f(x,y) = 𝑥 ˄𝑦˅𝑥˄𝑦˅𝑥˄𝑦

f(x,y) = 𝑥 ˄𝑦˅𝑥˄𝑦˄𝑥˄𝑦 = 𝑥 ˅𝑥 ˄𝑦˅𝑥˄(𝑦˄𝑦 ) = 1˄𝑦˅𝑥˄1 = 𝑦˅𝑥 Ở đây ta đã sử dụng luật tồn tại của phần tử bù để tối thiểu hàm f(x,y).

b. Phương pháp bảng Karnaugh

Phƣơng pháp bảng Karnaugh [1] dựa trên việc tổ hợp các hội sơ cấp có thể tổ hợp đƣợc để loại bỏ các hội sơ cấp của hàm Boole không cần thiết. Phƣơng pháp này dựa trên một công trình trƣớc đó của E.W. Veitch và cho ta một phƣơng pháp trực quan để rút gọn các khai triển tổng và tích. Tuy nhiên, phƣơng pháp dùng bảng Karnaugh cũng cần lƣu ý:

- Phƣơng pháp tối thiểu hoá hàm boole sử dụng bảng Karnaugh chỉ tổ hợp đƣợc khi số các hội sơ cấp sẽ tổ hợp là 2k và đối xứng với nhau qua các trục của bảng. Mục tiêu là cần nhận dạng các khối 2k ô biểu diễn các hội sơ cấp có thể tổ hợp lại đƣợc mà trƣớc hết là nhận dạng khối lớn nhất.

- Nếu hàm cần tối thiểu hoá có n bit và số các hội sơ cấp có thể tổ hợp lại đƣợc là 2k thì sau khi tổ hợp sẽ có n-k biến thuộc tổ hợp.

c. Phương pháp Quine – Mc.Cluskey

Phƣơng pháp dùng bảng Karnaugh sẽ gặp khó khăn khi gặp số biến lớn và việc dùng bảng Karnaugh dựa trên việc rà soát trực quan để nhận dạng các số hạng cần nhóm lại nên sẽ khó khăn khi triển khai một thủ tục rút gọn những khai triển tổng các tích một cách có thể cơ khí hóa đƣợc.

Phƣơng pháp Quine-McCluskey[1] có thể khai triển một thủ tục nhƣ vậy, nó có thể đƣợc dùng cho các hàm Boole có số biến bất kỳ. Về cơ bản, phƣơng pháp Quine-McCluskey có hai phần:

- Phần đầu là tìm các số hạng là ứng viên để đƣa vào khai triển cực tiểu nhƣ một tổng các tích Boole mà ta gọi là các nguyên nhân nguyên tố.

- Phần thứ hai là xác định xem trong số các ứng viên đó, các số hạng nào là thực sự dùng đƣợc.

Một phần của tài liệu Nghiên cứu các phương pháp nâng cao độ tin cậy cho hệ thống tính toán qua cấu trúc hệ thống (Trang 27)