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;i
for(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;j
printf("%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;i
for(j=0;j
if((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;i
for(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;i
for(j=0;j
if(a[i][j]==1)
for(k=0;k
if((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