Tải bản đầy đủ (.pdf) (16 trang)

bài tập lớn cuối kỳ toán học rời rạc

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 (527.23 KB, 16 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

<b>TRƯỜNG ĐẠI HỌC KINH TẾ - KỸ THUẬT CÔNG NGHIỆPKHOA CÔNG NGHỆ THÔNG TIN</b>

<b>BÀI TẬP LỚN CUỐI KỲMƠN: TỐN HỌC RỜI RẠC</b>

<i><b>Sinh viên thực hiện:</b></i>

Nguyễn Đình Hoàng – 20103100804

<i><b>Giảng viên hướng dẫn:</b></i>

<i>G.V. Lê Thị Thu Hiền</i>

<b>Hà Nội - 2021</b>

</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">

<b>NỘI DUNG</b>

<b>I.TỰ LUẬN :</b>

<b>Câu 1: Mỗi cá nhân sử dụng mạng máy tính đều có mật khẩu gồm từ 6 đến 8 ký </b>

tự, mỗi ký tự là chữ cái in hoa hoặc chữ số. Mật khẩu phải chứa ít nhất một chữ số.Có bao nhiêu mật khẩu khác nhau?

<b>Câu 2: Có 5 đấu thủ thi đấu cờ, mỗi người đấu một trận với mỗi đấu thủ khác. </b>

Chứng minh rằng trong suốt thời gian thi đấu, ln tồn tại hai đấu thủ có số trận đãđấu bằng nhau.

<b> BÀI LÀM</b>

</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">

-Ta có số trận đã đấu của mỗi người có thể là 0,1,2,3,4. Nhưng vì khơng thểcó cùng lúc một người đã đấu 4 trận và một người chưa đấu trận nào, nên có tối đa 4 loại số trận đã đấu.

-Vận dụng nguyên lý Dirichlet ta có ít nhất có 2 người có cùng số trận đã đấu.

<b>Câu 3: Tìm số nghiệm nguyên khơng âm của phương trình: x1 + x + x + x = 20<small>234</small></b> ,

<b>thỏa màn điều kiện x1 ≤ 3; x ≥2; x >4<small>23</small></b>

<b> BÀI LÀM</b>

Gọi p, q, r lần lượt là số nghiệm nguyên không âm của phương trình (1) thỏa các điều kiện ( ), ( ), ( ). Ta có:

p = q – r.

Đặt : x ’ = x ; x ’ = x - 2; x ’ = x - 5; x ’ = x <small>11223344</small>

Phương trình (1) trở thành :x<small>1</small>’+ x ’ + x ’ + x ’ = 13 (2) <small>234</small>

Số nghiệm nguyên không âm của (1) thỏa( ) bằng số nghiệm nguyên không âm của (2)

</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">

→ Số nghiệm là : K = C<small>4(4+13-1)</small> = CVậy q = C<small>13</small>

Lý luận tương tự, ta có : r = K = C<small>99</small> = C

<small>(4+9-1)</small> <sup>9</sup><small>12</small>

→ p = q - r = C<small>13</small> - C = 560 - 220 = 340<small>912</small>

Vậy số nghiệm ngun khơng âm của phương trình (1) thỏa điều kiện ( ) là340.

<b>Câu 4: Áp dụng thuật toán nhánh cận giải bài toán người du lịch với ma trận chi </b>

</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">

→ Hành trình ACBDA có chi phí 34.→ Cập nhật f = 34.

<b>Câu 5: Cho đồ thị được biểu diễn bằng hình dưới đây.</b>

f = +∞

(B) = 8g = 20

(C) = 5g = 17(C,B)

= 12g = 20

(C,D = 17g = 25

(C,B,D)=29g = 33

(C,D,B)=44g = 48

(D) = 22g = 34

</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">

a) Viết thứ tự các đỉnh được thăm của đồ thị theo thuật tốn BFS.

b) Tìm đường đi ngắn nhất từ đỉnh a đến các đỉnh còn lại của đồ thị bằng thuậttốn Dijkstra.

c) Tìm cây khung nhỏ nhất của đồ thị trên bằng thuật tốn Kruskal.d) Tìm cây khung nhỏ nhất của đồ thị trên bằng thuật toán Prim.

BÀI LÀMa)

</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">

c)

</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">

Bắt đầu từ đồ thị rỗng T có 8 đỉnh.

Sắp xếp các cạnh của đồ thị theo thứ tự không giảm của trọng số:

{(h,k),(a,h),(c,d),(c,k),(b,k),(c,g),(a,b),(b,c),(d,g),(d,h),(e,g),(d,e),(g,h),(a,g)} 1 2 2 2 3 3 4 4 4 5 5 7 7 10Thêm vào đồ thị T cạnh: (h,k)

Do số cạnh của T là 1 < 8-1 nên tiếp tục thêm cạnh (a,h),(c,d),(c,k) vào T.Do số cạnh của T là 4 < 7 nên tiếp tục thêm cạnh (b,k),(c,g) vào T.

Do số cạnh của T là 6 < 7 nên ta tiếp tục thêm, tuy nhiên nếu thêm cạnh (a,b) thì nó sẽ tạovới 2 cạnh (a,h), (b,k) đã có trong T thành 1 chu trình. Vì vậy ta sẽ bỏ qua cạnh (a,b).Tương tự, ta bổ sung thêm cạnh (e,g) và thu được T với tập E gồm 7 cạnh: (h,k),(a,h),<small>T </small>

</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">

Khởi tạo

[∞,k] [3,k] [2,k] [∞,k] [∞,k] [∞,k] [1,k]* [0,k] k1 [2,h]* [3,k] [2,k] [5,h] [∞,k] [7,h] - - k,h2 - [3,k] [2,k]* [5,h] [∞,k] [7,h] - - k,h,a3 - [3,k] - [2,c]* [∞,k] [3,c] - - k,h,a,c

</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">

<b>II.LẬP TRÌNH :</b>

1. Đề bài : Lập trình cài đặt thuật tốn nhánh cận giải bài toán người du lịch.2. Ý tưởng giải thuật:

Ta đánh giá được một giới hạn (cận) chung cho những giá

trị này (đối với bài tốn tìm min là cận dưới, đối với bài tốn tìm max là cận trên). Nếu cận tính được khơng tốt hơn kỷ lục hiện có (đối với bài tốn tìm min là khơngnhỏ hơn, đối với bài tốn tìm max là khơng lớn hơn) thì có nghĩa là hướng phát triển của nhánh tìm kiếm này là vơ ích, có thể bỏ qua để xét giá trị khác cho xi. Việc không xét những giá trị tiếp theo của xi giúp cho loại bỏ được một loạt các nhánh trên cây tìm kiếm. Vì thế kỹ thuật đánh giá này có tên gọi là đánh giá nhánhcận (tìm cận tại mỗi nhánh tìm

kiếm). Để đánh giá được nhánh cận, cần có sự xem xét kỹ tính chất của hàm mục tiêu và điều này khơng đơn giản. Thông thường, cận được đánh giá cố gắng đạt được hai tiêu chí :

- Càng sát với giá trị tối ưu của bài tốn càng tốt.- Việc tính cận càng đơn giản càng tốt.

Tiêu chí thứ nhất giúp cho việc lùi càng sớm trên cây tìm kiếm, nghĩa là càng cắt được nhiều nhánh trên cây này, tiêu chí thứ hai làm giảm bớt các phép tính trong một vòng lặp đệ quy (mà số lượng lồng nhau của chúng là rất lớn!). Trên thực tế hai tiêu chí này thường xung đột lẫn nhau: để đánh giá cận càng sát, việc tính nó càng phức tạp. Việc điều chỉnh hai tiêu chí này cho phù hợp là cả một nghệ thuật, nó địi hỏi nhiều kinh nghiệm và kiến thức trong việc đánh giá các bất đẳng thức. Bây giờ, giả sử g(x1, x2, ...,

xi) là cận dưới tương ứng với bước thứ i của bài toán tìm min. Khi đó trong thủ tụcTRY(i) của mơ hình duyệt toàn bộ, trước khi gọi TRY(i +1), ta cần thử lại bất đẳng thức g(x1, x2, ..., xi) < min (nghĩa là chỉ tiến sang bước sau nếu cận dưới nhỏhơn kỷ lục hiện thời):

</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">

Void Try (i){

j: int;for (j thuộc Si)

if (chấp nhận j){

xi = j; (ghi nhận trạng thái mới);if (i == n) (ghi nhận kỷ kục)else (g(x1, x2, ..., xi) < min)

Try(i+1); (trả về trạng thái cũ);}

3. Code chương trình:#include <iostream>#include <conio.h>#include <iomanip>#include <stdio.h>using namespace std;int n;

int c[100][100]; int x[100];

</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">

int chuaxet[100];int kq[100];int MIN=0;int a=1;void Input(){

cout<<"\nNhap so luong thanh pho: "; cin>>n;

cout<<"Nhap chi phi cho cac cung duong \n";for(int i=1; i<=n; i++)

for(int j=1;j<=n;j++){

if(i!=j){

cout<<"c["<<i<<"]["<<j<<"]="; cin>>c[i][j];

} else

c[i][j]=0;}

for(int i=2;i<=n;i++)chuaxet[i]=1;}

</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">

void Output(){

cout<<"\nMa tran chi phi :\n";for(int i=1; i<=n; i++){

cout<<"{" ;for(int j=1;j<=n;j++){

void Result(){

cout<<"\nT1=>";for(int i=2;i<=n;i++)

cout<<"T"<<kq[i]<<"=>"; cout<<"T1";

cout<<"\n Chi phi cua hanh trinh la: "<<MIN; }

void Work(){

int S=0;

</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15">

for(int i=1;i<=n-1;i++)S=S+c[x[i]][x[i+1]]; S=S+c[x[n]][1];

if(S<MIN||a==1){

a=0; MIN=S;

for(int i=1;i<=n;i++)kq[i]=x[i];}

}

void Try(int i){

for(int j=2;j<=n;j++){

if(chuaxet[j]){

x[i]=j;chuaxet[j]=0; if(i==n)

Work();else

Try(i+1); chuaxet[j]=1; }

}}

</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="16">

int main(){

Input();Output(); Try(2);Result();getch(); }

4. Chạy chương trình :

<b>III.TÀI LIỆU THAM KHẢO : </b>

<b>- Tài liệu học tập mơn Tốn rời rạc, Đại học KTKTCN.- Giáo trình C++ (Phạm Văn Ất)</b>

</div>

×