
算法与数据结构
好重好重
这个作者很懒,什么都没留下…
展开
-
基数排序
举一个简单的例子,比如以下数组:{23,43,56,12,767,123,54}先找到数组里最大的一个数,这里是767,三位数,故要进行三次筛选,从个位数开始,依次到百位:第一次排序过后为:{12,23,43,123,54,56,767}//注意尾数相同的数的顺序,比如23和43,必须和之前的相同第二次排序后为:{12,23,123,43,54,56,767}第三次排序原创 2013-09-05 20:00:36 · 859 阅读 · 0 评论 -
堆排序的实现
/*堆用数组实现,起始下标为0,故父节点为n时,左孩子为2*n+1,右孩子为2*n+2*/#include#define LEN 510000#include#includevoid swap(int &a, int& b){ int t = a; a = b; b = t;}//给定一个位置,从这个位置开始调整堆void build(int num[], int pos, i原创 2013-09-04 20:33:22 · 656 阅读 · 0 评论 -
证明辗转相除法
假设:a÷b = k......r证明辗转相除法,即证gcd(a,b) = gcd(b,r),可以分为两个步骤:1、令c = gcd(a,b),证明 c 也是 r 的因数2、令i = b/c, j = r/c,证明 i 和 j 互质第一步易证,令m = a / c, n = b / c,那么r = a - b*k = mc - nc*k = (m-nk)*c,故 c原创 2013-09-11 20:19:21 · 944 阅读 · 0 评论 -
sicily 2010 H number
解释:根据规则构造数字,而不是从头遍历一遍判断,这样可以避免很多不必要的计算。运行效率:0秒,312KB。代码如下,类似广度优先搜索:#include#include#include #includeusing namespace std;//int toInt(char c){ return c-'0'; }//char toChar(int i){ return i原创 2014-12-26 00:43:48 · 943 阅读 · 0 评论 -
sicily 1215 脱离地牢
做Sicily 1215脱离地牢 这一题,一直Restrict function,都快崩溃了。最后发现是内存泄露,就是new出来的东西没有及时delete导致的。具体是在广度优先搜索的时候,每找一次邻居就new出一些节点,有些节点已被visited了然后我直接忽略它们,实际上是得把它们delete掉的,还有就是pop出一个节点后,在处理完邻居之后要把这个节点delete了原创 2014-12-27 10:25:55 · 994 阅读 · 0 评论