情緒的類型和強(qiáng)度如何影響謠言的傳播(cs si):基于rdeu理論和進(jìn)化博弈理論,我們通過考慮情緒來構(gòu)建謠言傳播的進(jìn)化博弈模型,以網(wǎng)民和政府為核心主體。通過matlab模擬和揭示了決策者的情緒類型和強(qiáng)度對(duì)謠言傳播的影響機(jī)制。
結(jié)果表明,在謠言傳播中,決策者的策略選擇受自身和他人情緒偏好和強(qiáng)度的影響。悲觀主義比樂觀主義對(duì)進(jìn)化博弈的穩(wěn)定性有更大的影響,政府的情緒類型比網(wǎng)民對(duì)博弈結(jié)果更敏感,情感強(qiáng)度與進(jìn)化速度成正比。
更重要的是,我們發(fā)現(xiàn)了一些重要的情緒閾值,可以用來預(yù)測(cè)網(wǎng)民的行為,幫助政府獲得關(guān)鍵時(shí)間來處理謠言和避免塔西佗陷阱危機(jī)。
此外,我們將模擬結(jié)果總結(jié)為五種類型:風(fēng)險(xiǎn),機(jī)會(huì),理想,安全和反對(duì),希望這項(xiàng)工作有益于政府的公共治理。
governments public governance.原文作者:yanli li, jing ma, fanshu fang原文地址:https:arxiv.orgabs2012.08861翻譯人:
區(qū)塊鏈:慈善腐敗的克星:根據(jù)慈善援助基金會(huì)發(fā)布的一份報(bào)告(幣文庫全文下載),區(qū)塊鏈技術(shù)最終可用于執(zhí)行很多傳統(tǒng)監(jiān)管機(jī)構(gòu)的功能。去年,美國慈善機(jī)構(gòu)所帶來的收入超過了2萬億美元,其中有3730億美元是來自慈善捐款。
區(qū)塊鏈技術(shù)的好處透明度:賬本是公開的,任何用戶都可以查閱。任何基于它的系統(tǒng)都是完全透明的;降低交易成本:賬本是由用戶負(fù)責(zé)維護(hù)并擁有的,所以區(qū)塊鏈賬本不需要第三方,因此它降低了相關(guān)成本。
在三月份時(shí),bitgive揭示了肯尼亞西部一所女子學(xué)校的水井項(xiàng)目,之后該項(xiàng)目從比特幣社區(qū)成員那籌集到了11000美元的捐款。
在任何給定的時(shí)間內(nèi),系統(tǒng)中的任何一位用戶都可以準(zhǔn)確看到誰擁有了什么,以及誰給予了他們什么。
其消除了用戶對(duì)第三方的需求(支付系統(tǒng)、組織和政府),這意味著2.0版的慈善機(jī)構(gòu)(你需要的)和非營利機(jī)構(gòu)將不再依靠其他機(jī)構(gòu),如銀行、律師和政府實(shí)體。
大會(huì)活動(dòng)|定了!首屆騰訊全球數(shù)字生態(tài)大會(huì)5月落地昆明:640 (1).gif3月29日,騰訊與云南省在北京釣魚臺(tái)國賓館召開聯(lián)合發(fā)布會(huì),共同宣布2019年騰訊全球數(shù)字生態(tài)大會(huì)將于5月21日至23日在昆明滇池國際會(huì)展中心舉辦。
作為騰訊戰(zhàn)略升級(jí)后打造的全新品牌盛會(huì),騰訊全球數(shù)字生態(tài)大會(huì)對(duì)“騰訊全球合作伙伴大會(huì)”、“騰訊云+未來峰會(huì)”和“互聯(lián)網(wǎng)+數(shù)字經(jīng)濟(jì)峰會(huì)”三大峰會(huì)進(jìn)行有效整合。
騰訊云副總裁曾佳欣介紹道,本次大會(huì)將由主峰會(huì)、分論壇、數(shù)字生態(tài)專題展會(huì)三大版塊構(gòu)成:5月21日舉辦的主峰會(huì)將聚焦數(shù)字經(jīng)濟(jì)與實(shí)體經(jīng)濟(jì)融合發(fā)展趨勢(shì),騰訊也將公布最新戰(zhàn)略合作及開放政策、科技與文化領(lǐng)域重要產(chǎn)品
,以及最新產(chǎn)業(yè)合作計(jì)劃;大會(huì)近30場分論壇將涉及智慧政務(wù)、智慧金融、智慧工業(yè)、智慧車聯(lián)、智慧醫(yī)療、智慧教育、新文創(chuàng)等20多條業(yè)務(wù)線;數(shù)字生態(tài)專題展會(huì)則將重磅呈現(xiàn)全球合作伙伴及騰訊最新科技產(chǎn)品與智慧產(chǎn)業(yè)成果
;以昆明為始,騰訊全球數(shù)字生態(tài)大會(huì)后續(xù)還將結(jié)合地區(qū)產(chǎn)業(yè)及經(jīng)濟(jì)發(fā)展特性,在全國多個(gè)城市落地。
英飛凌擬收購st半導(dǎo)體,或?qū)⒁卉S成為世界級(jí)半導(dǎo)體巨頭 | 熱點(diǎn):收購st后,英飛凌年銷售額將達(dá)到175億美元。根據(jù)歐洲媒體的最新消息,于德國慕尼黑成立的英飛凌擬收購st半導(dǎo)體公司。而本次收購如果成功的話,英飛凌將一躍成為世界級(jí)的半導(dǎo)體巨頭。
而英飛凌想要收購的st半導(dǎo)體公司是什么來頭呢?據(jù)了解,st半導(dǎo)體又稱為意法半導(dǎo)體集團(tuán),成立于1988年6月,是有意大利的sgs微電子公司和法國的thomson半導(dǎo)體公司合并而成。
目前,該公司是世界上最大的半導(dǎo)體公司之一。2017意法半導(dǎo)體集團(tuán)全年凈收入83.5億美元,全年凈利潤則為8.02億美元。?英飛凌為了本次收購事宜可謂付出了不少努力。
因?yàn)?,法國政府是st半導(dǎo)體公司最大的股東之一,其一直反對(duì)st半導(dǎo)體公司被英飛凌收購。法國政府更希望st半導(dǎo)體公司去提升自身的業(yè)務(wù)規(guī)模,而非依靠收購并的方式進(jìn)行資本的擴(kuò)張。
而兩家合并成功的話,收購st后的英飛凌年銷售額將達(dá)到175億美元。同時(shí),在去年全球半導(dǎo)體供貨商排行榜中,英飛凌位于第四,st半導(dǎo)體公司位于第五。
蘭考縣政府政務(wù)OA系統(tǒng):江油市政府公文系統(tǒng)中bloomfilter 的實(shí)現(xiàn)公系統(tǒng)功能,特別是讓絕大多數(shù)人都能夠熟練的應(yīng)用,是oa實(shí)施和推廣效果好壞的體現(xiàn)1、標(biāo)準(zhǔn)功能分類進(jìn)行推廣使用
OA辦公系統(tǒng)通用功能,可以分成流程審批、個(gè)人辦公、文件資料、信息發(fā)布、行政人事、即時(shí)通訊、公文管理、在線交流、辦公用品管理、車輛管理等功能,也可以根據(jù)用戶的需求,定制新的流程和模塊。個(gè)人辦公、文件資料、信息發(fā)布、即時(shí)通訊等一般無需太多調(diào)整,這些功能只需經(jīng)過簡單的培訓(xùn)即可使用。2、需要調(diào)整功能的推廣使用 流程審批類以及某些功能模塊,一般需要根據(jù)用戶單位的實(shí)際組織架構(gòu)和權(quán)限進(jìn)行調(diào)整,這些功能模塊在正式使用之前,可以由
電子政務(wù)oa系統(tǒng)公司和最終用戶共同規(guī)劃、定義、調(diào)整,并反復(fù)測(cè)試,在流程和功能成型后即可培訓(xùn)并推廣使用。3、定制開發(fā)功能模塊的推廣使用?? ? ? 這類功能一般在標(biāo)準(zhǔn)的
OA辦公系統(tǒng)功能中沒布隆過濾器
布隆過濾器在之前的從 hashtable 到 bloomfilter 講過部分關(guān)于他的計(jì)算以及一些參數(shù),今天就簡單實(shí)現(xiàn)一個(gè) bloomfilter ,當(dāng)然實(shí)現(xiàn)過程也參照了別人的代碼和結(jié)構(gòu)設(shè)計(jì),讓我自己從頭憑空創(chuàng)造一個(gè)也不可能,有些類同的情況敬請(qǐng)諒解。
代碼實(shí)現(xiàn)
在真正實(shí)現(xiàn)之前,我們先來看看我們需要布隆過濾器實(shí)現(xiàn)的一些功能,首先我們使用的時(shí)候就是初始化一個(gè) bloomfilter 這樣的數(shù)據(jù)結(jié)構(gòu)體,然后向其中插入數(shù)據(jù)來判斷我們做的到底插入數(shù)據(jù)之前是否插入過。最后結(jié)束的時(shí)候?qū)⑵鋭h除內(nèi)存釋放,還有一個(gè)可能就是我們想要對(duì)當(dāng)前布隆過濾器狀態(tài)進(jìn)行保存,那么就需要持久化,持久化必然包括兩個(gè)方面那就是文件加載和文件保存。
以上就是我們的一些使用的場景,基于這樣的場景,我們要去設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)體,那么現(xiàn)在上代碼。
代碼語言:c
復(fù)制
#define byte_bits (8)
typedef struct
{
uint8_t cinitflag; // 初始化標(biāo)志,為0時(shí)的第一次add()會(huì)對(duì)stfilter[]做初始化
uint8_t cresv[3];
uint32_t dwmaxitems; // n - bloomfilter中最大元素個(gè)數(shù) (輸入量)
double dprobfalse; // p - 假陽概率(誤判率) (輸入量,比如萬分之一:0.00001)
uint32_t dwfilterbits; // m = ; - bloomfilter的比特?cái)?shù)
uint32_t dwhashfuncs; // k = round(log(2.0) * m / n); - 哈希函數(shù)個(gè)數(shù)
uint32_t dwseed; // murmurhash的種子偏移量
uint32_t dwcount; // add()的計(jì)數(shù),超過max_bloomfilter_n則返回失敗
uint32_t dwfiltersize; // dwfilterbits / byte_bits
unsigned char *pstfilter; // bloomfilter存儲(chǔ)指針,使用malloc分配
uint32_t *pdwhashpos; // 存儲(chǔ)上次hash得到的k個(gè)bit位置數(shù)組(由bloom_hash填充)
} basebloomfilter;
上述是一個(gè)較為基礎(chǔ)的布隆過濾器數(shù)據(jù)結(jié)構(gòu),上邊鏈接文章中算了 布隆過濾器中的一些參數(shù)情況,在數(shù)據(jù)結(jié)構(gòu)中進(jìn)行定義,不明白其中意思的可以看點(diǎn)擊上邊的超鏈接看一下最后布隆過濾器的介紹。
因?yàn)槠渲杏行﹨?shù)需要計(jì)算,所以在初始化之前,我們先定義一個(gè)參數(shù)計(jì)算的函數(shù)。
代碼語言:c
復(fù)制
static inline void _calcbloomfilterparam(uint32_t n, double p, uint32_t *pm, uint32_t *pk)
{
/**
* n - 計(jì)劃向布隆過濾器插入的元素個(gè)數(shù)
* p - 假陽率,大概意思就是插入兩個(gè)不同元素產(chǎn)生同樣結(jié)果的概率
* m - 布隆過濾器要使用多少位
* k - 哈希函數(shù)的個(gè)數(shù)
*
//定義四個(gè)參數(shù)之間關(guān)系
* f = ln(2) × ln(1/2) × m / n = (0.6185) ^ (m/n) 具體推導(dǎo)方法可以看上邊鏈接文章
* k = ln(2) × m / n = 0.6931 * m / n
* m = -1*n*ln(p)/0.4804530139182079271955440025
* k = ln(2)*m/n
**/
uint32_t m, k, m2;
// 計(jì)算指定假陽(誤差)概率下需要的比特?cái)?shù)
m =(uint32_t) ceil(-1.0 * n * log(p) / 0.480453);
m = (m - m % 64) + 64; // 8字節(jié)對(duì)齊,布隆過濾器使用的字節(jié)數(shù)需要是 8 字節(jié)整數(shù)倍
// 計(jì)算哈希函數(shù)個(gè)數(shù)
double double_k = (0.69314 * m / n); // ln(2)*m/n // 這里只是為了debug出來看看具體的浮點(diǎn)數(shù)值
k = round(double_k); // 返回x的四舍五入整數(shù)值。
printf("orig_k:%lf, k:%u\n", double_k, k);
*pm = m;
*pk = k;
return;
}
這個(gè)函數(shù)是布隆過濾器的一些指標(biāo)的計(jì)算,他通過使用者傳入的大概需要插入的元素個(gè)數(shù)和能接受的沖突概率計(jì)算出來布隆過濾器需要的字節(jié)數(shù)和應(yīng)該使用的哈希函數(shù)個(gè)數(shù)。
因?yàn)楹罄m(xù)函數(shù)都希望是內(nèi)聯(lián)函數(shù),所以加了 inline, 內(nèi)聯(lián)函數(shù)就是編譯器在編譯的時(shí)候?qū)⒋a直接拷貝到使用的地方,雖然占用內(nèi)存但是性能相對(duì)較好。
然后就是數(shù)據(jù)結(jié)構(gòu)的初始化了。
代碼語言:c
復(fù)制
inline int initbloomfilter(basebloomfilter *pstbloomfilter,
uint32_t dwseed,
uint32_t dwmaxitems, double dprobfalse)
{
//參數(shù)檢查
if (pstbloomfilter == null)
return -1;
if ((dprobfalse <= 0) || (dprobfalse >= 1))
return -2;
// 檢查是否重復(fù)初始化了,釋放內(nèi)存
if (pstbloomfilter->pstfilter != null)
free(pstbloomfilter->pstfilter);
if (pstbloomfilter->pdwhashpos != null)
free(pstbloomfilter->pdwhashpos);
//分配內(nèi)存然后初始化為 0
memset(pstbloomfilter, 0, sizeof(basebloomfilter));
// 初始化內(nèi)存結(jié)構(gòu),并計(jì)算bloomfilter需要的空間
pstbloomfilter->dwmaxitems = dwmaxitems; // 最大存儲(chǔ) 元素
pstbloomfilter->dprobfalse = dprobfalse; // 誤差概率
pstbloomfilter->dwseed = dwseed; // hash種子
// 計(jì)算 m, k 然后存入數(shù)據(jù)結(jié)構(gòu)中
_calcbloomfilterparam(pstbloomfilter->dwmaxitems, pstbloomfilter->dprobfalse,
&pstbloomfilter->dwfilterbits, &pstbloomfilter->dwhashfuncs);
// 分配bloomfilter的存儲(chǔ)空間 這個(gè)是布隆過濾器的大小
pstbloomfilter->dwfiltersize = pstbloomfilter->dwfilterbits / byte_bits;
//分配這樣位的 bits
pstbloomfilter->pstfilter = (unsigned char *) malloc(pstbloomfilter->dwfiltersize);
if (null == pstbloomfilter->pstfilter)
return -100;
// 哈希函數(shù)個(gè)數(shù) * 4 字節(jié) 每四個(gè)字節(jié)保存一個(gè)數(shù)字,表示位數(shù)
pstbloomfilter->pdwhashpos = (uint32_t*) malloc(pstbloomfilter->dwhashfuncs * sizeof(uint32_t));
if (null == pstbloomfilter->pdwhashpos)
return -200;
printf(">>> init bloomfilter(n=%u, p=%e, m=%u, k=%d), malloc() size=%.6fmb, items:bits=1:%0.1lf\n",
pstbloomfilter->dwmaxitems, pstbloomfilter->dprobfalse, pstbloomfilter->dwfilterbits,
pstbloomfilter->dwhashfuncs, (double)pstbloomfilter->dwfiltersize/1024/1024,
pstbloomfilter->dwfilterbits*1.0/pstbloomfilter->dwmaxitems);
// 初始化bloomfilter的內(nèi)存
memset(pstbloomfilter->pstfilter, 0, pstbloomfilter->dwfiltersize);
//表示已經(jīng)初始化
pstbloomfilter->cinitflag = 1;
return 0;
}
上述初始化過程還比較簡單,然后就是添加,不過添加元素之前,我們需要定義一下內(nèi)容,首先就是 hash 函數(shù),我們需要通過哈希函數(shù)來插入,另外我們需要的是 k 個(gè)函數(shù),這么多函數(shù)我們不能一個(gè)定義,畢竟 k 是個(gè)變量,我們需要批量生產(chǎn)這樣的 hash 函數(shù)。
我們這里用的是 64 位的 murmurhash2 (想要查看可能需要科學(xué)上網(wǎng)) ,這里為什么要選用這個(gè)簡單講一下,我們選用哈希函數(shù)幾個(gè)標(biāo)準(zhǔn),首先就是可以批量,這個(gè)通過多次 hash 基本都可以實(shí)現(xiàn),另外就是快速,而這一點(diǎn)就很少了,而這個(gè) murmurhash2 就是一個(gè)快速的非加密的哈希函數(shù)。
算法如下:
代碼語言:c
復(fù)制
uint64_t murmurhash2_x64 ( const void * key, int len, uint32_t seed )
{
const uint64_t m = 0xc6a4a7935bd1e995;
const int r = 47;
uint64_t h = seed ^ (len * m); //seed 的用處
const uint64_t * data = (const uint64_t *)key;
const uint64_t * end = data + (len/8);
while(data != end)
{
uint64_t k = *data++;
k *= m;
k ^= k >> r;
k *= m;
h ^= k;
h *= m;
}
const uint8_t * data2 = (const uint8_t*)data;
switch(len & 7)
{
case 7: h ^= ((uint64_t)data2[6]) << 48;
case 6: h ^= ((uint64_t)data2[5]) << 40;
case 5: h ^= ((uint64_t)data2[4]) << 32;
case 4: h ^= ((uint64_t)data2[3]) << 24;
case 3: h ^= ((uint64_t)data2[2]) << 16;
case 2: h ^= ((uint64_t)data2[1]) << 8;
case 1: h ^= ((uint64_t)data2[0]);
h *= m;
};
h ^= h >> r;
h *= m;
h ^= h >> r;
return h;
}
具體算法可以不那么細(xì)究,只要會(huì)用就行了。
然后就是使用 k 個(gè)哈希函數(shù)生成不同 hash 函數(shù),這里使用了雙重散列封裝。
代碼語言:c
復(fù)制
//將一個(gè) 64 位數(shù)據(jù)數(shù)據(jù)前 32 位和后 32 位進(jìn)行與操作然后得到 32 位數(shù)據(jù).
#define mix_uint64(v) ((uint32_t)((v>>32)^(v)))
void bloom_hash(basebloomfilter *pstbloomfilter, const void * key, int len)
{
//檢查
if (pstbloomfilter == null) return;
int i;
//總共的比特?cái)?shù)
uint32_t dwfilterbits = pstbloomfilter->dwfilterbits;
// 第一次 hash
uint64_t hash1 = murmurhash2_x64(key, len, pstbloomfilter->dwseed);
//將第一次hash結(jié)構(gòu)轉(zhuǎn)換后進(jìn)行得到第二次哈希
uint64_t hash2 = murmurhash2_x64(key, len, mix_uint64(hash1));
for (i = 0; i < (int)pstbloomfilter->dwhashfuncs; i++)
{
pstbloomfilter->pdwhashpos[i] = (hash1 + i*hash2) % dwfilterbits; //通過兩個(gè)hash 計(jì)算k 個(gè)函數(shù)的位數(shù)
}
return;
}
定義好這兩個(gè)函數(shù)后就可以定義添加一個(gè)元素的內(nèi)容了。
代碼語言:c
復(fù)制
#define setbit(filter, n) (filter->pstfilter[n/byte_bits] |= (1 << (n%byte_bits)))
int bloomfilter_add(basebloomfilter *pstbloomfilter, const void * key, int len)
{
//參數(shù)判斷
if ((pstbloomfilter == null) || (key == null) || (len <= 0))
return -1;
int i;
//先判斷有沒有進(jìn)行初始化
if (pstbloomfilter->cinitflag != 1)
{
// reset后沒有初始化,使用前需要memset
memset(pstbloomfilter->pstfilter, 0, pstbloomfilter->dwfiltersize);
pstbloomfilter->cinitflag = 1;
}
// hash key到bloomfilter中, 為了計(jì)算不同hash命中的位置,保存pdwhashpos數(shù)組
bloom_hash(pstbloomfilter, key, len);
for (i = 0; i < (int)pstbloomfilter->dwhashfuncs; i++)
{
//宏定義中見,將得到的余數(shù)的位置為 1
setbit(pstbloomfilter, pstbloomfilter->pdwhashpos[i]);
}
// 增加count數(shù)
pstbloomfilter->dwcount++;
if (pstbloomfilter->dwcount <= pstbloomfilter->dwmaxitems)
return 0;
else
return 1; // 超過n最大值,可能出現(xiàn)準(zhǔn)確率下降等情況
}
然后我們需要一個(gè)檢查元素是否存在的函數(shù)。
代碼語言:c
復(fù)制
#define getbit(filter, n) (filter->pstfilter[n/byte_bits] & (1 << (n%byte_bits)))
int bloomfilter_check(basebloomfilter *pstbloomfilter, const void * key, int len)
{
//參數(shù)檢查
if ((pstbloomfilter == null) || (key == null) || (len <= 0))
return -1;
int i;
bloom_hash(pstbloomfilter, key, len);
for (i = 0; i < (int)pstbloomfilter->dwhashfuncs; i++)
{
// 如果有任意bit不為1,說明key不在bloomfilter中
// 注意: getbit()返回不是0|1,高位可能出現(xiàn)128之類的情況
if (getbit(pstbloomfilter, pstbloomfilter->pdwhashpos[i]) == 0)
return 1;
}
return 0;
}
上述的操作基本完成,然后就是數(shù)據(jù)結(jié)構(gòu)的釋放和重置了。
代碼語言:c
復(fù)制
int freebloomfilter(basebloomfilter *pstbloomfilter)
{
if (pstbloomfilter == null)
return -1;
pstbloomfilter->cinitflag = 0;
pstbloomfilter->dwcount = 0;
free(pstbloomfilter->pstfilter);
pstbloomfilter->pstfilter = null;
free(pstbloomfilter->pdwhashpos);
pstbloomfilter->pdwhashpos = null;
return 0;
}
釋放較為簡單,理解也簡單就不做過多介紹。
然后就是數(shù)據(jù)重置,有兩種實(shí)現(xiàn),一種就是簡單的將 flag 標(biāo)記置為 0 ,當(dāng)重新使用的時(shí)候會(huì)自動(dòng)初始化。
代碼語言:c
復(fù)制
int resetbloomfilter(basebloomfilter *pstbloomfilter)
{
if (pstbloomfilter == null)
return -1;
pstbloomfilter->cinitflag = 0;
pstbloomfilter->dwcount = 0; //元素計(jì)數(shù)
return 0;
}
另外就是真正重置,將每個(gè)位都置為 0
代碼語言:c
復(fù)制
int realresetbloomfilter(basebloomfilter *pstbloomfilter)
{
if (pstbloomfilter == null)
return -1;
memset(pstbloomfilter->pstfilter, 0, pstbloomfilter->dwfiltersize); //將記錄內(nèi)存置為 0;
pstbloomfilter->cinitflag = 1; //此時(shí)已經(jīng)初始化了
pstbloomfilter->dwcount = 0;
return 0;
}
持久化問題
持久化問題本質(zhì)就是我們需要,將一個(gè)數(shù)據(jù)結(jié)構(gòu)的保存成某種統(tǒng)一格式,我們?cè)诰W(wǎng)絡(luò)傳輸中會(huì)將對(duì)象序列化然后傳輸,跟這方面意思雷同,但是 bloomfilter 涉及位數(shù)組的保存,所以講起保存成某種特定結(jié)構(gòu)的二進(jìn)制最好。所以我們可以自己定義一個(gè)文件的數(shù)據(jù)結(jié)構(gòu)保存。
文件頭的數(shù)據(jù)結(jié)構(gòu)定義。
代碼語言:c
復(fù)制
// bloomfilter文件頭部定義
typedef struct
{
uint32_t dwmagiccode; // 文件頭部標(biāo)識(shí),這個(gè)隨便自己定義
uint32_t dwseed;
uint32_t dwcount;
uint32_t dwmaxitems; // n - bloomfilter中最大元素個(gè)數(shù) (輸入量)
double dprobfalse; // p - 假陽概率 (輸入量,比如萬分之一:0.00001)
uint32_t dwfilterbits; // m = ceil((n * log(p)) / log(1.0 / (pow(2.0, log(2.0))))); - bloomfilter的比特?cái)?shù)
uint32_t dwhashfuncs; // k = round(log(2.0) * m / n); - 哈希函數(shù)個(gè)數(shù)
uint32_t dwresv[6];
uint32_t dwfilecrc; // (未使用)整個(gè)文件的校驗(yàn)和
uint32_t dwfiltersize; // 后面filter的buffer長度
} bloomfilehead;
這個(gè)結(jié)構(gòu)很多內(nèi)容跟 bloomfilter 內(nèi)容一致。
持久化函數(shù)如下:
代碼語言:c
復(fù)制
#define __bloomfilter_version__ "1.1"
#define __mgaic_code__ (0x01464c42)
int savebloomfiltertofile(basebloomfilter *pstbloomfilter, char *szfilename)
{
//檢查
if ((pstbloomfilter == null) || (szfilename == null))
return -1;
int iret;
file *pfile;
static bloomfilehead stfileheader = {0};
//二進(jìn)制格式打開文件
pfile = fopen(szfilename, "wb");
if (pfile == null)
{
perror("fopen");
return -11;
}
// 先寫入文件頭
stfileheader.dwmagiccode = __mgaic_code__;
stfileheader.dwseed = pstbloomfilter->dwseed;
stfileheader.dwcount = pstbloomfilter->dwcount;
stfileheader.dwmaxitems = pstbloomfilter->dwmaxitems;
stfileheader.dprobfalse = pstbloomfilter->dprobfalse;
stfileheader.dwfilterbits = pstbloomfilter->dwfilterbits;
stfileheader.dwhashfuncs = pstbloomfilter->dwhashfuncs;
stfileheader.dwfiltersize = pstbloomfilter->dwfiltersize;
//寫入文件頭
iret = fwrite((const void*)&stfileheader, sizeof(stfileheader), 1, pfile);
if (iret != 1)
{
perror("fwrite(head)");
return -21;
}
// 寫入bloomfilter的內(nèi)容
iret = fwrite(pstbloomfilter->pstfilter, 1, pstbloomfilter->dwfiltersize, pfile);
if ((uint32_t)iret != pstbloomfilter->dwfiltersize)
{
perror("fwrite(data)");
return -31;
}
fclose(pfile);
return 0;
}
上述內(nèi)容較為簡單,然后就是加載文件。
代碼語言:c
復(fù)制
int loadbloomfilterfromfile(basebloomfilter *pstbloomfilter, char *szfilename)
{
//判斷參數(shù)
if ((pstbloomfilter == null) || (szfilename == null))
return -1;
int iret;
file *pfile;
static bloomfilehead stfileheader = {0};
if (pstbloomfilter->pstfilter != null)
free(pstbloomfilter->pstfilter);
if (pstbloomfilter->pdwhashpos != null)
free(pstbloomfilter->pdwhashpos);
//打開文件
pfile = fopen(szfilename, "rb");
if (pfile == null)
{
perror("fopen");
return -11;
}
// 讀取并檢查文件頭
iret = fread((void*)&stfileheader, sizeof(stfileheader), 1, pfile);
if (iret != 1)
{
perror("fread(head)");
return -21;
}
if ((stfileheader.dwmagiccode != __mgaic_code__)
|| (stfileheader.dwfilterbits != stfileheader.dwfiltersize*byte_bits))
return -50;
// 初始化傳入的 basebloomfilter 結(jié)構(gòu)
pstbloomfilter->dwmaxitems = stfileheader.dwmaxitems;
pstbloomfilter->dprobfalse = stfileheader.dprobfalse;
pstbloomfilter->dwfilterbits = stfileheader.dwfilterbits;
pstbloomfilter->dwhashfuncs = stfileheader.dwhashfuncs;
pstbloomfilter->dwseed = stfileheader.dwseed;
pstbloomfilter->dwcount = stfileheader.dwcount;
pstbloomfilter->dwfiltersize = stfileheader.dwfiltersize;
pstbloomfilter->pstfilter = (unsigned char *) malloc(pstbloomfilter->dwfiltersize);
if (null == pstbloomfilter->pstfilter)
return -100;
pstbloomfilter->pdwhashpos = (uint32_t*) malloc(pstbloomfilter->dwhashfuncs * sizeof(uint32_t));
if (null == pstbloomfilter->pdwhashpos)
return -200;
// 將后面的data部分讀入 pstfilter
iret = fread((void*)(pstbloomfilter->pstfilter), 1, pstbloomfilter->dwfiltersize, pfile);
if ((uint32_t)iret != pstbloomfilter->dwfiltersize)
{
perror("fread(data)");
return -31;
}
pstbloomfilter->cinitflag = 1;
printf(">>> load bloomfilter(n=%u, p=%f, m=%u, k=%d), malloc() size=%.2fmb\n",
pstbloomfilter->dwmaxitems, pstbloomfilter->dprobfalse, pstbloomfilter->dwfilterbits,
pstbloomfilter->dwhashfuncs, (double)pstbloomfilter->dwfiltersize/1024/1024);
fclose(pfile);
return 0;
}
讀取內(nèi)容也較為簡單,就是先將文件讀入文件頭數(shù)據(jù)結(jié)構(gòu),然后將文件內(nèi)容進(jìn)行讀取賦值。
到此,bloomfilter 的所有實(shí)現(xiàn)都基本已經(jīng)實(shí)現(xiàn)。
2018年中國大數(shù)據(jù)產(chǎn)業(yè)8大趨勢(shì)前瞻:隨著大數(shù)據(jù)產(chǎn)業(yè)政策繼續(xù)加速出臺(tái),政府?dāng)?shù)據(jù)開放共享取得突破,大數(shù)據(jù)建設(shè)不斷深入,創(chuàng)新體系不斷完善。
緊跟政策與戰(zhàn)略布局,九次方大數(shù)據(jù)聯(lián)合60余城市啟動(dòng)“推進(jìn)器”計(jì)劃,扶持大數(shù)據(jù)技術(shù)應(yīng)用公司共同開發(fā)政府?dāng)?shù)據(jù)應(yīng)用??梢灶A(yù)見,到2018年,政府大數(shù)據(jù)應(yīng)用將集體迎來集中爆發(fā)期。
數(shù)據(jù)資產(chǎn)運(yùn)營將成為政府?dāng)?shù)據(jù)價(jià)值釋放主要途徑當(dāng)前,貴陽、廣東、云南、甘肅、福建、內(nèi)蒙古、新疆、青海、湖北、南昌、上海、蘇州、南通、濟(jì)寧、青島、哈爾濱、秦皇島、麗江、濰坊、重慶等60個(gè)地區(qū),包括省、自治區(qū)、
目前,我國各行各業(yè)已積累的豐富數(shù)據(jù)資源,國內(nèi)大數(shù)據(jù)創(chuàng)新創(chuàng)業(yè)企業(yè)積極研發(fā)各領(lǐng)域大數(shù)據(jù)應(yīng)用平臺(tái),同時(shí),從政府出發(fā),整合宏觀調(diào)控、稅收監(jiān)管、商事管理、信用體系建設(shè)、維穩(wěn)、公共安全等數(shù)據(jù)資源,加快數(shù)據(jù)共享開放,
到2018年,將形成大數(shù)據(jù)全產(chǎn)業(yè)鏈生態(tài)應(yīng)用系統(tǒng)的完善與建立。
點(diǎn)滴關(guān)懷成都分公司正式成立,開啟進(jìn)軍華西市場新篇章 | 騰訊saas加速器·學(xué)員動(dòng)態(tài):點(diǎn)滴關(guān)懷的成都小伙伴們收到了來自北京總部和上海、深圳等兄弟公司的祝福,一起在辦公新址舉行了開業(yè)慶典。
點(diǎn)滴關(guān)懷聯(lián)合創(chuàng)始人兼總裁錢毅表示,成都子公司的成立是公司在全國『1+4』戰(zhàn)略布局規(guī)劃中的重要里程實(shí)現(xiàn),也是公司正式開啟并進(jìn)軍華西市場的新篇章。讓我們共同慶祝成都分公司的成立,并歡迎團(tuán)隊(duì)成員加入。
國內(nèi)高端ic芯片破局已刻不容緩 | 專訪中科大副院長、浙大教授:上周一(2017年10月23日),工業(yè)和信息化部人才交流中心(miitec)和比利時(shí)微電子研究中心(imec)聯(lián)合主辦的“名家芯思維”——2017年設(shè)計(jì)方法學(xué)國際研討會(huì)在南京舉辦。
亞太區(qū)產(chǎn)品總監(jiān)謝仲輝先生,圍繞主題“ic設(shè)計(jì)方法學(xué)”的進(jìn)行主題分享,圓桌論壇環(huán)節(jié)探討了ic設(shè)計(jì)技術(shù)革新、發(fā)展趨勢(shì),以及發(fā)展中遇到的一些問題。
故事二:做芯片的不如做項(xiàng)鏈的這個(gè)故事是韓雁教授講的。說有一個(gè)朋友,原來開了一家首飾加工廠,生意不錯(cuò)。后來,在政府的要求和鼓勵(lì)下就辦了個(gè)芯片封裝廠。
芯片市場的惡性循環(huán)浙江大學(xué)教授博導(dǎo)、浙江大學(xué)—美國ucf大學(xué)esd聯(lián)合實(shí)驗(yàn)室常務(wù)副主任韓雁說:“我國高端射頻芯片的開發(fā)面臨困境,這里有一個(gè)顯而易見的惡性循環(huán):因?yàn)楣に嚶浜蟆蛻舻絿饬髌獓鴥?nèi)工藝缺乏流片驗(yàn)證提升
據(jù)我國2014年宣布的一項(xiàng)政策計(jì)劃表明,政府將拿出1000億~1500億美元來推動(dòng)我國在2030年之前從技術(shù)上趕超世界領(lǐng)先企業(yè)。其中,從事各類芯片設(shè)計(jì)、裝配以及封裝的企業(yè)都能夠得到政府扶持。
2021年電腦和硬件行業(yè)發(fā)展研究報(bào)告:鯤鵬計(jì)算產(chǎn)業(yè)基于鯤鵬和昇騰處理器,打造以 arm 架構(gòu)芯片服務(wù)器和整機(jī)為底層的 it 基礎(chǔ)設(shè)施。
其中 intel 至強(qiáng)系列按照性能級(jí)別可分為至強(qiáng)銅牌、銀牌、金牌、鉑金;“凌動(dòng)”系列多用于移動(dòng)設(shè)備,包括手機(jī)、平板電腦等;“quark”結(jié)構(gòu)極小,主要應(yīng)用在智能家居及可穿戴設(shè)備中。
公司憑借高端服務(wù)器、海量存儲(chǔ)、云操作系統(tǒng)、信息安全技術(shù)為客戶打造領(lǐng)先的云計(jì)算基礎(chǔ)架構(gòu)平臺(tái),基于浪潮政務(wù)、企業(yè)、行業(yè)信息化軟件、終端產(chǎn)品和解決方案,全面支撐智慧政府、企業(yè)云、垂直行業(yè)云建設(shè)。。
產(chǎn)品線包括傳統(tǒng)think品牌商用個(gè)人電腦、idea品牌消費(fèi)個(gè)人電腦,以及服務(wù)器、工作站和一系列包括平板電腦與智能手機(jī)在內(nèi)的移動(dòng)互聯(lián)網(wǎng)終端。
電子競技創(chuàng)造全新高端市場隨著國內(nèi)電子競技行業(yè)被市場認(rèn)同,政策文件的陸續(xù)落地,直接刺激了國內(nèi)游戲行業(yè)的快速發(fā)展,同時(shí)電子游戲產(chǎn)業(yè)的技術(shù)升級(jí),對(duì)于電腦配置要求出現(xiàn)明顯提升,電子競技產(chǎn)業(yè)規(guī)模的不斷擴(kuò)張,有利于提高電腦產(chǎn)品的高端化
轉(zhuǎn)載請(qǐng)注明出處,本站網(wǎng)址:
http://www.opentechcloud.com/news_1919.html