生成唯一伪随机数的最有效方法是什么?

时间:2010-08-08 16:02:32

标签: c++ algorithm random

  

可能重复:
  Create Random Number Sequence with No Repeats

我正在尝试生成唯一的会话ID。每个会话ID都是一个随机整数。主要要求是每个会话ID都是唯一的。我正在努力找到最有效的算法。

场景:从1到10生成10个随机数。

我的算法:

// Generate unique pseudo-random numbers between 1 and 10 inclusive

vector<int> vList;

for (int i = 1; i <= 10; i++)
{
    vList.push_back(i); 
}

// vList should have {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

for (int j = 1; j <= 10; j++)
{
    int k = (rand() % vList.size());
    cout << vList[k] << " ";
    vList.erase(vList.begin() + k);
}

// Sample output: 5 1 10 7 8 2 4 9 3 6

该算法的时间复杂度为O(n),空间复杂度为O(n)。有更高效的算法吗?

0 个答案:

没有答案