Phương pháp Heuristicy Trong nhiều bài toán dùng phương pháp thử - sai sẽ dẫn đến số lượng thử quá lớn không chấp nhận được.. y Heuristic chính là ước lượng về khả năng dẫn đến lời giải
Trang 1Phương pháp Heuristic
y Trong nhiều bài toán dùng phương pháp thử - sai sẽ dẫn
đến số lượng thử quá lớn không chấp nhận được.
y Heuristic chính là ước lượng về khả năng dẫn đến lời giải
của một trạng thái: phương pháp vét cạn nhưng có thêm tri
thức đi kèm, tối ưu cục bộ, nguyên lý hướng đích, nguyên
lý sắp thứ tự,
í d
y ví dụ:
Một em bé bị lạc đường về nhà, em nhớ nhà mình cao nhất trong khu vực em sẽ tìm đến tòa nhà cao nhất trong vùng em thấy, rồi lại tiếp tục , Giải phương trình bậc 2, đoán nghiệm theo Vi-ét
Trang 2kiế h hiề hiề
Tìm kiếm theo chiều sâu và chiều rộng
y Là thử sai theo nguyên lý mê cung hay chính là thử
y Là thử sai theo nguyên lý mê cung hay chính là thử
-sai kết hợp lần ngược.
y Ngược với tìm kiếm theo chiều sâu tìm kiếm theo chiều
y Ngược với tìm kiếm theo chiều sâu, tìm kiếm theo chiều
rộng mang hình ảnh của vết dầu loang.
Giải thuật A ậ *
Trang 3Phương pháp trí tuệ nhân tạo g p p ệ ạ
y "Dạy" máy tính để có "trí thông minh" như con người
y Dạy máy tính để có trí thông minh như con người
bắt chước khả năng "suy luận" của con người.
ví dụ: bài toán đong nước có 3 bình A B và C có dung tích 5, 8, và 13 lít Làm sao đong được 11 lít nước trong bình C? Bình C ban đầu đầy nước
bình C? Bình C ban đầu đầy nước.
Trang 4Một số phương pháp chuyển giao tri thức
1 Biểu diễn tri thức
2 Hệ chuyên gia
3 Máy học
Trang 5M Mảảng ng Array Array M
Mảảng ng Array Array
Phạm Thế Bảo Trường Đại học Khoa học Tự nhiên Tp HCM
Trang 6Mả A Mảng
Mảng –– Array Array
MộtMột sốsố tínhtính chấtchất
Kh i
Kh i bábá ảả tt C
KhaiKhai báobáo mảngmảng trongtrong CC
TruyTruy xuấtxuất cáccác thànhthành phầnphần
TruyềnTruyền thamtham sốsố kiểukiểu mảngmảng chocho hàmhàm
MộtMột ốố thth tá ởở
MộtMột sốsố thaothao táctác cơcơ sởsở
MảngMảng nhiềunhiều chiềuchiều
Trang 7Mả Mộ ố í h hấ
Mảng
Mảng –– Một số tính chất
MảngMảng làlà mộtmột kiểukiểu dữdữ liệuliệu cócó cấucấu trúctrúc dodo ngườingười lậplập trình
trình địnhđịnh nghĩanghĩa
Dù biểbiể diễdiễ áá đốiđối tt dữdữ liệliệ ởở dd ột
DùngDùng biểubiểu diễndiễn cáccác đốiđối tượngtượng dữdữ liệuliệu ởở dạngdạng mộtmột dãy
dãy cáccác thànhthành phầnphần cócó cùngcùng kiểukiểu vớivới nhaunhau –– kiểukiểu cơcơ sở
NNLTNNLT CC luônluôn chỉchỉ địnhđịnh mộtmột khốikhối nhớnhớ liênliên tụctục chocho một
một biếnộộ biến kiểukiểu mảngmảnggg
KíchKích thướcthước củacủa mảngmảng đượcđược xácxác địnhđịnh ngayngay khikhi khaikhai báo
báo vàvà khôngkhông baogg bao giờgiờ thaygg thay đổiyy đổi
Trang 8Mả Kh i bá Kh i bá C C
Mảng
Mảng –– Khai báo trong C
t d f
t d f kiể kiể ơ ở ơ ở Tê kiể [Sốthà h hầ ] typedef kiểucơsở Tênkiểu [Sốthànhphần] ;
kiểu của mỗi thành phần hằhằ ố ố thà h hầố ố thà h hầ
kiểu của mỗi thành phần hằng số, số thành phần
tối đa của mảng
do lập trình viên đặt tên
typedef int AINT[ 100 ];
//
//AINT AINT là kiểu mảng biểu diễn dãy gồm 100 thành phần int là kiểu mảng biểu diễn dãy gồm 100 thành phần int
AINT a; //a: //a: biến biến kiểu kiểu AINT AINT
Trang 9Mảng Ví d
Mảng
Mảng –– Ví dụ
#define SIZE 10
#define SIZE 10
int a[5]; // a dãy gồm 5 số nguyên long int big[100]; // big: chiếm 400 bytes! double d[100]; [ ] // d: chiếm 800 bytes! // y
long double v[SIZE];// v:10 long doubles
long double d[2.5];
long double d[0];
long double d[-4];
long do ble d[n]
long double d[n];
Trang 10Mảng Ví d khởi trị cho 5
Mảng
Mảng –– Ví dụ
khởi trị cho 5 thành phần
2 thành phần đầu tiên được
đầu tiên được khởi trị, phần còn lại: 0
compiler xác định kích thước gồm 7
khởi trị tất cả các thành phần bằng 0
Trang 11Mảng –– Truy Truy xuất xuất các các phần phần tử tử
CácCác thànhthành phầnphần củacủa mảngmảng đượcđược truytruy xuấtxuất thôngthông quaqua chỉchỉ sốsố
ủủ hú 00 ii 11
Mảng Truy Truy xuất xuất các các phần phần tử tử
của
của chúngchúng 00 sizesize 11
ThaoThao táctác truytruy xuấtxuất khôngkhông kiểmkiểm tratra giớigiới hạnhạn củacủa chỉchỉ sốsố nhưng
nhưng giágiá trịtrị khôngkhông kiểmkiểm soátsoát đượcđược
nhưng
nhưng giágiá trịtrị khôngkhông kiểmkiểm soátsoát đượcđược
int main()
{
a[0] = 59;
0 1 2
a[0] = 59;
a[5] = -10;
a[i/2] = 2;
a[6] = 0;
2 3 4 a[6] = 0;
a[-1] = 5;
return 0;
5 }
Trang 12T ề th ố Mả h hà
T ề th ố Mả h hà
Truyền tham số Mảng cho hàm
Th ốố kiểkiể ảả đđ tt ềề hh hàhà hí hhí h làlà địđị hỉ
ThamTham sốsố kiểukiểu mảngmảng đượcđược truyềntruyền chocho hàmhàm chínhchính làlà địađịa chỉchỉ của
của phầnphần tửtử đầuđầu tiêntiên trêntrên mảngmảng
SốSố thànhthành phầnphần trongtrong thamtham sốsố mảngmảng cócó thểthể đểđể trốngtrống
SốSố thànhthành phầnphần trongtrong thamtham sốsố mảngmảng cócó thểthể đểđể trốngtrống
SốSố thànhthành phầnphần thựcthực sựsự đượcđược sửsử dụngdụng phảiphải truyềntruyền quaqua mộtmột tham
tham sốsố kháckhác (vd(vd:: size)size)
tham
tham sốsố kháckhác (vd(vd:: size)size)
int add elements(int a[], int size) t add_e e e ts( t a[], t s e)
{
int add_elements(int *p, int size) {
Trang 13Ví dụ
#include <stdio.h>
primes
void sum(long [], int);
int main(void) {
long primes[6] = { 1, 2,
2 3
3, 5, 7, 11 };
sum(primes, 6);
printf("%li\n", primes[0]);
5 7 11 return 0;
}
11 a
void sum(long a[], int sz) {
long total = 0;
dùng để kiểm tra
long total = 0;
for(i = 0; i < sz; i++)
total += a[i];
dùng để kiểm tra giới hạn chỉ số
a[0] = total;
}
tổng được lưu vào phần tử đầu tiên
Trang 14Chú ý
Chú ý
Khô thểthể thth hiệ áá thth tá hé ộiội dd ộtột ảả
KhôngKhông thểthể thựcthực hiệnhiện cáccác thaothao táctác chépchép nộinội dung dung mộtmột mảngmảng
sang
sang mảngmảng kháckhác
Chép
Chép từngtừng phầnphần tửtử mảngmảng
Chép
Chép từngtừng phầnphần tửtử mảngmảng
char A[3]={‘
char A[3]={‘a’,’b’,’ca’,’b’,’c’};’};
char B[3];
B = A; // ???
for(
for(intint ii=0; =0; ii<3; <3; ii++)++)
B[
B[ii] A[] A[ii];];
B[
B[ii] = A[] = A[ii];];
hoặc
hoặc chépchép khốikhối bộbộ nhớnhớ ((sẽsẽ đượcđược đềđề cậpcập sausau))
KhôngKhông dùngdùng phépphép soso sánhsánh trựctrực tiếptiếp (==)(==) nộinội dungdung trongtrong haihai
KhôngKhông dùngdùng phépphép so so sánhsánh trựctrực tiếptiếp (==) (==) nộinội dung dung trongtrong haihai
mảng
mảng
Phép
Phép so pp so sánhsánh (A==B) so (A==B) so sánh(( )) sánh địađịa chỉịị chỉ haihai vùngvùng nhớgg nhớ màmà A A vàvà B B chỉ
chỉ đếnđến
Trang 15Một ố th tá ở Một ố th tá ở Một số thao tác cơ sở
Nhập
ấấ
Xuất
ThêmThêm mộtmột thànhthành phầnphần dữdữ liệuliệu
LoạiLoại bỏbỏ mộtmột thànhthành phầnphần dữdữ liệuliệu
TìmTìm kiếmkiếm
TìmTìm kiếmkiếm
SắpSắp xếpxếp
Trang 16Mảng Nhậ dữ liệ
Mảng
Mảng –– Nhập dữ liệu
void ReadData(int a[], int size)
{
int i; duyệt qua tất cả các int i;
for(i = 0; i < size; i++)
phần tử
o ( 0; s e; ) {
printf(“Nhap thanh phan %d: ”, i); scanf(“%d”, &a[i]);
} }
nhập dữ liệu cho a[i] ập ệ [ ]
Trang 17Mảng X ất dữ liệ X ất dữ liệ à hì h à hì h
Mảng
Mảng –– Xuất dữ liệu ra màn hình
void WriteData(int a[], int size) {
i i int i;
for(i = 0; i < size; i++)
printf(“%d ”, a[i]);
printf(“\n”);
}
Trang 18Mảng Nhậ Nhậ ất dữ liệ ất dữ liệ
Mảng
Mảng –– Nhập xuất dữ liệu
#include <stdio h>
void ReadData(int [], int );
void WriteData(int [], int );
void main()
{
int a[100], n;
clrscr();
printf(“Nhap so thanh phan cua day: “); scanf(“%d”, &n);
printf(“Nhap cac thanh phan cua day: “);
ReadData(a, n);
printf(“Day vua nhap: \n“);
WriteData(a, n);
}