随笔分类 - Data structure && Algorithm
摘要:问题陈述: HDOJ Problem - 1098问题解析: 数学归纳法 f(1) = 18 + ka; 假设f(x) =5*x^13+13*x^5+k*a*x 能被65整除 f(x+1) = 5*(x+1)^13+13*(x+1)^5+k*a*(x+1) 根据二项式定理展开 (a+b)...
阅读全文
摘要:归并排序(Merge sort)是创建在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。算法描述:将待排序数据分为两部分(递归调用归并排序)。对两部分数据进行归并操作。时间复杂度:T(N) = 2 * T(N/2) + cN = 2...
阅读全文
摘要:问题陈述: 给定N个整数的序列{A1, A2, ... , AN},求函数ƒ(i, j) = max{0, Ai + Ai+1 + ... + Aj}(1 maxSum){ 8 maxSum = currentSum; //更新maxSum 9 ...
阅读全文
摘要:插入排序(Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向...
阅读全文
摘要:问题陈述: 现有八枚银币a b c d e f g h,已知其中一枚是假币,其质量不同于真币,但不知是较轻或较重,如何使用天平以最少的比较次数,判断出哪枚是假币,并得知假币比真币较轻或较重?问题解法: 单求假币的问题并不难,但问题限制使用最少的比较次数,所以我们不能以单纯的回圈比较来求解,我们可...
阅读全文
摘要:问题陈述: 国际象棋中的皇后可以直线前进,吃掉遇到的所有棋子,如果棋盘上有八个皇后,则这八个皇后如何相安无事的放置在棋盘上?问题解法: 关于棋盘的问题,都可以用递归求解,然而如何减少递归的次数?在八皇后问题中,不必要检查所有的格子,例如若某列检查过,该列的其它格子就不用检查了,这种方法称为分支修...
阅读全文
摘要:问题陈述: 骑士游历(Knight tour)在十八世纪初备受数学家与拼图迷的注意,究竟它是什么时候被提出已不可考。骑士的走法为国际象棋的走法,类似中国象棋的马,骑士可以由任意一个位置出发,他如何走完所有的位置?问题解法: 骑士的走法,基本上可以用递归的方法来解决,但是纯粹的递归在维度大时相当没...
阅读全文
摘要:问题陈述: 老鼠走迷宫是递归求解的基本题型,我们在二维阵列中使用2表示迷宫墙壁,使用1来表示老鼠的行走路径。问题解法: 老鼠的走法有上、下、左、右四个方向,在每前进一个之后就选一个方向前进,无法前进时退回选择下一个可前进方向,如此在阵列中依序测试四个方向,直到走到出口为止。代码详解: 1 #in...
阅读全文
摘要:问题陈述: 三色旗的问题最早由E.W.Dijkstra所提出,他所使用的用语为Dutch Nation Flag(Dijkstra为荷兰人),而多数的作者则使用Three-Color Flag来称之。 假设有一条绳子,上面有红、白、蓝三种颜色的旗子,起初绳子上的旗子颜色并没有顺序,您希望将之分类,...
阅读全文
摘要:选择排序(Selection Sort)是一种简单直观的排序算法。工作原理如下:首先在未排序序列中找到最大(小)的元素,存放到序列的起始位置,然后再从剩余未排序序列中继续查找最大(小)的元素,然后存放到已排序序列的末尾。以此类摧,直到所有元素排序完毕。选择排序的主要优点与移动数据有关,如果某个元素位...
阅读全文
摘要:冒泡排序(Bubble Sort)是一种简单的排序算法,由于它的简洁,冒泡排序通常被用来对于程序设计入门的学生介绍算法的概念。冒泡排序的思想是重复地走访过要排序的数列,一次比较两个相邻的元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行到没有元素需要交换,也就是说该数列已经排序完成...
阅读全文
摘要:问题陈述: 杨辉三角如图所示:要求编程输出。问题解法: 常规思路每个数字等于其"肩膀"上两数字之和,即a[i][j] = a[i-1][j-1] + a[i-1][j],代码稍有繁琐。 从代数的角度来考虑这个问题,可以得到一个通式:a[i][j] = a[i][0] * (i/1) * ((i-1)...
阅读全文
摘要:问题陈述: 据说著名的犹太历史学家Josephus有过以下的故事:在罗马人占领乔塔帕特后,39个犹太人与Josephus及他的朋友躲到一个山洞里,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人围成一个圆圈,由第1个人开始报数,每报数到第三人该人就必须自杀,然后再由下一个重新...
阅读全文
摘要:问题陈述: Fibonacci为1200年代的欧洲数学家,在他的著作中曾经提到:若有一只兔子每个月生一只小兔子,一个月后小兔子也开始生产。起始只有一只兔子,一个月后就有两只兔子,二个月后有三只兔子,三个月后有五只兔子(小兔投入生产)......。这就是Fibonacci数列,一般习惯称之为费氏数列,...
阅读全文
摘要:问题陈述: 河内之塔(Towers of Hanoi)又称汉诺塔,是法国人M.Claus(Lucas)于1883年从泰国带至法国的,河内为越战时北越的首都,即现在的胡志明市;1883年法国数学家Edourad Lucas曾提及这个故事,据说创世纪时Benares有一座波罗教塔,是由三支石棒(Pag)...
阅读全文

浙公网安备 33010602011771号