国产美女精品自在线拍照片,欧美人与兽,欧美成人高清在线播放,欧美成人精品三级网站,两个人免费完整在线观看直播

蘭考縣政府oa系統(tǒng):江油市政府公文系統(tǒng)中bloomfilter 的實(shí)現(xiàn)

時(shí)間:2024-11-27 13:04:47 信創(chuàng)OA資訊首頁


情緒的類型和強(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
相關(guān)推薦