
作业题
woshilsh
这个作者很懒,什么都没留下…
展开
-
T(n)=2T(n/2)+n的解为T(n)=O(nlogn)的求解
课本上的数学归纳法就不说了!还是用替换法求解:,这个只要记住BST上节点值最小的就是树上最左边的节点。就一直找左边,直到某个没有左子的节点为止,就是要找的东东了 def find_min(s...原创 2019-04-30 10:10:28 · 558 阅读 · 0 评论 -
二叉搜索树python实现——python——系列3
本系列实现二叉搜索树修剪!首先按照教材实现了下后序遍历pot,思路简单就是:左、右、根,递归实现即可,最后返回后续遍历的节点序列即可,看代码: def pot(self, *args): if len(args) == 0: nodes = [] node = self.Root else: ...原创 2019-04-30 11:46:38 · 935 阅读 · 0 评论 -
二叉搜索树python实现——python——系列4
课后作业题,其它基本都教材和这里的系列已经给出答案,就不琢磨了,主要课后5-3习题的第三问,删除一个节点,思路要清晰:(1)如果删除的是根,则直接删除,测试图5.11中的节点8即可;(2)如果节点是叶子,则直接删除,测试图5.11中的节点1即可;(3)如果节点只有一个儿子,则将该节点的儿子赋值给其父节点,然后删除节点,测试图5.11中的节点14即可;(4)如果节点两个儿子,则将其右子树的最...原创 2019-04-30 12:46:40 · 273 阅读 · 0 评论 -
空间最小距离点对——python
请参考教材98页,算法6.6,先来个常规算法,复杂度为n的平方,结合Python的优势,代码整短点,顺便绘制下图形,算法思路简单,不多说了,注意陷阱。上代码了:#coding=utf-8import mathimport matplotlib.pyplot as pltdef closestpair_simple(X, n): #对于n个数据点,计算n(n-1)/2个数就可以...原创 2019-05-08 15:40:30 · 4515 阅读 · 2 评论 -
时间复杂度测试实例——python
突然想起讲课的时候提过,检测各种方法实现同一个目的的时间复杂度测试,除了常规的算法分析方法,也可以使用时间分析下。问题:计算从1到1000的平方和,执行10000次。使用了常规python内置的列表list和Numpy库函数计算,废话不多说了,贴代码:import timeitnormal_py_sec = timeit.timeit('sum(x*x for x in range(1...原创 2019-04-30 15:58:31 · 1704 阅读 · 0 评论 -
最大堆最小堆操作——python
刚讲完堆的一系列基本内容,把涉及的知识点整理下,看课本81-88页自行对照复习。堆heap,通常是一个可以被看做一棵树的数组对象。堆的性质:(1)是轶可完全二叉树;(2)某个节点的值总是大于或小于子节点相关的操作有用VB或C++实现的,其它的请自行百度,我们采用python完成算法开始,已知条件:序列A = [45, 36, 18, 53, 72, 30, 48, 93, 15, 35]...原创 2019-05-06 16:12:21 · 5573 阅读 · 0 评论 -
如何更进一步了解递归+调试程序新法——python
最近新出了个工具:pysnooper做啥用呢?你调试的时候是否常使用debug来查看变量状态,是否常使用print来打印输出,检查你的结果是否正确?OK,有了这东东,不用了,只要调用它就可以了,试着了解下斐波那契数列递归实现的过程吧,直接上代码和结果大家自己琢磨:from __future__ import print_functionimport pysnooper@pysnoop...原创 2019-05-06 18:03:40 · 347 阅读 · 0 评论 -
堆排序——python
前面了解了堆概念,接下来看下堆排序的思想:(以大根堆为例):step1: 首先将待排序的数组构造出一个大根堆step2: 取出这个大根堆的堆顶节点(最大值),与堆的最下最右的元素进行交换,然后把剩余的元素再构造一个大根堆step3: 重复第二步,直到这个大根堆长度为1,完成排序现在的关键问题是如何实现上述的算法,课本上直接使用了库函数,很方便,简洁,体现了python编程的优势,可以采用...原创 2019-05-06 20:03:20 · 234 阅读 · 0 评论 -
图的宽度优先搜索和最短路径实现——python
课本上的是手动造轮子,尽管不完善,但是挺好用。这里就不记录课本上的了,通俗易懂,我们主要看看用库函数实现课本上的这俩功能,开阔下思路。主要用到了网络分析库和绘图库,看代码:import networkx as nximport matplotlib.pyplot as pltG = nx.Graph()nodes = ['s', 'a', 'z', 'x', 'd', 'c', '...原创 2019-05-14 15:13:58 · 1572 阅读 · 0 评论 -
合并k个有序序列——python
课本上给出了合并有序序列的代码,思路简单,直接看课本,上代码:#coding=utf-8from collections import namedtupleimport heapqdef mergeKSortedArrays(alist): h = list() # 最小堆 res= list() # 合并后的输出 heapContent = namedtu...原创 2019-05-07 10:56:50 · 2101 阅读 · 0 评论 -
疯狂的8——python
本来打算写个界面版的疯狂的8的,但是最近太忙了,抽不出时间来,先标记下用动态规划求解疯狂的8的步骤及代码,以后有空把它封装到上次的发牌界面版里吧。举例就是课本上的,输入cards = ['7c', '7h', 'Kc', 'Ks', '8h']对应的就是下图接下来是求解的过程,请按照课本的思路来理解这里的动态规划。没时间再整理了!抱歉了!步骤简单整理了下,将就着看看:代码如下...原创 2019-05-23 17:56:38 · 1844 阅读 · 0 评论 -
二维动态规划求解最小编辑距离——python
实现暂时不挂,影响大家作业提交情况,后续添加。挂上思路。=T(n/2)+c解:替换法到这里假设,则上式等于2. T(n)=4T(n/2)+n解:主方法,a=4,b=2,f(n)=n, 因此,可知,满足主方法第一条定理所以3. T(n)=4T(n/2)+c解:替换法到这里假设,则上式等于,如果T(1)=1,则有4. ...原创 2019-04-21 12:19:32 · 3585 阅读 · 0 评论 -
二分字符串——python
问题:给定正整数N,计算所有长度为N但没有连续1的二分字符,比如N=2,输出[00,01,10],N=3,输出为[000,001,010,100,101].思路比较简单,就是利用二进制编码下即可,举一反三,利用已经学过的知识完成即可,题目种没有连续1的条件,自己去设计,懒得弄了。贴代码:def bin_seq(n): temp = [] for i in range(1, 2*...原创 2019-04-21 12:30:40 · 1432 阅读 · 0 评论 -
实现石头、剪刀、布游戏。模拟两方对战该游戏,进行100局,输出这100局对战结果——python
使用界面方式做出来的效果见博客,初学者暂时不要看,会影响你基础知识的掌握进度,不用吸收这么多,先从基础学习,如果基础已经掌握,那就随意。为了简单,用输入的数字代替:1:剪刀;2:石头;3:布;4:退出思路:接收用户输入,看你出剪刀石头布种的哪一个?设计机器出拳,使用随机函数随机出拳,设计函数user, robot=cq()按照规定执行n次,执行的过程种判断输赢,所以输赢判断的时候要...原创 2019-04-17 13:46:59 · 2129 阅读 · 0 评论 -
回文判断——python
回文正向和反向相同的字符串,叫回文。算法思路1——递归比较简单,就直接上代码了:#coding=utf-8def is_palindrome(s): if len(s)<=1: return True else: return s[0]==s[-1] and is_palindrome(s[1:-1])s='level'prin...原创 2019-04-17 09:06:51 · 2996 阅读 · 0 评论 -
编程求出1000以内的所有完数——python
完数:一个数如果恰好等于它的因子之和,这个数就是完数,如6=1+2+3.整体思路首先找出任意一个数的所有因子【因子就是所有可以整除这个数的数,不包括自身】def wan_num(n): for i in range(1, n): if n % i == 0: yield i将所有因子相加,看是否等于这个数n = 1000resu...原创 2019-04-15 13:50:32 · 17823 阅读 · 0 评论 -
打印出10000以内的所有的水仙花数——python
水仙花数:一个三位数,其各位数字立方和等于该数本身。如153是一个水仙花数,因为153=pow(1,3)+pow(5,3)+pow(3,3). 教材上出的这道题严格来说不严谨,三位的才叫水仙花数。按题目意思是所有的都是,就不是这么严格了,百科上讲的详细,就不赘述了!整体思路将数字转化为字符,便于使用每个字符进行幂次运算输出结果def my_sum(a): n = len(a) ...原创 2019-04-15 13:21:02 · 7967 阅读 · 0 评论 -
python实现子集和问题
问题:一个序列,找出其中子集,这里为了简单,假设子集和等于0,如果序列长n,那么显然知道子集总数为pow(2,n)个。怎么找符合子集和为0的那些子集呢?算法思路一:暴力破解法,循环找所有子集,查找满足条件的子集并输出用到一些基本的函数:zip,可以理解为压缩方法,比如lst[-7, -3, -2, 5, 8]m'00001'temp = zip(lst, m)temp[(-7...原创 2019-04-07 15:06:01 · 4570 阅读 · 0 评论 -
python实现哈希表存储——实现了存放字典中的英文串,采用最简单的哈希函数实现
python中哈希表就是字典啊,还怎么实现呢?存储10位同学,每位同学有姓名、籍贯和成绩直接实现哇,好像也没啥可以写的stu = {'z1': ('sx', 96), 'z2': ('sd', 97), 'z3': ('sx', 97),}stu.update({'z4': ('sd', 100),}) #直接更新,如果已经有会覆盖print(stu)print(stu.get('...原创 2019-04-04 16:24:54 · 1739 阅读 · 0 评论 -
寻找局部高点-2D
题目的意思大致是在一个n*m的二维数组中,找到一个局部峰值。峰值要求大于相邻的四个元素(数组边界以外视为负无穷),比如最后我们找到峰值A[j][i],则有A[j][i] > A[j+1][i] && A[j][i] > A[j-1][i] && A[j][i] > A[j][i+1] && A[j][i] > A[j][i-1...原创 2019-04-04 16:02:33 · 2948 阅读 · 0 评论 -
为什么说多项式时间复杂度的算法要优于指数时间复杂度的算法?
原创 2019-04-04 15:34:33 · 3807 阅读 · 0 评论 -
寻找局部高点-1D之python实现
所谓的局部高点就是在某个局部的地方的极值,这个不是全局最值,所以在寻找的时候,从哪里找?怎么找?效率就非常重要了。基于没有现成的资料,因此特整理下思路,便于大家理解该算法。简单算法:从第一个元素开始,判断其是否满足局部高点的条件,如果满足就返回该数的索引,否则判断下一个元素。如此循环判断输入序列的每一个元素直到找到一个局部高点为止。【提示:本文不考虑算法的异常检测等,没找到的时候怎么处理等手...原创 2019-04-04 14:19:23 · 4908 阅读 · 0 评论 -
时间复杂度分析符号说明
来源:算法导论(原书第3版)第三章里面有介绍。废话不多,直接了解即可。1. 大表示法:取最高次数项去掉系数,一般用于描述算法“最坏复杂度”,上界2. 大表示法:介于两者之间,确界(即描述了函数的上界,也描述了下界,最严格的定义)3. 大表示法:一般用于描述算法“最优复杂度”,下界4. 算法导论中还有其它几种,因为课本上不讲,所以就不说了,上图,观察下这几种渐进分析符号以集合的视觉效...原创 2019-04-24 13:15:14 · 1860 阅读 · 0 评论 -
快速排序——课本199页算法纠正——python
课本199页提到快速算法的实现,将选定的pivot放在序列的第一位,但是课本上的代码直接放到了最后一位,没啥问题,前后自己定,只是两个不配套,所以修改了下源代码,贴上大家自己参考。调用过程结果流程验证:...原创 2019-06-09 19:44:17 · 293 阅读 · 0 评论