sf-1 算法
算法基础
算法
算法(Algorithm):一个计算过程,解决问题的方法
DNiklaus Wirth:“程序=数据结构+算法”
时间复杂度
时间复杂度:用来评估算法运行效率的一个式子
时间复杂度-小结
时间复杂度是用来估计算法运行时间的一个式子(单位)。
一般来说,时间复杂度高的算法比复杂度低的算法慢。
常见的时间复杂度(按效率排序)
O(1)< O(logn)< O(n)< O(nlogn)< O(n2)< O(n2logn)< O(n3)
复杂问题的时间复杂度
O(n!)O(2n)O(nn)..
如何简单快速地判断算法复杂度
快速判断算法复杂度(适用于绝大多数简单情况):
确定问题规模n
循环减半过程→logn
k层关于n的循环→nk
复杂情况:根据算法执行过程判断
空间复杂度
空间复杂度:用来评估算法内存占用大小的式子
空间复杂度的表示方式与时间复杂度完全一样
算法使用了几个变量:O(1)
算法使用了长度为n的一维列表:O(n)
算法使用了m行n列的二维列表:O(mn)
“空间换时间”
递归的两个特点:
调用自身
结束条件
递归实例:汉诺塔问题
大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摆着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。
在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
64根柱子移动完毕之日,就是世界毁灭之时。
汉诺塔移动次数的递推式:h(x)=2h(x-1)+1
h(64)=18446744073709551615
假设婆罗门每秒钟搬一个盘子,则总共需要5800亿年!
def hanoi(n, a, b, c):
if n > 0: # 盘子大于0才执行
hanoi(n - 1, a, c, b) # 将n-1个盘 从a经过c移动到 b
print("moving pan from %s to %s" % (a, c)) # 将第n个盘移动到c
hanoi(n - 1, b, a, c) # 将n-1 个盘 从b 经过a 移动到c hanoi(3, 'A', 'B', 'C') # 将n-1个盘(除了底层的第n个盘)看成一个整体, """
move pan from A to C
move pan from A to B
move pan from C to B
move pan from A to C
move pan from B to A
move pan from B to C
move pan from A to C
"""
列表查找
查找
查找:在一些数据元素中,通过一定的方法找出与给定关键字相同的数据元素的过程。
列表查找(线性表查找):从列表中查找指定元素
输入:列表、待查找元素
输出:元素下标(未找到元素时一般返回None或-1)
内置列表查找函数:index()
顺序查找(Linear Search)
顺序查找:也叫线性查找,从列表第一个元素开始,顺序进行搜索,直到找到元素或搜索到列表最后一个元素为止。
时间复杂度:O(n)
二分查找(Binary Searh)
二分查找:又叫折半查找,从有序列表的初始候选区li[0:n]开始,通过对待查找的值与候选区中间值的比较,可以使候选区减少一半。
def binary(data_list, value):
low = 0
high = len(data_list) - 1
while low <= high:
mid = (low + high) // 2 # 折半
if data_list[mid] == value:
return mid
elif data_list[mid] > value:
high = mid - 1
else:
low = mid + 1 data_list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
value = 5
index = binary(data_list, value)
print("index in data_list:%s ,search value test:%s "%(index,data_list[index])) """
index in data_list:4 ,search value test:5
"""
sf-1 算法的更多相关文章
- Java算法之字符串反转分析
本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 在基本的工作内容开发中,算法不会显得那么重要,而在百万级别的时候,差距非常大,今天带大家研究下常见的 ...
- 研究base64_encode的算法
从网上看了一些资料,为了方便自己理解,于是把它的编码原理,自己放在excel表格中清晰列出来,方便以后查阅.做的图如下:
- Aho-Corasick算法、多模正则匹配、Snort入门学习
希望解决的问题 . 在一些高流量.高IO的WAF中,是如何对规则库(POST.GET)中的字符串进行多正则匹配的,是单条轮询执行,还是多模式并发执行 . Snort是怎么组织.匹配高达上千条的正则规则 ...
- 最短路径算法Dijkstra和A*
在设计基于地图的游戏,特别是isometric斜45度视角游戏时,几乎必须要用到最短路径算法.Dijkstra算法是寻找当前最优路径(距离原点最近),如果遇到更短的路径,则修改路径(边松弛). Ast ...
- 海量数据的二度人脉挖掘算法(Hadoop 实现)
最近做了一个项目,要求找出二度人脉的一些关系,就好似新浪微博的“你可能感兴趣的人” 中,间接关注推荐:简单描述:即你关注的人中有N个人同时都关注了 XXX . 在程序的实现上,其实我们要找的是:若 U ...
- 解密随机数生成器(二)——从java源码看线性同余算法
Random Java中的Random类生成的是伪随机数,使用的是48-bit的种子,然后调用一个linear congruential formula线性同余方程(Donald Knuth的编程艺术 ...
- Floyd算法应用-医院选址问题
1)问题描述 n个村庄之间的交通图可以用有向网图来表示,图中边<vi, vj>上的权值表示从村庄i到村庄j的道路长度.现在要从这n个村庄中选择一个村庄新建一所医院,问这所医院应建在哪个村庄 ...
- LeetCode_算法及数据结构覆盖统计
[输入]共计151道题的算法&数据结构基础数据 (见附录A) [输出-算法]其中有算法记录的共计 97道 ,统计后 结果如下 top3(递归,动态规划,回溯) 递归 动态规划 回溯 BFS ...
- openlayer的凸包算法实现
最近在要实现一个openlayer的凸多边形,也遇到了不小的坑,就记录一下 1.具体的需求: 通过在界面点击,获取点击是的坐标点,来绘制一个凸多边形. 2.思考过程: 1)首先,我们得先获取点击事件发 ...
- Knowledge_SPA——精研查找算法
首先保证这一篇分析查找算法的文章,气质与大部分搜索引擎搜索到的文章不同,主要体现在代码上面,会更加高级,会结合到很多之前研究过的内容,例如设计模式,泛型等.这也与我的上一篇面向程序员编程--精研排序算 ...
随机推荐
- 虚拟机安装及ubuntu-16.04.3-desktop-amd64.iso映像文件的安装
虚拟机安装及ubuntu-16.04.3-desktop-amd64.iso映像文件 搞了大半天才搞清楚装linux的前提是要先安装虚拟机的 先下载虚拟机,在然后创建虚拟机,在虚拟机里面再安装linu ...
- SpringBoot之基础
简介 背景 J2EE笨重的开发 / 繁多的配置 / 低下的开发效率 / 复杂的部署流程 / 第三方技术集成难度大 特点 ① 快速创建独立运行的spring项目以及主流框架集成 ② 使用嵌入式的Serv ...
- 【读书笔记】segment routing mpls数据平面-1
- easyui-textbox多行文本中输入内容,有回车操作时将文本拼接<br/>
<input class="easyui-textbox" name="versionText" id="versionText" d ...
- python入门(十七)python连接mysql数据库
mysql 数据库:关系型数据库mysql:互联网公司 sqllite:小型数据库,占用资源少,手机里面使用oracle:银行.保险.以前外企.sybase:银行+通信 互联网公司key:valuem ...
- Django继承AbstractUser新建UserInfor Model时出现fields.E304错误
错误详情: SystemCheckError: System check identified some issues: ERRORS:app01.UserInfo.groups: (fields.E ...
- css: box-sizing
border-box 宽度包含了边框 content-box 边框不包含在内容区中,会增加到实际的宽度中
- JDK环境安装步骤
1.下载JDK https://www.oracle.com/technetwork/java/javase/downloads/index.html 下图圈中位置为最新JDK 点击进入下载页面,将页 ...
- 这是一个新的开始at this very monment
简单的介绍下此时自己的情况,和对近几年所做的事做一个总结,并展望下自己的未来和对自己的期待.我会将我的博客分成两种,一个是我的学习笔记,另一个是我的生活记录. 2018年六月底我毕业于一个普通的二本, ...
- 关于有时候JQuery使用.val()赋值失败问题
jQuery中有3个获取元素value值的函数比较相似:attr(), prop(), val(): 具体作用网上比较多就不展示对比过程了,结果就是:prop()和val()都能获取到文本框的实际va ...