代码拉取完成,页面将自动刷新
#!/usr/bin/env node
const readline = require('readline');
function calculateEntropy(probabilities) {
return -probabilities.reduce((acc, p) => acc + (p > 0 ? p * Math.log2(p) : 0), 0);
}
function validateProbabilities(probabilities) {
if (probabilities.length === 0 || !probabilities.every(p => p >= 0 && p <= 1)) {
throw new Error("每个概率必须在 0 和 1 之间");
}
const total = probabilities.reduce((acc, p) => acc + p, 0);
if (total !== 1) {
throw new Error("概率之和必须等于 1");
}
}
function parseInput(args) {
if (args.length === 0) {
return promptUser();
}
if (args[0].includes(',')) {
return args[0].split(',').map(Number);
} else if (args[0].includes(' ')) {
return args[0].split(' ').map(Number);
} else {
throw new Error("输入格式错误:请使用逗号或空格分隔概率,不要混合使用");
}
}
function promptUser() {
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
return new Promise((resolve) => {
rl.question("请输入概率(用逗号或空格分隔):", (answer) => {
rl.close();
resolve(answer.trim().split(/\s*[, ]\s*/).map(Number));
});
});
}
async function main() {
try {
const input_probs = parseInput(process.argv.slice(2));
validateProbabilities(input_probs);
const entropy = calculateEntropy(input_probs);
console.log(`信源熵 H(p) = ${entropy}`);
} catch (error) {
console.error(`错误: ${error.message}`);
}
}
main();
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。