Một số thuật toán tìm phần tử kế tiếp Bạn nào biết các thuật toán sau thì trình bày rõ các bước mình tham khảo với: 1. Thuật toán sinh kế tiếp xâu ở sau xâu a có độ dài n? 2. Thuật toán sinh kế tiếp tổ hợp chấp k của tập n số tự nhiên? 3. Thuật toán sinh kế tiếp hoán vị của tập n số tự nhiên? |
Bạn làm rõ cụm từ "sinh kế tiếp " nhen 1. xâu xem như dãy các bit: cộng thêm bit 1 vào. 2. $C_n^{k+1}=\frac{n-k}{k+1}C_n^k $ 3. $(n+1)!=(n+1)n! $ |
Trích:
|
Trích:
Các bài toán minh họa bằng Pascal hoặc mã giả, nếu bạn muốn hiện thực bằng ngôn ngữ khác thì mình sẽ gửi cái khác. :hungry: [Only registered and activated users can see links. Click Here To Register...] |
1. Thuật toán sinh kế tiếp xâu ở sau xâu $a $ có độ dài $n $: Xét từ cuối dãy về đầu, tìm gặp số 0 đầu tiên: +) Nếu thấy thì thay bởi 1 và thay các phần tử phí sau bởi 0. +) Không thấy thì dừng lại, đây là cấu hình cuối cùng. 2. Thuật toán sinh kế tiếp tổ hợp chập $k $ của tập $n $ số tự nhiên: Xét từ cuối dãy về đầu, tìm phần tử $x_i $ chưa đạt tới $n-k+i $: +) Nếu thấy thì tăng $x_i $ đó lên 1 và đặt tất cả các phần tử phía sau bằng giới hạn dưới. +) Không thấy thì dừng lại, đây là cấu hình cuối cùng. 3. Thuật toán sinh kế tiếp hoán vị của tập $n $ số tự nhiên: Xác định đoạn cuối giảm dần dài nhất, tìm phần tử $x_i $ đứng liền trước đoạn cuối đó: +) Nếu tìm thấy thì trong đoạn giảm dần, tìm phần tử $x_k $ nhỏ nhất thỏa mãn $x_k>x_i $; đảo $x_k $ và $x_i $ rồi lật ngược đoạn cuối (từ $x_{i+1} $ đến $x_k $) giảm dần thành tăng dần. +) Không thấy thì dừng lại, đây là cấu hình cuối cùng. Các bạn check dùm! |
Mình vừa đi thi về, bó tay bài ni: Bài toán. Xây dựng 1 thuật toán in ra tất cả các biển số xe theo quy cách biển có dạng $X x1x2x3.x4x5 $ (dấu chấm chạy lòng vòng ngăn cách 5 số chứ không phải chỉ ở vị trí thứ 3 đó) với X là 1 trong các chữ cái tiếng Anh, $x_i $ là các chữ số, mỗi biển số thuộc một dòng? |
Trích:
|
Trích:
|
Trích:
Trích:
ps: Như tui nói, cách này ko hay! |
Trích:
PHP Code: Có thuật toán in đệ qui: PHP Code: |
Trích:
Code: procedure Next_Permutation; // sinh hoán vị kế tiếp theo thứ tự từ điển của tập n phần tử - Duyệt từ phải qua trái, tìm j là chỉ số lớn nhất thỏa mãn $a_j <a_{j+1} $ - Tìm đến $ a_k $ nhỏ nhất còn lớn hơn $a_j $ ở bên phải nó - Đổi chỗ $a_j $ với $a_k $ - Lật ngược đoạn từ $a_{j+1} $ đến $a_n $ 2. Liệt kê tập con m phần tử của tập n phần tử (chỉ nêu thuật toán thôi, code cũng tương tự :D) - Tìm từ bên phải dãy $a_1,a_2,..,a_m $ phần tử $a_j \neq n-m+i, $ - thay $a_j $ bởi $a_{j+1} $ - Thay $a_i $bơi $a_j+i-j $ với $i=j+1,j+2,...,m $ 1. Liệt kê tất cả các dãy nhị phân độ dài n, thuật toán sinh kế tiếp như sau: Code: procadure Next_Bit_String; |
Múi giờ GMT. Hiện tại là 03:58 AM. |
Powered by: vBulletin Copyright ©2000-2024, Jelsoft Enterprises Ltd.