c++实现之 -- 汉语词语的简单处理

好了,我们现在已经会怎样读入了,然后就是研究一下如何存储等一些细节上的的问题了。

首先,比较函数是不能传入char*的地址的,但是可以接受一个string类。

然而,如果是两个比较长的string类,要进行比较的话,时间复杂度会上升至O(min(length)),非常不合算。于是采用双哈希的办法,用h1、h2两个哈希值来表示特定字符串,冲突概率可以下降至基本忽略不计。不难发现双哈希的单词比较复杂度是O(2)的,大大减少了时间复杂度。

然后,就是采用什么容器进行存储。一般有两种:(不妨设哈希的使用的素数分别为p1和p2)

第一种是二维数组,第一维表示h1,第二维表示h2。为了节省空间第二维用vector进行存储,于是插入和查询的时间复杂度都是O(log(p2))。

第二种嘛,直接丢到map里,插入、查询的时间复杂度都是O(log(cnt)) (其中cnt表示不同单词个数)

于是我直接用了第二种,因为实现起来简单,而且复杂度基本相同。(因为vector常数大)

 1 #include <cstdio>
 2 #include <iostream>
 3 #include <string>
 4 #include <cstring>
 5 #include <algorithm>
 6 #include <map>
 7
 8 #define TF second
 9 using namespace std;
10 const int mod1 = 19997;
11 const int mod2 = 30001;
12 const int bin = 1 << 9;
13
14 struct Word {
15     string st;
16     int h1, h2;
17     inline bool operator < (const Word &x) const {
18         return h1 == x.h1 ? h2 < x.h2 : h1 < x.h1;
19     }
20
21     #define x (int) st[i]
22     #define Weight 3001
23     inline void calc_hash() {
24         int len = st.length(), tmp, i;
25         for (i = tmp = 0; i < len; ++i)
26             ((tmp *= Weight) += (x < 0 ? x + bin : x)) %= mod1;
27         h1 = tmp;
28         for (i = tmp = 0; i < len; ++i)
29             ((tmp *= Weight) += (x < 0 ? x + bin : x)) %= mod2;
30         h2 = tmp;
31     }
32     #undef x
33     #undef Weight
34 };
35 typedef map <string, int> map_for_words;
36 typedef map_for_words :: iterator iter_for_words;
37
38 map_for_words data;
39 Word w;
40
41 int main() {
42     freopen("test.in", "r", stdin);
43     ios::sync_with_stdio(false);
44     while (cin >> w.st) {
45         w.calc_hash();
46         data[w.st] += 1;
47     }
48     iter_for_words it;
49     for (it = data.begin(); it != data.end(); ++it)
50         cout << it -> first << ‘ ‘ << it -> TF << endl;
51     return 0;
52 }

效果(貌似还可以的说):

输入:

输出:

(不要问我这界面怎么那么搞笑。。。这是终端的说)

时间: 2024-08-24 13:49:29

c++实现之 -- 汉语词语的简单处理的相关文章

汉语-词语-业障:百科

ylbtech-汉语-词语-业障:百科 1.返回顶部 1. 业障,是一个汉语词语,拼音是yè zhàng,佛教语,一指旧时家长骂不肖子弟的话,二指妨碍修行正果的罪业,比喻人的罪孽.詈词.它指责他人他物为恶果.祸患的根源.梵语karma^varana.出自南朝梁慧皎 <高僧传·译经中·昙无谶>:进更思惟:“但是我业障未消耳.” 中文名:业障 拼    音:yè zhàng 解    释:佛教指妨碍修行的罪恶 梵    语:karma^varana 解    释:长辈骂不肖子弟的话 解    释:

汉语-词语:心态

ylbtech-汉语-词语:心态 心态是一个汉语词语,读音为xīn tài,通俗来讲就是心理状态. 心理过程是不断变化着的.暂时性的,个性心理特征是稳固的,而心理状态则是介于二者之间的,既有暂时性,又有稳固性,是心理过程与个性心理特征统一的表现.一个健全的心态比百种智慧更有力量. 1.返回顶部 1. 中文名:心态 外文名:mentality; psychology 拼    音: xīntài 词    性:名词 释    义:心理状态 种    类:心态有好也有坏   心态与目标:目标不同,所

汉语-词语:想法

ylbtech-汉语-词语:想法 想法,是一个汉语词语,拼音是xiǎng fǎ,是指考虑办法,设法:意见,看法:有时又表示解决问题的具体办法.语出<二十年目睹之怪现状>第七六回. 1.返回顶部 1. 中文名:想法 解    释:考虑办法,设法 语    出:<二十年目睹之怪现状> 拼    音:xiǎng fǎ 日本語:了見 りょうけん 目录 1 词语概念 ? 基本信息 ? 基本解释 ? 引证解释 2 图书 ? 基本信息 ? 编辑推荐 ? 目录 ? 作者简介 2. 2.返回顶部 1

汉语-词语:博爱

ylbtech-汉语-词语:博爱 博爱是一个汉语词语,拼音是 bó ài,意思是广泛地关爱所有人. 出自<说苑·君道篇>载师旷言云:“人君之道,清净无为,务在博爱,趋在任贤,广开耳目,以察万方,不固溺于流欲,不拘系于左右,廓然远见,踔然独立,屡省考绩,以临臣下.此人君之操也.”三国 魏 曹植 <当欲游南山行>:“长者能博爱,天下寄其身.” 宋 欧阳修 <乞出表>之二:“臣闻愚诚虽微而苟至,可以动天:大仁博爱而无私,未尝违物.” <孝经·三才章>:“先王见教之

心理学-汉语-词语:意志力

ylbtech-心理学-汉语-词语:意志力 意志力是心理学中的一个概念.是指一个人自觉地确定目的,并根据目的来支配.调节自己的行动,克服各种困难,从而实现目的的品质. 罗伊斯这样说:“从某种意义上说,意志力通常是指我们全部的精神生活,而正是这种精神生活在引导着我们行为的方方面面.” 当人们善于运用这一有益的力量时,就会产生决心.而人有决心就说明意志力在起作用.人的心理功能或身体器官对决心的服从,正说明了意志力存在的巨大力量. 1.返回顶部 1. 中文名:意志力 外文名:Willpower 类  

汉语-词语-感触:百科

ylbtech-汉语-词语-感触:百科 感触是一个汉语词语,拼音是gǎn chù,意思是指接触外界事物而引起的思想情绪.出自北齐颜之推<颜氏家训·风操>:“<礼>云:‘见似目瞿,闻名心瞿.’有所感触,恻怆心眼.” 宋罗大经<鹤林玉露>卷十:“盖兴者,因物感触,言在於此而意於彼.” 1.返回顶部 1. 感触是一个汉语词语,拼音是gǎn chù,意思是指接触外界事物而引起的思想情绪. [1]  出自北齐颜之推<颜氏家训·风操>:“<礼>云:‘见似目瞿

汉语-词语-清净:百科

ylbtech-汉语-词语-清净:百科 1.返回顶部 1. 1.心境洁净,不受外扰. 2.安定,不纷扰. 3.清洁纯净. 4.指妇女操守贞洁. 5.简明不繁. 6.佛教语.指远离恶行与烦恼. 7.道教等亦用之. 中文名:清净 外文名:Clean 拼    音:qīng jìng 词    性:形容词 近义词:宁静 反义词:喧闹 目录 1 汉语词语 ? 基本解释 ? 引证解释 2 佛学含义 汉语词语 基本解释 [clean,quiet]∶心境洁净,不受外扰. 清净守节. [peace and qu

汉语-词语-中道:百科

ylbtech-汉语-词语-中道:百科 1.返回顶部 1. 中道,汉语词语,发音是zhōngdào.常用于文言文.汉语释义是中途,半道:中庸之道:一种哲理:和谐中道:佛教中道. 中文名:中道   外文名:middle way 拼    音:zhōng dào 注    音:ㄓㄨㄙ ㄉㄠˋ 目录 1 解释 2 出处 解释 [halfway, middle way]:半路:中途. 中道而返. 中道还兄门.——<玉台新咏·古诗为焦仲卿妻作> 而中道崩殂.——诸葛亮<出师表> 若中道而归.

汉语-词语-脱离:百科

ylbtech-汉语-词语-脱离:百科 1.返回顶部 1. 脱离,汉语词汇. 注音:tuō lí 释义:离开:断绝. 中文名:脱离 解    释:离开:断绝. 拼    音:tuōlí 构    成:并列式:脱+离 目录 1 汉语词语 ? 基本信息 ? 引证详解 2 同名歌曲 汉语词语 基本信息 释义:离开(某种环境或情况):断绝(某种关系). 脱离 tuōlí 1.离开 例:脱离危险 2. 断绝 例:脱离人民群众 引证详解 离开:断绝. <醒世恒言·灌园叟晚逢仙女>:“‘汝欲脱离苦厄吗?’上