我正在嘗試在范圍之間生成隨機間隔:2,5k - 10M。
目前,我正在執行以下操作:
const MIN_NUMBER = 2500;
const MAX_NUMBER = 10000000;
const random = (min, max, floating = false) => {
const result = Math.random() * max min;
return floating ? result : Math.floor(result);
};
const min = random(MIN_NUMBER, MAX_NUMBER / 10);
const max = random(min, min * 10);
const interval = `[${min}, ${max}]`;
console.log(interval);
但是正如你所看到的,生成的區間是小/中的概率不是很高。
我想獲得隨機間隔,例如:
- [2500, 10400]
- [2500, 9919]
- [3000000, 3301029]
- [500000, 611223]
我沒有遵循任何特定的規則,但正如你所看到的,與
- [2500, 400000]
- [2500, 71000]
- [3000000, 10000000]
- [500000, 3120000]
它們被認為是“小/中”,因為最大值和最小值之間沒有“真正巨大的”差異)。
使用我當前的演算法,您可以檢查生成的平均差異是否很高:
const MIN_NUMBER_OF_LIKES = 2500;
const MAX_NUMBER_OF_LIKES = 10000000;
const random = (min, max, floating = false) => {
const result = Math.random() * max min;
return floating ? result : Math.floor(result);
};
let averageDiff = 0;
const numIterations = 1000;
for (let i = 0; i < numIterations; i ) {
const min = random(MIN_NUMBER_OF_LIKES, MAX_NUMBER_OF_LIKES / 10);
const max = random(min, min * 10);
averageDiff = max - min;
}
averageDiff /= numIterations;
console.log({ averageDiff });
我該怎么做才能獲得隨機的小片段?
--注意:隨機生成的間隔之間的差異也是隨機的,但它必須是“小/中”(不像我當前的解決方案那么大)。
uj5u.com熱心網友回復:
首先在您希望的大小范圍內選擇隨機間隔大小怎么樣 - 這樣您就可以得到 INTERVAL_SIZE 的值。作為第二步,您隨機找到 MIN_NUMBER_OF_LIKES 和 MAX_NUMBER_OF_LIKES - INTERVAL 之間的最小值,這樣您就得到了 STARTPOINT。所以最終的 INTERVAL 將有 STARTPOINT 和 ENDPOINT = STARTPOINT INTERVAL_SIZE
uj5u.com熱心網友回復:
基于@krnz 解決方案:
const MIN = 2500;
const MAX = 10000000;
const random = (min, max, floating = false) => {
const result = Math.random() * max min;
return floating ? result : Math.floor(result);
};
function generateRandomSmallInterval() {
const intervalSize = random(1000, 10000);
const start = random(MIN, MAX-intervalSize);
const end = start intervalSize;
return {start, end};
}
const interval = generateRandomSmallInterval();
console.log({ interval });
console.log(`Diff: ${interval.end - interval.start}`);
使用 lodash 重構和泛化代碼:
import { random } from 'lodash';
function generateRandomIntervalInRange(min, max, maxIntervalSize = max - min) {
if (max - min <= 0) {
throw new Error("The `max` argument must be greater than `min`.");
}
if (maxIntervalSize <= 0) {
throw new Error("The maximum interval size must be greater than 0.");
}
if (maxIntervalSize > max - min) {
throw new Error(
`The maximum interval size mustn't be greater than ${max - min}.`
);
}
const intervalSize = random(1, maxIntervalSize);
const start = random(min, max - intervalSize);
const end = start intervalSize;
return { start, end };
}
//
// MAIN
//
const MIN = 1;
const MAX = 10;
const MAX_INTERVAL_SIZE = 5;
console.log(generateRandomIntervalInRange(MIN, MAX, MAX_INTERVAL_SIZE));
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/475250.html
標籤:javascript 算法 数学
