摘要:
第一节 快速排序 很久以前就学过快速排序,现在在这里简单的介绍一下吧。 快速排序是基于分治的一种排序算法,因为是分治思想的,所以它是一种非常快的算法。它的平均运行时间是O(N Log N),最坏的运行时间是O(N^2)。 算法的基本步骤如下,设S为待排序的集合,n为它的长度: 1、如果S长度(即n)为1或为0,那么立刻返回。 2、取S中任意一个元素为枢纽元。 3、将S分为两个集合:S1和S2,S1中所有元素都小于枢纽元,S2中所有元素都大于枢纽元。 4、将S1和S2分别再进行一次快速排序。 快排的思路可能有点难理解,我画几个图来说明吧。图.1-1 随机选取枢纽元图.1-2 将集合分为两个子集合 阅读全文
摘要:
本文章可以算是http://www.cnblogs.com/yylogo/archive/2011/06/06/SGU-106.html文章的子文章吧,剖析里面的扩展欧几里德。 首先要了解欧几里德公式。 题目里用到的定理大概有下面几个:对于等式ax+by=c,a,b,c皆为整数,c如果是gcd(a, b)的倍数,则方程有解,否则方程误解。 这一个的证明省略,我也不会。因为等式ax+by=gcd(a, b)必定有解(定理1),所以可以解出来,解法如下: 因为gcd(a, b) = gcd(b, a % b),所以有bx1+(a%b)y1=gcd(a,b),注意!此时x1并不等于x,y1也不等于. 阅读全文
摘要:
108. Self-numbers 2每个测试点时间限制: 2.50 sec.内存限制: 4096 KB在1949年印度的数学假D.R.Kaprekar发现了一种叫做self-number的经典数字,对于任意正整数n,定义d(n)为n加上n的各个位上的数字(d是数字的意思,Kaprekar发明的一个术语)。如:d(75) = 75 + 7 + 5 = 87。给定任意正整数n,你可以构建出无限的整数递增:n, d(n), d(d(n)), d(d(d(n))), ……举个例子,你从33开始,那么下一个数就是33 + 3 + 3 = 39, 再下一个就是39 + 3 + 9 = 51, 接着就是 阅读全文