算法与数据结构
文章平均质量分 60
wakeupwakeup
这个作者很懒,什么都没留下…
展开
-
快慢指针在链表的应用
快慢指针中的快慢指的是移动的步长,即每次向前移动速度的快慢。例如可以让快指针每次沿链表向前移动2,慢指针每次向前移动1次。1、判断单链表是否为循环链表:算法: 让快慢指针从链表头开始遍历,快指针向前移动两个位置,慢指针向前移动一个位置;如果快指针到达NULL,说明链表以NULL为结尾,不是循环链表。如果快指针追上慢指针,则表示出现了循环。 fast=slow=he转载 2016-01-14 09:10:22 · 328 阅读 · 0 评论 -
memset的效率问题
今天在CSDN上有人聊memset的效率。凑巧,我这几天也看了看glibc的几个函数的实现。下面就扯一扯DIR/string/memset.c其中DIR是解压glibc后的路径。我下载的是glibc-2.11。//代码经过astyle格式化void *memset (dstpp, c, len)void *dstpp;int c;size_t len; //前几行等同于: voi转载 2016-01-14 09:10:25 · 506 阅读 · 0 评论 -
胜者树与败者树的区别,外部排序
胜者树与败者树的叶子节点记录的都是数据,胜者树中间节点记录的是胜者对应的标号,而败者树中间节点记录的是败者对应的标号。同时败者树需要一个额外节点来记录最终胜者。 显然败者树的根节点对应的是所有叶子节点的第二胜者,而额外节点对应的是最终胜者。 同时败者树的更新只需将子节点与父节点比较,而胜者树的更新需要与父节点和子节点比较。原创 2016-01-14 09:10:56 · 1408 阅读 · 0 评论 -
多重背包O(N*V)算法详解(使…
多重背包问题:有N种物品和容量为V的背包,若第i种物品,容量为v[i],价值为w[i],共有n[i]件。怎样装才能使背包内的物品总价值最大? 网上关于“多重背包”的资料倒是不少,但是关于怎么实现O(N*V)算法的资料,真得好少呀,关于“单调队列”那部分算法,又没说明得很清楚,看了几遍没看懂原理,只好自己动脑去想怎么实现O(N*V)算法。 若用F[i][j]表示对容量为j的背包,处理完前i转载 2016-01-14 09:11:13 · 387 阅读 · 0 评论 -
[原创]poj 1742 多重背包 单调队列
这是一个背包问题。Ci = 1为01背包Ci * Ai >= m 为完全背包其余的为多重背包。对于多重背包而言,由于Ci而选择用单调队列优化的话, 时间复杂度为O(VN)。刚开始敲了个通用的单调队列,尼玛TLE给跪了。虽说时间复杂度为O(VN), 但是也要看为多少倍VN。如果为10VN的话,那其实跟指数优化没什么区别,估计会超时。所以重点就是单调队列要写得尽量简单,减少单调队原创 2016-01-14 09:11:15 · 229 阅读 · 0 评论 -
求无向连通图的最小生成树算…
最小生成树是图论里很重要的部分。但是由于它属于图论所以NOIP基本不考,对于NOI又太基础,所以竞赛中出现的几率比较小,即使要考也不可能考裸的生成树算法==最小生成树就Prim和Kruskal两个算法,又没有多大的优化余地,所以学习起来还是很简单的。 一.Prim算法 1.算法思想 对于图G=(V,E),用Prim算法求最小生成转载 2016-01-14 09:11:18 · 9685 阅读 · 1 评论