Information Entropy


Time Limit: 2 Seconds     
Memory Limit: 65536 KB      Special Judge


Information Theory is one of the most popular courses in Marjar University. In this course, there is an important chapter about information entropy.

Entropy is the average amount of information contained in each message received. Here, a message stands for an event, or a sample or a character drawn from a distribution or a data stream. Entropy thus characterizes our uncertainty about our source of information.
The source is also characterized by the probability distribution of the samples drawn from it. The idea here is that the less likely an event is, the more information it provides when it occurs.

Generally, "entropy" stands for "disorder" or uncertainty. The entropy we talk about here was introduced by Claude E. Shannon in his 1948 paper "A Mathematical Theory of Communication". We also call it Shannon entropy or information entropy to distinguish
from other occurrences of the term, which appears in various parts of physics in different forms.

Named after Boltzmann's H-theorem, Shannon defined the entropy Η (Greek letter Η, η) of a discrete random variableX with possible values
{x1, x2, ..., xn} and probability mass functionP(X) as:

rev=2.5.3" alt="" style="height:21px; width:6px; vertical-align:-5px; margin-right:0.09em">

rev=2.5.3" alt="" style="height:5px; width:15px; vertical-align:3px; margin-right:0.05em">

rev=2.5.3" alt="" style="height:14px; width:15px; margin-right:-0.02em">

rev=2.5.3" alt="" style="height:21px; width:7px; vertical-align:-5px; margin-right:0.05em">

rev=2.5.3" alt="" style="height:14px; width:6px; margin-right:0.01em">

rev=2.5.3" alt="" style="height:21px; width:6px; vertical-align:-5px; margin-right:0.09em">

rev=2.5.3" alt="" style="height:21px; width:6px; vertical-align:-5px; margin-right:0.09em">

Here E is the expected value operator. When taken from a finite sample, the entropy can explicitly be written as

rev=2.5.3" width="7" height="21" alt="" style="height:21px; width:7px; vertical-align:-5px; margin-right:0.05em">

rev=2.5.3" alt="" style="height:5px; width:15px; vertical-align:3px; margin-right:0.05em">

rev=2.5.3" alt="" style="height:9px; width:6px; margin-right:0.07em">

rev=2.5.3" alt="" style="height:14px; width:6px; margin-right:0.01em">

rev=2.5.3" width="7" height="21" alt="" style="height:21px; width:7px; vertical-align:-5px; margin-right:0.05em">

rev=2.5.3" width="6" height="21" alt="" style="height:21px; width:6px; vertical-align:-5px; margin-right:0.09em">

Where b is the base of the logarithm used. Common values of b are 2, Euler's numbere, and 10. The unit of entropy is
bit for b = 2, nat for b = e, and
dit (or digit) for b = 10 respectively.

In the case of P(xi) = 0 for some i, the value of the corresponding summand 0 logb(0) is taken to be a well-known limit:

rev=2.5.3" alt="" style="height:13px; width:10px; vertical-align:-4px; margin-right:0.01em">

rev=2.5.3" alt="" style="height:14px; width:9px; margin-right:0.04em">

rev=2.5.3" width="15" height="5" alt="" style="height:5px; width:15px; vertical-align:3px; margin-right:0.05em">

rev=2.5.3" width="6" height="14" alt="" style="height:14px; width:6px; margin-right:0.01em">

rev=2.5.3" alt="" style="height:9px; width:7px; margin-right:0.04em">

rev=2.5.3" alt="" style="height:13px; width:10px; vertical-align:-4px; margin-right:0.01em">

rev=2.5.3" alt="" style="height:1px; width:1px; margin-right:0.24em">

rev=2.5.3" alt="" style="height:9px; width:6px; margin-right:0em">

rev=2.5.3" width="7" height="21" alt="" style="height:21px; width:7px; vertical-align:-5px; margin-right:0.05em">

rev=2.5.3" alt="" style="height:13px; width:11px; vertical-align:-4px; margin-left:-0.03em; margin-right:0em">

Your task is to calculate the entropy of a finite sample with N values.

Input

There are multiple test cases. The first line of input contains an integer
T
indicating the number of test cases. For each test case:

The first line contains an integer N (1 <= N <= 100) and a stringS. The string
S is one of "bit", "nat" or "dit", indicating the unit of entropy.

In the next line, there are N non-negative integers P1,P2, ..,
PN. Pi means the probability of thei-th value in percentage and the sum of
Pi will be 100.

Output

For each test case, output the entropy in the corresponding unit.

Any solution with a relative or absolute error of at most 10-8 will be accepted.

Sample Input

3
3 bit
25 25 50
7 nat
1 2 4 8 16 32 37
10 dit
10 10 10 10 10 10 10 10 10 10

Sample Output

1.500000000000
1.480810832465
1.000000000000
题意:给你N个数和一个字符串str。

若str为bit。则计算sigma( - log2a[i])(1 <= i <= N);            str为nat时,计算sigma(- loga[i])(1 <= i <= N);           str为dit时,计算sigma(- log10a[i])(1 <= i <= N)。


AC代码:
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <vector>
#include <queue>
#include <stack>
#include <algorithm>
#define LL long long
#define INF 0x3f3f3f3f
#define MAXN 1000
#define MAXM 100000
using namespace std;
int main()
{
int t;
int N;
char str[10];
double a[110];
scanf("%d", &t);
while(t--)
{
scanf("%d%s", &N, str);
double sum = 0;
for(int i = 0; i < N; i++)
scanf("%lf", &a[i]), sum += a[i];
double ans = 0;
if(strcmp(str, "bit") == 0)
{
for(int i = 0; i < N; i++)
{
if(a[i] == 0) continue;
ans += -log2(a[i] / sum) * (a[i] / sum);
}
}
else if(strcmp(str, "nat") == 0)
{
for(int i = 0; i < N; i++)
{
if(a[i] == 0) continue;
ans += -log(a[i] / sum) * (a[i] / sum);
}
}
else
{
for(int i = 0; i < N; i++)
{
if(a[i] == 0) continue;
ans += -log10(a[i] / sum) * (a[i] / sum);
}
}
printf("%.12lf\n", ans);
}
return 0;
}

zoj 3827 Information Entropy 【水题】的更多相关文章

  1. ZOJ 3827 Information Entropy 水题

    Information Entropy Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.zju.edu.cn/onlinejudge/sh ...

  2. ZOJ 3827 Information Entropy 水

    水 Information Entropy Time Limit: 2 Seconds      Memory Limit: 65536 KB      Special Judge Informati ...

  3. ZOJ 3827 Information Entropy (2014牡丹江区域赛)

    题目链接:ZOJ 3827 Information Entropy 依据题目的公式算吧,那个极限是0 AC代码: #include <stdio.h> #include <strin ...

  4. 2014 牡丹江现场赛 i题 (zoj 3827 Information Entropy)

    I - Information Entropy Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%lld & %l ...

  5. ZOJ 3827 Information Entropy(数学题 牡丹江现场赛)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do? problemId=5381 Information Theory is one of t ...

  6. ZOJ3827 ACM-ICPC 2014 亚洲区域赛的比赛现场牡丹江I称号 Information Entropy 水的问题

    Information Entropy Time Limit: 2 Seconds      Memory Limit: 131072 KB      Special Judge Informatio ...

  7. [ACM] ZOJ 3819 Average Score (水题)

    Average Score Time Limit: 2 Seconds      Memory Limit: 65536 KB Bob is a freshman in Marjar Universi ...

  8. ZOJ 2679 Old Bill ||ZOJ 2952 Find All M^N Please 两题水题

    2679:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1679 2952:http://acm.zju.edu.cn/onli ...

  9. 2014ACM/ICPC亚洲区域赛牡丹江站现场赛-I ( ZOJ 3827 ) Information Entropy

    Information Entropy Time Limit: 2 Seconds      Memory Limit: 65536 KB      Special Judge Information ...

随机推荐

  1. easyui常用

    清空列表选中项 //easyui datagrid 清空勾选 $('#List').datagrid('clearSelections'); 扩展修改查询方法 function QueryList() ...

  2. cl编译C文件的环境变量修改

    添 加环境 变量INCLUDEC:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt;C:\Program Files (x8 ...

  3. (1)Java Spring

    Spring 4种关键策略: 基于POJO的轻量级和最小侵入编程 通过依赖注入和面向接口实现松耦合 基于切面和惯例进行声明式编程 通过切面和模板减少样板式代码

  4. CONTINUE...?【构造/分析】

    CONTINUE...? Time Limit: 1 Second Memory Limit: 65536 KB Special Judge DreamGrid has classmates numb ...

  5. 解决虚拟机安装tomcat主机访问不到

    在wmware中安装linux后安装好数据库,JDK及tomcat后启动服务,虚拟机中可以访问,但是主机却无法访问,但是同时主机和虚拟机之间可以ping的通.解决方法是关闭虚拟机中的防火墙服务.桌面- ...

  6. 3.非标准的NDEF格式数据解析--IsoDep

    1.使用目的:正常开发是针对NDEF格式数据进行开发,但实际情况并非如此,以厦门公交卡为例,厦门公交卡保存的是非NDEF格式数据.其类型是IsoDep类型. 2.非标准的NDEF格式数据流程:当厦门公 ...

  7. 用kermit通过串口往nandflash任意地址里烧写任何文件!

    1.安装kermit #apt-get install ckermit 2.使用kermit之前,在用户宿主目录下(/home/用户名/)创建一个名为.kermrc的配置文件,内容如下 : set l ...

  8. SQL Server判断某个字段是否包含中文/英文字符/数字

    原文:SQL Server判断某个字段是否包含中文/英文字符/数字 因最近在清理系统中的脏数据,需要查询某个字段是否包含中文/英文字符/数字的数据, 比较简单,仅以此篇博客做一个简单总结,方便以后查阅 ...

  9. Chrome的开发必备小技巧

    谷歌Chrome,是当前最流行且被众多web开发人员使用的浏览器.最快六周就更新发布一次以及伴随着它不断强大的开发组件,使得Chrome成为你必备的开发工具.例如,在线编辑CSS,console以及d ...

  10. 利用jquery.form.js实现将form提交转为ajax方式提交的方法(带上传的表单提交)

    提供一种方法就是利用jquery.form.js. (1)这个框架集合form提交.验证.上传的功能. 核心方法 -- ajaxForm() 和 ajaxSubmit() $('#myForm').a ...