• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Thuật toán hoán vị n phần tử trong VB.NET

Nơi trao đổi về các vấn đề trong lập trình Windows Forms, Console dùng cú pháp ngôn ngữ Visual Basic .NET và C#

Điều hành viên: tungblt, vuathongtin

conghoangxd07
Thành viên năng nổ
Thành viên năng nổ
Bài viết: 57
Ngày tham gia: T.Hai 03/09/2012 10:31 am
Has thanked: 9 time

Thuật toán hoán vị n phần tử trong VB.NET

Gửi bàigửi bởi conghoangxd07 » T.Ba 24/05/2016 12:37 pm

Ví dụ em có dãy số sau: 1,2,3,4,5,n.. Mọi người giúp em thuật toán bằng VB.NET với. Hoặc hướng dẫn cách để em viết thuật toán.



Hình đại diện của người dùng
deptraithongminh
Thành viên tích cực
Thành viên tích cực
Bài viết: 143
Ngày tham gia: T.Ba 02/07/2013 4:58 pm
Đến từ: TPHCM
Has thanked: 17 time
Been thanked: 1 time

Re: Thuật toán hoán vị n phần tử trong VB.NET

Gửi bàigửi bởi deptraithongminh » CN 29/05/2016 3:56 pm

về thuật toán hoán vị n phần tử thì như hồi trc mình có học lập trình pascal trong lớp 8 (mình học chuyên tin nên được dạy nâng cao) thì trước hết bạn cần biết về 2 điều:
1. trong 1 số, chữ số gãy là chữ số đầu tiên từ phải sang có giá trị nhỏ hơn chữ số đứng kế bên trái nó (vd: số 15926 thì chữ số gãy là số 2)
2. trong 1 số, chữ số vượt là chữ số đầu tiên từ phải sang có giá trị lớn hơn chữ số gãy (trong vd trên thì chữ số vượt là 6)
+thuật toán hoán vị n pt như sau:
- đầu tiên tìm chữ số gãy và chữ số vượt (lưu ý luôn luôn tìm chữ số gãy trước), sau đó đổi vị trí 2 chữ số đó vs nhau cho tới khi không thể tìm được chữ số gãy thì dừng lại (dùng vòng lặp do while loop :) )
- trong trường hợp ngay từ đầu bạn ko tìm đc chữ số gãy thì có lẽ bạn thử đổi đại vị trí của 2 số bất kì trong dãy xem ntn chứ trường hợp này thì mình chưa gặp :(

khoaph
Thành viên chính thức
Thành viên chính thức
Bài viết: 34
Ngày tham gia: T.Ba 08/12/2015 12:57 pm
Been thanked: 4 time

Re: Thuật toán hoán vị n phần tử trong VB.NET

Gửi bàigửi bởi khoaph » T.Tư 01/06/2016 10:03 pm

Cho bạn cái code tham khảo, code này liệt kê tất cả các hoán vị của dãy số từ 0 tới n-1, mình đã cho chạy với n=6, chạy khá lâu
tạo một form có button1, textbox1,textbox2, số n lấy từ textbox1, textbox2 để chứa kết quả, button1 để thực hiện tính toán
  1. Public Class Form1
  2.     Private trSoDaLay As List(Of Integer)
  3.     Private trSoLuong As Integer
  4.     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  5.         trSoLuong = CInt(TextBox1.Text)
  6.         trSoDaLay = New List(Of Integer)
  7.         LaySo(trSoLuong)
  8.     End Sub
  9.     Private Sub LaySo(ByVal tsN As Integer)
  10.         If tsN > 0 Then
  11.             For bI As Integer = 0 To trSoLuong - 1
  12.                 If Not trSoDaLay.Contains(bI) Then
  13.                     trSoDaLay.Add(bI)
  14.                     LaySo(tsN - 1)
  15.                     trSoDaLay.RemoveAt(trSoDaLay.Count - 1)
  16.                 End If
  17.             Next
  18.         Else
  19.             Dim bKQ As String
  20.             For bI As Integer = 0 To trSoDaLay.Count - 1
  21.                 bKQ += trSoDaLay(bI).ToString + ", "
  22.             Next
  23.             TextBox2.Text += bKQ + vbNewLine
  24.         End If
  25.     End Sub
  26. End Class

từ code trên bạn nên chuyển về dạng tìm hoán vị nếu biết được chỉ số thứ tự của nó trong dãy trên

conghoangxd07
Thành viên năng nổ
Thành viên năng nổ
Bài viết: 57
Ngày tham gia: T.Hai 03/09/2012 10:31 am
Has thanked: 9 time

Re: Thuật toán hoán vị n phần tử trong VB.NET

Gửi bàigửi bởi conghoangxd07 » T.Năm 02/06/2016 10:11 pm

Thanks bạn để mình làm thử

Hình đại diện của người dùng
Kasper
Guru
Guru
Bài viết: 1062
Ngày tham gia: T.Sáu 16/05/2008 10:54 am
Has thanked: 2 time
Been thanked: 76 time
Liên hệ:

Re: Thuật toán hoán vị n phần tử trong VB.NET

Gửi bàigửi bởi Kasper » T.Sáu 04/11/2016 9:07 am

Nhanh, gọn, lẹ đây:

  1. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  2.         Randomize()
  3.     End Sub
  4.  
  5.     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  6.         Dim r = New Random()
  7.         Dim mang() As Integer = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
  8.         Dim tmp, i, k As Integer
  9.         For i = 0 To mang.GetLength(0) - 1 Step 1
  10.             k = r.Next(mang.GetLength(0) - 1)
  11.             tmp = mang(i)
  12.             mang(i) = mang(k)
  13.             mang(k) = tmp
  14.         Next
  15.     End Sub
  16.  


  1. private void button1_Click(object sender, EventArgs e)
  2.         {
  3.             int[] mang = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
  4.             Random r = new Random();
  5.             int tmp, i, k;
  6.             for(i = 0; i <= mang.GetUpperBound(0); i++)
  7.             {
  8.                 k = r.Next(mang.GetUpperBound(0));
  9.                 tmp = mang[i];
  10.                 mang[i] = mang[k];
  11.                 mang[k] = tmp;                
  12.             }
  13.         }
  14.  
Lành tợ tòng, ác tợ hoa,
Nhà hòa muôn việc đều nên.


Quay về “Visual Basic .NET và C# (VB.NET & C#)”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.6 khách