算法学习----《编程珠玑第15章》默默地整理有关字符串的算法--->如何处理单词

《编程珠玑》第15章

编程珠玑第15章是讲关于字符串的一系列问题和基本常见的算法的。
在最近的编程过程当中经常要和字符串打交道,最近在做的是Web服务器。
可昨天在折腾一个github的GUI软件的时候,不小心把已经写好的代码都删除了,这是我们都不想看到的。T。T|||

那个github的GUI软件叫GitKraken,界面很酷炫,网上有说这个软件有BUG的,目前没碰到。因为对git的要求不高,基本是提交日常书写的代码和日常的练习项目,所以一个GUI就足够了。

有关字符串的算法

先上变成主机里面的几个代码,这些代码都是伪代码,类似于C/C++;

#include <iostream>
#include <set>
using namespace std;
int main(void)
{
    set<string> S;
    set <string> :: iterator j;
    string t;
    while(cin >> t)
          S.insert(t);
    for(j = S.begin();j != S.end();++j){
        cout << *j << " ";
    }
    cout << endl;

    return 0;
}
这段代码是循环读取输入的单词,并且以此将其插入到集合S中。并以此将S中的单词输出来。
关于这个while循环来讲,我们通过EOF来退出循环。在Linux中,我们一般使用Ctrl+D来实现EOF。

关于SET,很有意思的事情是,单词在其中是按字典序排序的,STL库还是得多用啊,不试不知道。

#include <iostream>
#include <map>
using namespace std;
int main(void)
{
    map<string,int> M;
    map<string,int> :: iterator j;
    string t;
    while(cin >> t)
          M[t]++;
    for(j = M.begin();j != M.end();++j){
        cout << j -> first << " ";
        cout << j -> second;
    }
    cout << endl;

    return 0;
}
//这部分代码利用map容器实现对每个单词出现的个数进行计数。
//因为map的迭代器是一个pair类型,存在键值对。

因为map容器本身是将数据建立起映射关系,底层实现是基于红黑树RB-TREE。

自己造的轮子才滚得爽T~T

编程珠玑第十五章page177提到为了减少map处理时间,可以自己建立散列表。即hash表。
总所周知,hash表存在hash冲突,因为说不定两个不同的单词可能会散列到同一个位置。这个时候,我们将我们的每一个节点设计成链表节点,这样,在同一个散列位置,可以通过链表将散列到同一位置的数据连接起来。
stringHanlde_v1/string1.cpp(代码戳我的Github!)

在书中的总结是自己定制的散列表比C++STL的映射快一个数量级。我不会做测试,所以。。。。。有谁会做的写在评论里啊。  ̄O ̄)ノ

以上的代码实现的总的来说就是对单词的统计,比如说你有一本书的文件,你可以通过读取文件来进行对文中的字符的统计。当然,我们一般认为两个空格之间为一个单词,而且这只限于英文。中文的单词判定自我认为首先需要一个不断更新的词库作为基础才可以。

书中小结

平衡搜索树将字符串看作不可分割的对象进行操作,STL的set和map中大部分实现都使用这种结构。平衡搜索树中的元素始终处于有序状态,从而很容易执行寻找前驱节点或者顺序输出元素之类的操作。
散列则需要深入字符串的内部,计算散列函数并将关键字分散到一个较大的表中。
散列方法的平均速度很快,但是缺乏平衡树提供的最欢情况性能保证,也不能支持其他涉及顺序的操作。
这也很容易通过实现代码来体会。

一天都是满课,在课上老师讲的听不懂,嘈杂的教室也看不下去,今天跌跌撞撞认真的看完了一部分书,并且能够总结整理下来,这是一种认知转换为实践的过程,还是不错的。有机会逛一下我的github@starboom。啥也没有,正在种地。


英俊的尔康.JPG
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容