加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
entropy.js 1.62 KB
一键复制 编辑 原始数据 按行查看 历史
范文程 提交于 2024-09-24 02:48 . 9.24
#!/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();
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化