Tải bản đầy đủ (.docx) (13 trang)

Thuật toán kiểm tra các tính chất của quan hệ

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (175.25 KB, 13 trang )

BÁO CÁO THỰC TẬP CƠ SỞ

MÃ ĐỀ 033

Phần II. Thuật Tốn Kiểm Tra Các Tính Chất Của Quan Hệ
2.1. Bài toán
1. Nêu cách dùng ma trận logic để biễu diễn quan hệ 2 ngơi trên một tập hợp.
2. Nêu ví dụ minh họa.
3. Cài đặt thuật toán kiểm tra các tính chất của quan hệ(phản xạ, đối xứng, bắc
cầu).
2.2 . Cách xây dựng
2.2.1. Dùng ma trận lô-gic để biểu diễn quan hệ hai ngôi trên một tập hợp
2.2.1.1. Các khái niệm
- Quan hệ hai ngôi R trên tập A là một quan hệ từ A đến A, nghĩa là R là tập con
của tích đề các A x A.
- Ma trận logic cỡ m x n là một ma trận có m dịng và n cột, trong đó các phần
tử của nó chỉ nhận một trong hai giá trị 0 hoặc 1.
2.2.1.2. Cách biễu diễn
Ta chọn tập A gồm n phần tử được đánh số thứ tự A={}. Khi đó quan hệ R
trên A được xác định bằng ma trận vuông cấp n, ký hiệu với mọi A thỏa mãn:
Theo cách biểu diễn này, rõ ràng với mỗi quan hệ R trên A sẽ xác định duy nhất
một ma trận logic , và ngược lại, khi biết ma trận logic của một quan hệ R, sẽ xác định
được chính xác quan hệ R.
2.2.1.3. Các tính chất của quan hệ
- Một quan hệ có tính chất phản xạ khi và chỉ khi ∀a A thì aRa.
- Một quan hệ có tính chất đối xứng khi và chỉ khi ∀a, b A thì aRb và bRa.
- Một quan hệ có tính chất bắc cầu khi và chỉ khi ∀a,b,c A thì aRb và bRc thì
aRc.
* Nếu sử dụng ma trận logic để biểu diễn qua hệ 2 ngôi trên một tập hợp thì ta
có các nhận xét sau đây:


Nguyễn Đức Phương – Lớp 53K1- Khoa CNTT

Page 11


BÁO CÁO THỰC TẬP CƠ SỞ

MÃ ĐỀ 033

- Một quan hệ có tính phản xạ khi và chỉ khi ma trận biểu diễn nó có tất cả phần
tử trên đường chéo chính đều bằng 1.
- Một quan hệ có tính chất đối xứng khi và chỉ khi ma trận biểu diễn nó là một
ma trận đối xứng qua đường chéo chính.
- Một quan hệ có tính chất bắc cầu khi và chỉ khi ma trận biễu diễn nó có =1 và
=1 thì =1.
2.2.2. Ví dụ minh họa
Cho tập hợp A = {1, 2, 3, 4, 5}, ta định nghĩa quan hệ R trên A như sau: ∀a,
b∈ A ta nói aRb khi và chỉ khi a + b là một số lẻ, khi đó quan hệ R có thể được biểu
begin
diễn bằng các phương pháp sau:

- Quan hệ R được xác định bởi tập hợp sau:
n và
a (4, 1), (2, 3), (3, 2), (3, 4), (4, 3), (2, 5), (5, 2), (4,
R(A) = {(1,Nhập
2), (2,
1),mảng
(1, 4),

5), (5, 4)}.

- Ma trận logic của quan hệkqR= được
xác định như sau:
1
i = 0 tra các tính chất của quan hệ (phản xạ, đối xứng,
2.2.3. Cài đặt thuật toán kiểm

bắc cầu)

i < m?

2.2.3.1. Thuật tốn kiểm tra tính phản xạ
- Input: Ma trận logic n x n thể hiện quan hệ R.
j =0

- Output: Cho kết quả là 1 nếu quan hệ có tính phản xạ, ngược lại trả về 0.

Nguyễn Đức Phương – Lớp 53K1- Khoa CNTT

Page 12


BÁO CÁO THỰC TẬP CƠ SỞ

MÃ ĐỀ 033

S
Đ

S


j < n?
j ++

i ++
Đ

S

i = j?
Đ
a[i][j]=1?

S

return 0

Đ

return kq

end

Nguyễn Đức Phương – Lớp 53K1- Khoa CNTT

Page 13


BÁO CÁO THỰC TẬP CƠ SỞ

MÃ ĐỀ 033


2.2.3.2. Thuật toán kiểm tra tính đối xứng
- Input: Ma trận logic n x n thể hiện quan hệ R.
- Output: Cho kết quả là 1 nếu quan hệ có tính đối xứng, ngược lại trả về 0

begin

Nhập n và mảng a

kq=1

i=0
S
i < m?
Đ

j=0
S
i ++

j < n?
return kq

Đ
Đ
[i][j]=a[j][i]?

j ++
S


return 0

Nguyễn Đức Phương – Lớp 53K1- Khoa CNTT

end

Page 14


BÁO CÁO THỰC TẬP CƠ SỞ

MÃ ĐỀ 033

2.2.3.3. Thuật toán kiểm tra tính bắc cầu
- Input: Nhập vào ma trận logic n x n
- Output: Cho kết quả là 1 nếu quan hệ có tính bắc cầu, ngược lại trả về 0.
begin
Nhập n và mảng a

kq=1

i=0
S

i < m?
Đ
i ++

j=0
S


j < n?
Đ
S

a[i][j]=1?

j ++

Đ
k=0
S

k < n?
Đ

S

a[j][i]=1?
Đ
a[i][k]=1?

return 0

return kq

S
return 0

end


Đ
k ++

Nguyễn Đức Phương – Lớp 53K1- Khoa CNTT

Page 15


BÁO CÁO THỰC TẬP CƠ SỞ

MÃ ĐỀ 033

2.2.3.4. Chương trình
#include "conio.h"
#include <stdio.h>
void nhapmang(int a[50][50], int n)
{
int i,j,tg;
printf("\n moi nhap cac phan tu mang\n");
for(i=0;ifor(j=0;j{
printf("a[%d][%d]=",i,j);
scanf("%d",&tg);
a[i][j]=tg;
}
}
void hienmang(int a[50][50], int n)
{

int i,j;
for(i=0;i{
for(j=0;jprintf("%3d",a[i][j]);
printf("\n");
}
}
int phanxa(int a[50][50], int n)
Nguyễn Đức Phương – Lớp 53K1- Khoa CNTT

Page 16


BÁO CÁO THỰC TẬP CƠ SỞ

MÃ ĐỀ 033

{
int i,j,kq=1;
for(i=0;ifor(j=0;jif((i==j)&&( a[i][j]!=1))return 0;
return kq;
}
int doixung(int a[50][50], int n)
{
int i,j,kq=1;
for(i=0;ifor(j=0;j

if (a[i][j]!=a[j][i]) return 0;
return kq;
}
int baccau(int a[50][50], int n)
{
int i,j,k,kq=1;
for(i=0;ifor(j=0;jif(a[i][j]==1)
for(k=0;kif((a[j][k]==1)&&(a[i][k]!=1))return 0;
return kq;
}
void main()
Nguyễn Đức Phương – Lớp 53K1- Khoa CNTT

Page 17


BÁO CÁO THỰC TẬP CƠ SỞ

MÃ ĐỀ 033

{
int n, a[50][50];
clrscr();
printf("moi nhap kich thuoc cho mang:");
scanf("%d”,&n);
nhapmang(a,n);
hienmang(a,n);

if(phanxa(a,n)==1) printf("\nquan he co tinh phan xa");
else
printf("\nquan he khong co tinh phan xa");
if(doixung(a,n)==1) printf("\nquan he co tinh doi xung");
else
printf("\nquan he khong co tinh doi xung");
if(baccau(a,n)==1) printf("\nquan he co tinh bac cau");
else
printf("\nquan he khong co tinh bac cau");
getch();
}
2.2.3.5. Dữ liệu và kết quả test:
Nhập các ma trận:
- Ma trận a[5][5]

Kết quả:

Nguyễn Đức Phương – Lớp 53K1- Khoa CNTT

Page 18


BÁO CÁO THỰC TẬP CƠ SỞ

-

MÃ ĐỀ 033

Ma trận a[4][4]


Nguyễn Đức Phương – Lớp 53K1- Khoa CNTT

Page 19


BÁO CÁO THỰC TẬP CƠ SỞ

MÃ ĐỀ 033

Kết quả:

-

Ma trận a[3][3]

Nguyễn Đức Phương – Lớp 53K1- Khoa CNTT

Page 20


BÁO CÁO THỰC TẬP CƠ SỞ

MÃ ĐỀ 033

Kết quả:

Nguyễn Đức Phương – Lớp 53K1- Khoa CNTT

Page 21



BÁO CÁO THỰC TẬP CƠ SỞ

MÃ ĐỀ 033

KẾT LUẬN

Công nghệ thông tin là công cụ đắc lực, là lĩnh vực có nhiều ứng dụng phục vụ
cho nhiều ngành khác nhau trong đời sống xã hội. Qua quá trình làm đề tài em đã có
dịp củng cố, bổ sung kiến thức và thu được những kinh nghiệm quý báu, phục vụ cho
việc học tập và làm việc sau này như là các kiến thức về tìm kiếm thơng tin thơng
dụng hiện nay, nâng cao khả năng làm việc theo nhóm, nâng cao kiến thức về ngơn
ngữ lập trình C, cấu trúc dữ liệu và giải thuật và cách tổ chức giải quyết yêu cầu của
một bài toán cụ thể…
Tuy nhiên do hạn chế về trình độ, thời gian khơng nhiều nên những kết quả đạt
được vẫn chưa đầy đủ và có thể có nhiều sai sót. Rất mong được sự đóng góp ý kiến
của các thầy cơ giáo và các bạn để đề tài của em được hoàn thiện hơn.
Cuối cùng chúng em xin chân thành cảm ơn ThS. Nguyễn Thị Hồng Anh đã
giúp đỡ nhiệt tình cho em hồn thiện đề tài này.

Nguyễn Đức Phương – Lớp 53K1- Khoa CNTT

Page 22


BÁO CÁO THỰC TẬP CƠ SỞ

MÃ ĐỀ 033

TÀI LIỆU THAM KHẢO

[1] Đỗ Đức Giáo, “Toán rời rạc”. NXB Đại học quốc gia Hà Nội.
[2] Gs.Phạm Văn Ất, “Kỹ Thuật Lập trình C Cơ sở và Nâng cao”. NXB Thời Đại.

Nguyễn Đức Phương – Lớp 53K1- Khoa CNTT

Page 23



×