柚子快報(bào)邀請(qǐng)碼778899分享:01串的熵(藍(lán)橋杯)詳解
柚子快報(bào)邀請(qǐng)碼778899分享:01串的熵(藍(lán)橋杯)詳解
難點(diǎn):
(1)讀懂題意,熵怎么計(jì)算的
?根據(jù)題目給出的例子,也就是S=100,H(S)如何計(jì)算,其實(shí)也就是 -p(1)log2p(1)-p(0)log2p(0)-p(0)log2p(0)=-1*p(1)log2p(1)-2*p(0)log2p(0),其實(shí)我們可以發(fā)現(xiàn)規(guī)律了吧。
h = -o*(o / n) * log2(o / n) - (n - o)*((n - o) / n) * log2((n - o) / n);
o表示0的個(gè)數(shù),n表示總的個(gè)數(shù),字符串不是0就是1,那1的個(gè)數(shù)很明顯不就是n-o嗎
-(o?/?n)?*?log2(o?/?n):表示的是一個(gè)0的信息熵是多少,那我字符串有多少個(gè)0不就是乘以多少就行來(lái)了嗎。
-o*(o?/?n)?*?log2(o?/?n) :表示字符串中出現(xiàn)了幾個(gè)0的,它們的信息熵總和是多少
-?(n?-?o)*((n?-?o)?/?n)?*?log2((n?-?o)?/?n):表示字符串中出現(xiàn)了幾個(gè)1,它們的信息熵總和是多少
(2)怎么判斷浮點(diǎn)數(shù)是否在一個(gè)范圍之內(nèi)
浮點(diǎn)數(shù)的范圍判斷不像整數(shù)一樣,而是要判斷它是否屬于某一范圍,或者二者差的絕對(duì)值屬于某一范圍一般取<0.01。這個(gè)知識(shí)算是積累吧。記住就行了。所以應(yīng)該怎么判斷呢。
h?>?11625907.5?&&?h?11625907.6
(3)枚舉0的個(gè)數(shù),,枚舉的范圍應(yīng)該是什么呢。
最小是0,這個(gè)是肯定的,最大應(yīng)該是多少呢,題目中說(shuō)0的個(gè)數(shù)比1少,也就是說(shuō)0的個(gè)數(shù)應(yīng)該小于總數(shù)的一半。
(4)n不能定義為整型,原因在注釋中有。
代碼如下:
#include
#include
using namespace std;
int main()
{
double h = 0;
//如果n也定義為整型的話,由于o和n都是整數(shù),這將導(dǎo)致整數(shù)除法,結(jié)果將丟失小數(shù)部分。
double n = 23333333;
int o = 0;
for(o = 0;o < n/2;o++)
{
h = -o*(o / n) * log2(o / n) - (n - o)*((n - o) / n) * log2((n - o) / n);
if(h > 11625907.5 && h < 11625907.6)
{
cout< break; } } return 0; } 柚子快報(bào)邀請(qǐng)碼778899分享:01串的熵(藍(lán)橋杯)詳解 推薦鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。