Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 11 kết quả

Đề tài: Trộn ngẫu nhiên một danh sách

  1. #1
    Ngày gia nhập
    06 2007
    Nơi ở
    Hà Nội
    Bài viết
    361

    Mặc định Trộn ngẫu nhiên một danh sách

    Bài toán như sau: cho một danh sách gì gì đó, mục tiêu là trộn ngẫu nhiên danh sách đó (random đó). Mọi người biết giải thuật thì cứ nói lý thuyết thôi, còn đưa code c++ lên đây thì mình đọc không nổi .
    Thông cảm học mất gốc
    Blog tổng quan kiến thức về viễn thông : http://tongquanvienthong.blogspot.com/

    mSPDict từ điển android hỗ trợ liên kết tra trên các trình đọc sách điện tử và tra sách giấy thông qua camera
    http://www.tinhte.vn/threads/691731/

  2. #2
    No Avatar
    Leon88 Khách

    Theo tớ thì đầu tiên mình xác định danh sách đó gồm có nhiêu phần tử. Rồi for từ 1 đến phần tử cuối : trong mỗi vòng lập for thì dùng hàm rand()%số lượng phần tử. Nếu nó rand số đã ra rồi thì rand lại ... ứng với mỗi số dc rand ra thì tráo đổi vị trí trong mảng . VD : của thằng rand đầu tiên đổi với vị trí 1 ... cứ lần rand thứ 2 thì tráo với vị trí thứ 2 ...hic post mãi mới dc T_T

  3. #3
    Ngày gia nhập
    11 2006
    Bài viết
    633

    Đọc đề tớ chẳng hiểu gì cả, sao giúp đây?

  4. #4
    Ngày gia nhập
    06 2007
    Nơi ở
    Hà Nội
    Bài viết
    361

    thế này nè cho danh sách 1 2 3 4 5 thì nó có thể random là 2 1 3 5 4 hay 4 3 5 1 2 hay 5 3 4 1 2 ... sao cho nhanh nhất
    Blog tổng quan kiến thức về viễn thông : http://tongquanvienthong.blogspot.com/

    mSPDict từ điển android hỗ trợ liên kết tra trên các trình đọc sách điện tử và tra sách giấy thông qua camera
    http://www.tinhte.vn/threads/691731/

  5. #5
    No Avatar
    Leon88 Khách

    Với thí dụ trên thì theo tớ là làm như vậy : ta cũng random 5 lần ứng với 5 vị trí của 5 phần tử . Nhưng với lần random đầu tiên thì ta random từ 1 đến 5 , thí dụ random ra số 3 đi thì ta hoán đổi vị trí số 3 với vị trí 1. Ta được mảng 3 2 1 4 5 , với lần random thứ 2 thì random từ 1 đến 4 ( ứng với 4 vị trí còn lại) sau khi random ra 1 số là 4 thì ta hoán đổi vị trí thứ 4 lúc này ( tức là a[5]) với vị trí tiếp theo là a[2] ... làm vậy đến khi còn 1 phần tử cuối cùng là xong

  6. #6
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,750

    Mặc định Trộn ngẫu nhiên một danh sách

    Đây là thuật toán shuffle, về thuật toán này có nhiều cách viết lắm.

    Còn đây là code mà Dr vừa mới viết.
    Code:
    #include<stdio.h>
    #include<conio.h>
    #include<stdlib.h>
    void swap(int &x, int &y)
    {
      int tmp;
      tmp=x;
      x=y;
      y=tmp;
    }
    int main()
    {
      int a[]={1,2,3,4,5};
      int i;
      for (i=0;i<5;i++)
      {
        //randomize();
        swap(a[i],a[random(5)]);
      }
      for (i=0;i<5;i++)
      {
        printf("\n%d",a[i]);
      }
     getch();
     return 0;
    }
    Lúc trước hiểu lầm ý của bạn nên đã chỉ cho bạn là random()*2-1;

    (Moderator gửi bài Admin biết phải trả lời ngay)
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

  7. #7
    No Avatar
    Leon88 Khách

    swap(a[i],a[random(5)]);
    Em nghĩ random(5) thì nó cũng có thể ra trùng số mà ... Mong anh giải thích cho em rõ cái code hơn

  8. #8
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,750

    Em nghĩ random(5) thì nó cũng có thể ra trùng số mà ... Mong anh giải thích cho em rõ cái code hơn
    Trùng chỉ số thôi, chứ đâu có trùng giá trị, không ảnh hưởng gì đến ý đồ cả. Cậu đọc thêm về thuật toán này đi.
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

  9. #9
    No Avatar
    Leon88 Khách

    Theo ý của anh tức là chỉ cần đổi chỗ 1 lần thôi cũng là random ra 1 chuỗi ngẫu nhiên ... đúng là thuật toán trong thuật toán... rất cao thủ

  10. #10
    Ngày gia nhập
    05 2007
    Bài viết
    14

    ^^ chạy đc rồi .Nhưng mà sao khi chạy nó chỉ hiện 1 lần là 4 5 1 2 3 .

    Bạn bỏ cái dấu // ở dòng //randomize(); đi (Posted by Dreaminess)
    Đã được chỉnh sửa lần cuối bởi coixuong : 05-10-2007 lúc 10:56 PM.
    .....oooo0.............
    .....(.....)....0oooo..
    ......\...(......(.....)....
    .......\._).......).../.....
    ..................(_./......
    Bước chậm mà chắc.

Các đề tài tương tự

  1. Kỹ thuật C++ Tạo mảng với các giá trị ngẫu nhiên
    Gửi bởi aydada trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 13
    Bài viết cuối: 07-05-2013, 05:54 PM
  2. Lập trình C Hàm tạo số ngẫu nhiên | Cách nhập giá trị ngẫu nhiên cho ma trận?
    Gửi bởi chuong01 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 15
    Bài viết cuối: 13-08-2012, 09:43 PM
  3. Bài tập C Tạo ngẫu nhiên mảng 2 chiều vuông 4X4 với các phần tử tạo ngẫu nhiên trong đoạn[0,50]
    Gửi bởi truongtrungviet trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 16
    Bài viết cuối: 16-04-2011, 08:06 AM
  4. Tạo ngẫu nhiên danh sách các số nguyên viết bằng C. Xem code giúp mình?
    Gửi bởi mr.en_tu_di trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 4
    Bài viết cuối: 20-03-2011, 01:08 AM
  5. Cách xây dựng hàm tạo số ngẫu nhiên?
    Gửi bởi buingochuy trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 09-09-2010, 03:51 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn