1. Trang chủ
  2. » Giáo án - Bài giảng

lý thuyết pascal phần ole

25 203 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 25
Dung lượng 136,5 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Chu trình đi qua tất cả các cạnh, mỗi cạnh qua đúng 1 lần , gọi là chutrình Euler.. 2 - Đồ thị vô hớng có đờng đi Euler gọi là đồ thị nửa Euler Đồ thị vô hớng có chu trình Euler gọi là

Trang 1

Phần 2 : Đồ thị Ơle, nửa ƠleChu trình Ơle - Chu trình Hamintơn

I / Định nghĩa :

1 - Trong đồ thị vô hớng : Đờng đi qua tất cả các cạnh, mỗi cạnh qua đúng 1 lần , gọi là

đờng đi Euler Chu trình đi qua tất cả các cạnh, mỗi cạnh qua đúng 1 lần , gọi là chutrình Euler

2 - Đồ thị vô hớng có đờng đi Euler gọi là đồ thị nửa Euler

Đồ thị vô hớng có chu trình Euler gọi là đồ thị Euler

3 - Định lý Euler : Đồ thị vô hớng,liên thông G là đồ thị Euler khi và chỉ khi mọi đỉnh

đều có bậc chẵn

Đồ thị vô hớng , liên thông là đồ thị nửa Ơle khi và chỉ khi nó có không quá 2

đỉnh bậc lẻ

4 - Trong đồ thị có hớng : Mạch đi qua mọi cung, mỗi cung chỉ 1 lần gọi là mạch Euler

Đồ thị có hớng , nếu tại mỗi đỉnh số cung đi vào bằng số cung đi ra thì ta gọi đồ thị này

là tựa đối xứng

Định lý : Đồ thị có hớng,liên thông và tựa đối xứng thì có mạch Euler

5 - Trong đồ thị có hớng : Mạch đi qua tất cả các đỉnh , mỗi đỉnh chỉ 1 lần , gọi là mạchHamintơn ; nếu mạch này đóng thì gọi là mạch đóng Hamintơn Dây chuyền đơn đi quatất cả các đỉnh , mỗi đỉnh chỉ 1 lần , gọi là dây chuyền đơn Haminton đồ thị gọi là nửaHaminton

6 - Trong đồ thị vô hớng : Đờng đi qua tất cả các đỉnh , mỗi đỉnh chỉ 1 lần , gọi là đờng

đi Hamintơn ; chu trình đi qua tất cả các đỉnh , mỗi đỉnh chỉ 1 lần ( trừ đỉnh đầu trùng

đỉnh cuối ) gọi là chu trình Hamintơn ; đồ thị tơng ứng cũng gọi là đồ thị nửa Haminton(vô hớng ) hoặc Haminton (vô hớng )

7 - Định lý : (Kơric) Nếu đồ thị đầy đủ ( giữa 2 đỉnh bất kỳ đều có ít nhất 1 cung ) thì

Nếu đỉnh x chỉ có cung đi ra thì mọi mạch Hamintơn có đỉnh x là mút đầu tiên

Nếu đỉnh y chỉ có cung đi vào thì mọi mạch Hamintơn có đỉnh y là mút cuối cùng

10 - Định lý : Nếu x là đỉnh treo ( chỉ có 1 cung duy nhất dính với nó - đi tới nó hoặc từ

nó đi ra - ) thì mọi đờng đi Hamintơn M đều có mút đầu tiên hoặc cuối cùng là x Đỉnh

kề với x trong đồ thị G cũng là đỉnh kề với x trong mạch Hamintơn M

II / Thuật toán Fleury tìm chu trình Euler ( trong đồ thị vô h ớng ):

Trang 2

Bớc 3 : Qua cầu , xoá điểm cô lập ( hoặc xử lý gián tiếp : tăng số vùng liên thông ) ,về

b-ớc 2

III / Tìm đ ờng đi Hamintơn bằng đệ quy:

Giả sử đã tìm đợc mạch k đỉnh , cần bổ xung đỉnh thứ k+1 vào chỗ thích hợp của mạch này , ta chọn 1 trong 3 trờng hợp sau :

+ Trờng hợp 1 : có cung nối xk với xk+1 thì cho mạch đi tiếp tới xk+1

+ Trờng hợp 2 : có cung nối x k+1 tới x1 thì thêm cung (x k+1,x 1) vào đầu mạch+ Trờng hợp 3 : soát từ x k về đầu mạch cho đến khi gặp x m mà có cung nối xm

với xk+1 thì chèn vào giữa mạch : cung (xm , xk+1) và cung (xk+1,x m+1) , bỏ cung (xm ,x m+1)

IV / Bài tập cơ bản :

1 ) Cho đồ thị vô hớng

Câu a ) Tìm các cầu của đồ thị

Câu b ) Hãy kiểm tra xem :

b1 - Có phải là đồ thị nửa Euler không ? Nếu là đồ thị nửa Euler thì hiện đờng đi Eulerb2 - Có phải là đồ thị Euler không ? Nếu là đồ thị Euler thì hiện chu trình Euler

2 ) Cho đồ thị có hớng Tìm mạch Hamintơn nếu có

Trang 3

Procedure Loang(i : Byte);

Var dau,cuoi,j,k : Byte;

Trang 4

Var i,j : Byte;

Trang 5

Function Ketthuc : Boolean;

Var i,j : Byte;

Trang 6

Inc(Lt); { Gian tiep xoa diem co lap moi}

Break; { Thoat sang vung moi thi quay ve B2 } End;

End;

Until Ketthuc;

Writeln(F,'Chu trinh Euler : ');

For i:=1 to dem-1 do Write(F,chtr[i]:2,' ->');

Trang 8

For i:=1 to N do {Tim dau mach }

If KT[i] and (Not Vao(i)) and (Ra(i)) then Begin

Else {Tim cuoi mach }

If KT[i] and (Vao(i)) and (Not Ra(i)) then Begin

Ok := True;

KT[i] := False;

Trang 9

2 ) Trong một nhà máy hoá chất , chỉ dùng 1 thiết bị sản xuất ( thí dụ nh : lò phản ứnghoá chất ) để lần lợt điều chế N hoá chất , mỗi lần chuyển từ công việc điều chế hoá chất

Hi sang điều chế hoá chất mới là Hk ,phải điều chỉnh lại thiết bị sản xuất cho phù hợp

điều chế hoá chất mới Gọi chi phí điều chỉnh từ Hi sang Hk là P ik Giả sử chi phí điềuchỉnh Pik chỉ nhận giá trị 0 ,1 với ý nghĩa : Pik=0 nếu không phải điều chỉnh , Pik =1 nếuphải điều chỉnh Hãy tìm một quy trình sản xuất , để sản xuất đủ N hoá chất , mỗi hoáchất 1 lần , mà không tốn chi phí điều chỉnh thiết bị sản xuất

Trang 10

3 ) Một nhà máy in sử dụng 2 máy A và B để hoàn thành N cuốn sách : Máy A in sách , máy B đóng sách Thời gian làm cuốn sách k trên máy A và B tơng ứng là ak và bk

(k=1 n) với điều kiện phải qua máy A rồi mới qua máy B ( in cuốn sách k xong rồi mới

đóng nó ) Ngời ta chứng minh đợc định lý sau : Nếu Min{ak , bm}<= Min{a m , bk} thì phải làm cuốn sách k trớc cuốn m

Hãy tìm một trình tự in sách để tổng thời gian chờ đợi của máy B là ít nhất

Gợi ý : Mỗi cuốn sách là 1 đỉnh đồ thị , thứ tự in là cung

Từ bảng A,B , dựa vào định lý trên , lập đồ thị G , cung (k,m) thể hiện cuốn sách

k làm trớc cuốn sách m

Vì phải hoàn thành toàn bộ các cuốn sách nên ta phải tìm mạch Hamintơn của đồ thị

Thí dụ :

Min(a1,b4) = 0.5 Min(a4,b1) = 1 Do đó sách 1 làm trớc sách 4

Đáp số : Thứ tự làm các cuốn sách theo mạch Hamintơn :

4 ) Tìm xâu nhị phân dài nhất mà mọi xâu con gồm k kí tự liên tiếp của nó chỉ xuất hiện

đúng 1 lần

Gợi ý : Bài toán tìm mạch Euler , tạo đồ thị gồm 2k-1 đỉnh là các xâu nhị phân gồm k-1 kí

tự 0,1 ; các cung là xâu nhị phân k kí tự đợc lập theo quy tắc :

Nếu cung (i,j) là xâu (a1a2 ak-1,ak) thì đỉnh i là xâu (a1a2 ak-1), đỉnh j là xâu (a2a3 ak)

Thí dụ : cung (i,j) =0001 thì đỉnh i là 000 , đỉnh j là 001

Do đồ thị liên thông và giả đối xứng nên tồn tại mạch Euler ,từ đó theo mạch tạo

đợc xâu nhị phân thoả mãn đề bài (xâu này dài 2k kí tự )

Chú ý : Để giải bài toán 3 ( N chi tiết máy trên 2 máy ) còn thuật toán JonhSon

4

3

Trang 11

Thứ tự thực hiện các chi tiết 1 4 2 3

Tìm giá trị nhỏ nhất trong tất cả các giá trị thời gian thực hiện trên máy A , máy

B của các chi tiết còn lại , nếu giá trị nhỏ nhất này thuộc về máy A thì xếp tiếp tên chitiết máy vào đoạn đầu hành trình , ngợc lại nếu thuộc về máy B thì xếp tiếp tên chi tiếtmáy vào phần cuối hành trình , sẽ đợc kết quả là dòng 4 trong bảng trên : 1→ 4 → 2 →

C i 1 vì tới đỉnh cuối cùng là i thì chỉ còn cạnh (i,1 ) cha qua

Trang 12

Bµi 1 ) Lêi gi¶i Lª Hång ViÖt ( 11 CT 1997-98 ) :

{$A+,B-,D+,E+,F-,G-,I-,L+,N-,O-,P-,Q-,R-,S+,T-,V+,X+}{$M 16384,0,655360}

Trang 13

While dx[i] do inc(i);

If i>n then tt:=true;

If a[i,j]=1 then inc(ra);

If a[j,i]=1 then inc(va);

Trang 16

Function Min(var p:Byte): Byte;

Var i,j,lc:byte;Lgt : Real;

Trang 17

Cách 1 : áp dụng bài tìm mạch Euler ( bài 1 ) cho đồ thị có (1 shl (n-1)).(1 shl (n-1))

đỉnh đợc xây dựng nh đã nêu ở phần hớng dẫn ngay sau đề bài

Cách 2 : Đệ quy xây dựng dãy nhị phân X gồm 2n +n-1 số 0,1 :

+ n phần tử đầu là 0

+ phần tử thứ i ( n+1 <= i <= 2n +n-1 ) chọn trong 2 khả năng 0,1 sao cho dãy :X[i-n+1], X[i-n+2], , X[i] là 1 dãy nhị phân có n phần tử cha có mặt lần nào kể từ vị trí 1 tới i

Cách 3 : Nh cách 2 , nhng dùng vòng lặp thay đệ quy

Cách 1 chơng trình chỉ chạy tới N =7

Trang 18

Begin Write('Nhap N : '); Readln(N); End;

Function Tinh(k : Word) : Word;

Var x,i : Integer;

For i:=k Downto k-N+1 Do

If A^[i]=1 then x:=x or (1 Shl (k-i));

WRiteln(F,'Do dai cua xau : ',1 Shl N+N-1 );

For i:=1 to 1 Shl N+N-1 do Write(F,A^[i]);

Trang 19

Type Mang = Array[0 max] of Shortint;

Var A,Dd : Mang;

Function Tinh(k : Word) : Word;

Var x,i : Word;

Begin

x:=0;

For i:=k downto k-N+1 do

Trang 20

If A[i]=1 then x:=x or (1 Shl (k-i));

Sau đây là 2 cách giải của Phạm phú Trung 11CT 1997-1998

Cách 1 : Đệ quy ( chỉ chạy với đồ thị số đỉnh nhỏ )

Program Haminton;

Uses Crt;

Const Fi = 'Haminton.dat';

Fo = 'Vet.out';

Trang 22

Writeln(F,'Chi phi min la : ',lt);

For i:=1 to N do Write(F,Lkq[i]:4); Writeln(F,1:4); Close(F);

Trang 23

Var B : Array [1 max,1 max] Of Kmang;

A : Array [1 max,1 max] Of Integer;

Trang 25

Writeln(F,'Chu trinh haminton : ',min);

For i:=1 to N do Write(F,B[i,lj].ten:4); Writeln(F,lj:4);

Ngày đăng: 07/09/2014, 07:09

TỪ KHÓA LIÊN QUAN

w