获得徽章 0
分享今天写的一道算法题“在web中搜索”
类型:字符串处理+模拟+数据结构应用
难度中等偏上(拼尽全力无法战胜)
思路:用二维的vector将每个句子存储起来,将每个句子拆分为单词,并且用单词作为索引,用map<string,set<pair<int,int>>>类型记录下其所在句子的文章编号和句子编号(倒排索引)。在处理输入输出后就可以根据关键词找到文章,并且输出证据句子。
学习感悟:输入输出和字符串处理需要下一番功夫,学习到了不同数据结构的用法,并且学习了倒排索引的方法
code.juejin.cn
类型:字符串处理+模拟+数据结构应用
难度中等偏上(拼尽全力无法战胜)
思路:用二维的vector将每个句子存储起来,将每个句子拆分为单词,并且用单词作为索引,用map<string,set<pair<int,int>>>类型记录下其所在句子的文章编号和句子编号(倒排索引)。在处理输入输出后就可以根据关键词找到文章,并且输出证据句子。
学习感悟:输入输出和字符串处理需要下一番功夫,学习到了不同数据结构的用法,并且学习了倒排索引的方法
展开
评论
点赞
今天学习了dijkstra算法(最小生成树),同时练习了堆优化和不采用堆优化的代码形式,想分享一些学习经验。
在我看来,dijkstra算法的关键主要有两点:1.找到可达距离最近的点2.更新可达距离。在算法中,我们会选定一个起点,并以起点所能达到的另一个简单初始化到各个点的距离数组:如果有可以到达的边,距离就是边的权重。如果节点之间并没有便可以直达,两点距离就是设定值MAX,点到自身的距离为0。随后我们可以由距离的比较得出下一个距离最短的节点。同时,因为有了新节点的加入,到各个点的最短距离发生变化(例如由1无法到达的3节点,通过新加入的2节点可以到达,distance就由MAX变为distance[1->2]+distance[2->3])此时依次把到各点的距离重新更新。循环往复,我们将依次找到的点连接起来就是最短路径。
此外,我还了解到了此算法的不同表现形式。比如说在堆优化的代码里用邻接表存储边的权值,而不用堆优化则用邻接矩阵存储。同时他们在更新distance时也有差异,堆优化使用优先队列取出最短距离,同时将更新的距离重新返回队列中,而不用堆优化则用choose函数选择最短边。
今天又是被算法大佬打击道心的一天,被bug折磨得不知天地为何物了
code.juejin.cn
在我看来,dijkstra算法的关键主要有两点:1.找到可达距离最近的点2.更新可达距离。在算法中,我们会选定一个起点,并以起点所能达到的另一个简单初始化到各个点的距离数组:如果有可以到达的边,距离就是边的权重。如果节点之间并没有便可以直达,两点距离就是设定值MAX,点到自身的距离为0。随后我们可以由距离的比较得出下一个距离最短的节点。同时,因为有了新节点的加入,到各个点的最短距离发生变化(例如由1无法到达的3节点,通过新加入的2节点可以到达,distance就由MAX变为distance[1->2]+distance[2->3])此时依次把到各点的距离重新更新。循环往复,我们将依次找到的点连接起来就是最短路径。
此外,我还了解到了此算法的不同表现形式。比如说在堆优化的代码里用邻接表存储边的权值,而不用堆优化则用邻接矩阵存储。同时他们在更新distance时也有差异,堆优化使用优先队列取出最短距离,同时将更新的距离重新返回队列中,而不用堆优化则用choose函数选择最短边。
今天又是被算法大佬打击道心的一天,被bug折磨得不知天地为何物了
展开
评论
2
今天又刷了两道题,向竞赛迈出了一步!!!
前几天学了并查集和最小生成树,因此刷了相关的题。
做了一道判断生成树唯一性的题。思路是先对全部边生成最小生成树,记录下使用过的边,再用循环依次舍弃已经遍历过的边,在此基础上重新生成最小生成树,如果两次得来的生成树的权值和相同的话,就可以得出生成树是否唯一。
前几天学了并查集和最小生成树,因此刷了相关的题。
做了一道判断生成树唯一性的题。思路是先对全部边生成最小生成树,记录下使用过的边,再用循环依次舍弃已经遍历过的边,在此基础上重新生成最小生成树,如果两次得来的生成树的权值和相同的话,就可以得出生成树是否唯一。
评论
点赞