1 回答

TA貢獻(xiàn)1835條經(jīng)驗(yàn) 獲得超7個(gè)贊
這可以通過(guò)應(yīng)用基本代數(shù)來(lái)解決。算術(shù)序列定義為
A[i] = a + b*i, for i = 0, 1, 2, 3, ... where a is the initial term
元素序列 0 到 n 的總和是
S = (A[0] + A[n]) * (n+1) / 2
換句話說(shuō),第一個(gè)和列表項(xiàng)的總和乘以一半的項(xiàng)數(shù)。
既然你知道S
和n
,你只需要再?zèng)Q定一個(gè)“傳播”因子來(lái)生成你的序列。平均元素必須是1/n
- 這是您的算法錯(cuò)誤的地方,因?yàn)樗鼤?huì)為偶數(shù)的n
.
您的代碼在這組語(yǔ)句中失?。?/p>
half_rng = rng / 2 step_val = equal_perc / (rng - 1) # comparing x to int(half_rng)
如果rng
是偶數(shù),則將平均值分配給 position rng/2
,從而為您提供諸如 4 個(gè)元素的列表:
[0.417, 0.333, 0.25, 0.167]
這意味著您有兩個(gè)大于所需平均值的元素,只有一個(gè)小于所需的平均值,這迫使總和超過(guò) 1.0。相反,當(dāng)你有偶數(shù)個(gè)元素時(shí),你必須讓均值成為一個(gè)“幻影”中間元素,并在它周圍采取半步。讓我們用分?jǐn)?shù)來(lái)看看:你已經(jīng)有了
[5/12, 4/12, 3/12, 2/12]
您的差異是 1/12 ... 1 / (n * (n-1))
...您需要將這些值降低半步。相反,您選擇的散布 (1/12) 的解決方案將開(kāi)始半步:從每個(gè)元素中減去 1/24。
[9/24, 7/24, 5/24, 3/24]
你也可以用一個(gè)簡(jiǎn)單的線性因子來(lái)改變你的步數(shù)。用簡(jiǎn)單的整數(shù)決定你想要的元素的比率,例如5:4:3:2
,然后從 5+4+3+2 的明顯總和生成你的權(quán)重:
[5/14, 4/14, 3/14, 2/14]
請(qǐng)注意,這適用于任何整數(shù)的算術(shù)序列,這是選擇“傳播”的另一種方式。如果你使用4:3:2:1
你會(huì)得到
[4/10, 3/10, 2/10, 1/10]
或者您可以將它們更緊密地聚集在一起,例如,13:12:11:10
[13/46, 12/46, 11/46, 10/46]
所以......選擇你想要的傳播并簡(jiǎn)化你的代碼以利用它。
添加回答
舉報(bào)