随笔分类 -  Python-算法

摘要:归并排序:参考这个作者的博客,写得非常好 https://www.cnblogs.com/skywang12345/p/3602369.htmlhttps://www.cnblogs.com/chengxiao/p/6194356.html算法思想:1.递归的对需要排序的列表进行“分”的操作,先把列 阅读全文
posted @ 2020-03-29 19:39 StudyNLP 阅读(165) 评论(0) 推荐(0)
摘要:插入排序:对一个无序的列表进行排序,通过插入排序算法思想基本思想:要对输入的无序列表进行排序,列表从左至右增大,假设第一个元素是已经排好了的元素,那么第二个元素就与第一个元素比较,如果大,则不需要移动,如果小了,则需要先把第一个元素往后移一位,然后再把第二个元素给第一个元素赋值。举个例子来说明:初始 阅读全文
posted @ 2020-03-25 15:11 StudyNLP 阅读(142) 评论(0) 推荐(0)
摘要:堆排序:堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。该数组从逻辑上讲就是一个堆结构,我们用简单的公式来描述一下堆的定义就是:大顶堆:arr[i] >= arr[2i+1] && arr[i] >= 阅读全文
posted @ 2020-03-22 21:34 StudyNLP 阅读(225) 评论(0) 推荐(0)
摘要:代码中写了三种快速排序的方法: 假设列表中第一个元素为中间值,那么就从左、右两个方向朝中间遍历与中间值比较,比其小的放左边,比其小的放右边。当左、右指针变量相等时,完成第一次排序,保在左边的都比中间值小,在右边的都比中间值大。 然后递归调用该方法,从而实现最终的整个列表排序。 中间值(该值每次假设是 阅读全文
posted @ 2020-03-18 17:58 StudyNLP 阅读(165) 评论(0) 推荐(0)
摘要:工作原理:1步:左边第一个依次与后续的比较,如果比0位置的值小,则交换值,这样第一次循环结束 后,左边第一个值则是整个列表中的最小值2步:然后再找位置1的最小值,依次遍历,完成整个列表的排序 def selectSort(data): n = len(data) for i in range(n): 阅读全文
posted @ 2020-03-14 20:46 StudyNLP 阅读(141) 评论(0) 推荐(0)
摘要:python冒泡排序实现原理:每次从左边开始,相邻的两两进行比较,大的放右边,小的放左边,完成第一次后,整个 列表中最大的数就在最右边了。 然后再开始第二次遍历,依照上述规则进行,最终排列完成整个列表实现代码如下: """ 冒泡排序 """ def bubblingSort(data): n = l 阅读全文
posted @ 2020-03-11 12:40 StudyNLP 阅读(130) 评论(0) 推荐(0)
摘要:给出4个小于10个正整数,你可以使用加减乘除4种运算以及括号把这4个数连接起来得到一个表达式。现在的问题是,是否存在一种方式使得得到的表达式的结果等于24。 这里加减乘除以及括号的运算结果和运算的优先级跟我们平常的定义一致(这里的除法定义是实数除法)。比如,对于5,5,5,1,我们知道5 * (5 阅读全文
posted @ 2020-03-07 16:16 StudyNLP 阅读(676) 评论(0) 推荐(0)
摘要:把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?5,1,1和1,5,1 是同一种分法。 5个苹果放入1个盘子,1种方法与1个苹果放入5个盘子,也是1种方法,其中他们的方法是相同的,告诉我们,不区分苹果和盘子的序号。 输入第一行是测试数据的数目t(0 <= t <= 阅读全文
posted @ 2020-03-04 14:42 StudyNLP 阅读(516) 评论(0) 推荐(0)
摘要:用递归将问题分解为规模更小的子问题进行求解 例题: 爬楼梯树老师爬楼梯,他可以每次走1级或者2级,输入楼梯的级数,求不同的走法数例如:楼梯一共有3级,他可以每次都走一级,或者第一次走一级,第二次走两级,也可以第一次走两级,第二次走一级,一共3种方法。输入输入包含若干行,每行包含一个正整数N,代表楼梯 阅读全文
posted @ 2020-02-29 15:44 StudyNLP 阅读(778) 评论(0) 推荐(0)
摘要:输入为四则运算表达式,仅由整数、+、-、*、/ 、(、)组成,没有空格,要求求其值。假设运算符结果都是整数。"/"结果也是整数解题思想:因为四则运算有优先级,所以在设计递归的时候,需要注意。这里设计为:表达式-项-因子-带括号表达式或整数,这里只是给了个名称上的定义,可以不用具体的纠结什么是项、什么 阅读全文
posted @ 2020-02-26 10:40 StudyNLP 阅读(880) 评论(0) 推荐(0)
摘要:用递归解决递归形式的问题例题:逆波兰表达式逆波兰表达式是一种把运算符前置的算术表达式(其实一般教科书上称这种表达式为波兰表达式) ,例如普通的表达式2 + 3的逆波兰表示法为+ 2 3。逆波兰表达式的优点是运算符之间不必有优先级关系,也不必用括号改变运算次序,例如(2 + 3) * 4的逆波兰表示法 阅读全文
posted @ 2020-02-22 15:21 StudyNLP 阅读(1002) 评论(0) 推荐(0)
摘要:用递归替代多重循环n皇后问题:输入整数n, 要求n个国际象棋的皇后,摆在n*n的棋盘上,互相不能攻击,输出全部方案。八皇后问题:八重循环。n皇后,n重循环? N皇后问题输入一个正整数N,则程序输出N皇后问题的全部摆法。输出结果里的每一行都代表一种摆法。行里的第i个数字如果是n,就代表第i行的皇后应该 阅读全文
posted @ 2020-02-19 13:55 StudyNLP 阅读(430) 评论(0) 推荐(0)
摘要:汉诺塔问题(Hanoi):古代有一个梵塔,塔内有三个座A、B、C,A座上有64个盘子,盘子大小不等,大的在下,小的在上(如图)。有一个和尚想把这64个盘子从A座移到C座,但每次只能允许移动一个盘子,并且在移动过程中,3个座上的盘子始终保持大盘在下,小盘在上。在移动过程中可以利用B座,要求输出移动的步 阅读全文
posted @ 2020-02-16 14:02 StudyNLP 阅读(523) 评论(0) 推荐(0)
摘要:递归的基本概念 一个函数调用其自身,就是递归 求n!的递归函数 通过函数递归的方式实现求函数的阶乘。 Python代码如下: #求阶乘 def Factorial(n): if (n == 1): return 1 else: return n * Factorial(n-1) def main 阅读全文
posted @ 2020-02-12 15:15 StudyNLP 阅读(1775) 评论(0) 推荐(0)
摘要:– 有一个由按钮组成的矩阵, 其中每行有6个按钮, 共5行– 每个按钮的位置上有一盏灯– 当按下一个按钮后, 该按钮以及周围位置(上边, 下边, 左边, 右边)的灯都会改变状态 – 如果灯原来是点亮的, 就会被熄灭 – 如果灯原来是熄灭的, 则会被点亮• 在矩阵角上的按钮改变3盏灯的状态• 在矩阵边 阅读全文
posted @ 2020-02-09 18:08 StudyNLP 阅读(328) 评论(0) 推荐(0)
摘要:有12枚硬币。其中有11枚真币和1枚假币。假币和真币重量不同,但不知道假币比真币轻还是重。现在,用一架天平称了这些币三次,告诉你称的结果,请你找出假币并且确定假币是轻是重(数据保证一定能找出来)。 输入:第一行是测试数据组数。每组数据有三行,每行表示一次称量的结果。银币标号为A-L。每次称量的结果用 阅读全文
posted @ 2020-02-05 14:51 StudyNLP 阅读(434) 评论(0) 推荐(0)
摘要:题目:生理周期 人有体力、情商、智商的高峰日子,它们分别每隔23天、28天和33天出现一次。对于每个人,我们想知道何时三个高峰落在同一天。给定三个高峰出现的日子p,e和i(不一定是第一次高峰出现的日子),再给定另一个指定的日子d,你的任务是输出日子d之后,下一次三个高峰落在同一天的日子(用距离d的天 阅读全文
posted @ 2020-02-01 18:33 StudyNLP 阅读(234) 评论(0) 推荐(0)
摘要:题目:  形如a 3 = b 3 + c 3 + d 3 的等式被称为完美立方等式。例如12 3 = 6 3 + 8 3 + 10 3 。编写一个程序,对任给的正整数N(N≤100),寻找所有的四元组(a, b, c, d),使得a 3 = b 3 +c 3 + d 3 ,其中a,b,c,d 大于 阅读全文
posted @ 2020-01-28 20:17 StudyNLP 阅读(1969) 评论(0) 推荐(0)
摘要:因为自己目前在中国大学MOOC学习北京大学郭炜老师的算法课,为了督促自己能更好的理解算法的思想,避免自己偷懒,所以把老师上课说讲的算法都用Python来实现一遍,以监督自己能努力认真的完成该门课程。 可能算法更新较慢,但是我还是会努力完成老师上课所讲授的算法,加油!如果后续算法有实现不对的地方,请各 阅读全文
posted @ 2020-01-28 20:13 StudyNLP 阅读(68) 评论(0) 推荐(0)