生成8位唯一随机数

Ani*_*K K 0 c random algorithm data-structures

有没有更好的方法在恒定时间内生成8位唯一随机数?

下面的实现返回8位唯一随机数,但复杂度为O(n = 256),因为它必须循环通过is_generated[]数组,直到它生成一个先前未生成的数组.它还需要额外的空间is_generated.

uint8_t
random_octate(void)
{   
    static bool     is_generated[256] = {false};
    uint32_t        num = rand()%256;

    while(is_generated[num])
    {
        num = rand() % 256;
    }

    is_generated[num] = true;
    return num;
}
Run Code Online (Sandbox Code Playgroud)

Ama*_*dan 6

生成(0..255),然后随机播放.然后逐一给出元素.改组为O(n),对256个值进行一次,因此每个元素的成本为O(1); 并且显然返回单个元素也是O(1).