2017-07-16 25 views
-1

我要生成的環狀系列的準隨機數的以下說明書: - 數字如何生成不會立即重複(和更多)的準隨機數?

  • 源是均勻分佈和隨機,範圍包括0至255。這是一個現有的硬件設備。
  • 要求的輸出範圍是1到8(含)。
  • 兩個連續的輸出數字永遠不會相同。例如5永遠不會跟隨5,但你可以有5,2,5。
  • 正好是一個輸出號碼需要每個單一源碼。因此不能使用拒絕抽樣。 while()循環,混洗等不能使用。

這是最後一個令我惱火的規定。源發生器只能提供恆定1/s的隨機字節,並且我想要以恆定的1/s輸出。通常情況下,您只需拒絕生成的數字(如果它等於上一個數字),並生成另一個數字。在我的情況下,你只能在每個輸出中獲得一個鏡頭。我認爲這是一種隨機選擇過程,但是這個要求讓我在圈子裏四處走動,因爲我是一個糟糕的程序員。算法,流程圖或圖片都可以,但我會用Java來實現。

道歉的半通用標題,但我真的想不出任何更準確,但簡潔。

+0

如果我正確理解你,你只用了每8個隨機輸入位中的3個? –

+0

無論哪種方式,如果數值與以前相同,爲什麼不能像X + 1那樣做? –

+1

@OliverCharlesworth X + 1是不是隨機的呢?而且X + RANDOM不會工作,因爲每次只能得到一個鏡頭,而X + RANDOM可能會= X。Tricky。 –

回答

0
int sum=0; 
int prev=-1; 
int next(int input){ 
    sum=(sum+input)%8; 
    if(sum==prev)sum=(sum+1)%8; 
    prev=sum; 
    return sum+1; 
} 

(正如我解釋,即使新的大膽的重點,它不需要總是產生相同的輸入值相同的輸出值 - 這將使不可能的任務,以解決)

+0

我沒有想到這些,但是,你是絕對正確的。十分優雅。這是一個藝術展示使用閃光燈說明真正的隨機性。因此,連續兩個相同的數字不會導致燈泡點亮。 –

1

如果我正確理解問題,第一個隨機數將從8個不同的數字(1到8)中隨機選擇,而每個連續的隨機數將從7種不同的可能性中選擇(1到8除前一個)。因此,您需要將256個值的範圍分爲7種可能性。它甚至不會出來,但這是你能做的最好的。所以,你需要像

public class RandomClass { 
    public RandomClass(HardwareSource source) { 
     this.source = source; 
     first = true; 
    } 
    pubic int nextRandom() { 
     int sourceValue = source.read(); 
     int value; 
     if (first) { 
      value = sourceValue % 8 + 1; 
      prev = value; 
     } else { 
      value = sourceValue % 7 + 1; 
      if (value >= prev) { 
       value++; 
      } 
     prev = value; 
     first = false; 
     return value; 
    } 
} 

假設在第一次調用生成5.你怎麼稱呼它第二次,value首先被計算爲從1到7的數字;如果值大於等於5,那麼通過增加它,可能輸出的範圍變爲1,2,3,4,6,7,8。輸出將在這兩個值之間幾乎均勻分佈。由於256不能被7整除,因此分佈並不均勻,對較低的數字會有輕微的偏差。你可以修正它,以便在每次通話中偏差都會改變,甚至在整個序列中都會改變;我相信有一種方法是

value = (sourceValue + countGenerated) % 7 + 1; 

您在哪裏跟蹤您生成了多少個數字。

我認爲這比採用輸入模8的解決方案更好,如果數字等於上一個,則加1。這些解決方案將產生prev + 1,其產生的概率是產生其他數字的兩倍,所以它比所需的偏多。

+0

是的,我需要對算法的輸出進行Chi2測試。從長遠來看,這些數字均勻分佈並且沒有偏見是很重要的。因此,在80億產出之後,每1到8個價值應該有10億美元。 –

+0

然後,我的第一個解決方案將無法正常工作,但是稍後在帖子中提出的更改應該可以做到。附:我強烈建議首先使用假的'HardwareSource'進行測試,然後對輸出進行統計分析。 – ajb

+0

想法:由於有8個可能的輸出並因此從奇數(1-7)中選擇,是否存在均勻性問題?如果我有7種可能性,那麼必須從6(偶數)中選擇,偏見會更容易克服嗎? –