数据结构&算法(二)_算法基础之前传(递归、时间复杂度、空间复杂度、二分查找)
什么是算法:
间而言之算法(Algorithm):一个计算过程,解决问题的方法
递归的两个特点:
- 调用自身
- 结束条件
递归示例:

def func(x):
if x==:
print("我的小鲤鱼",end='')
else:
print("抱着",end='')
func(x-)
print("的我",end="") func()
递归示例一:我的小鲤鱼
''' 输出长度为 n 的斐波那契数列
'''
#方式一:while 循环
def fibo(num):
a=
b=
i=
while i<=num:
print(a,end=" ")
a,b = b,a+b
i+=
# fibo() #方式二:用递归函数方式
#输出某一项
def fibo2(num):
if num == or num==:
return
elif num>:
return fibo2(num-)+fibo2(num-)
#s输出整个数列
# for i in range(,):
# print(fibo2(i),end=" ") #方式三
def fibo3(a,b,num):
if a > num:
return
print(a,end=" ")
fibo3(b,a+b,num)
fibo3(,,)
递归示例二:斐波那契数列
时间复杂度

空间复杂度
空间复杂度:用来评估算法内存占用大小的一个式子
二分查找
思路:
从有序列表的候选区data[0:n]开始,通过对待查找的值与候选区中间值的比较,可以使候选区减少一半。
二分查找适合有序列表
时间复杂度 O(logn)
#!/usr/bin/env python
# -*- coding:utf-8 -*-
'''
二分查找适合有序列表
时间复杂度 O(logn)
'''
def bin_search(li,val):
low = 0
high = len(li) -1
while li[low] <= li[high]:
mid = (low+high)//2
if li[mid] == val:
print("search success! the index is:{0}".format(mid))
return None
elif li[mid] < val :
low = mid+1
else:
high = mid -1
else:
print("val is not exist")
return None # 二分查找递归版:
def bin_search_rec(li,val,low,high):
mid = (low+high)//2
while li[low] <= li[high]:
if li[mid] == val:
print("search success! the index is:{0}".format(mid))
return None
elif li[mid] < val:
return bin_search_rec(li, val, mid+1, high)
else:
return bin_search_rec(li, val, low, mid-1)
else:
print("val is not exist")
return None
li = [1,3,6,8,9,11,14,16,22,31,44,56,58]
bin_search_rec(li,23,0,12)
数据结构&算法(二)_算法基础之前传(递归、时间复杂度、空间复杂度、二分查找)的更多相关文章
- 分布式共识算法 (二) Paxos算法
系列目录 分布式共识算法 (一) 背景 分布式共识算法 (二) Paxos算法 分布式共识算法 (三) Raft算法 分布式共识算法 (四) BTF算法 一.背景 1.1 命名 Paxos,最早是Le ...
- 【数据结构05】红-黑树基础----二叉搜索树(Binary Search Tree)
目录 1.二分法引言 2.二叉搜索树定义 3.二叉搜索树的CRUD 4.二叉搜索树的两种极端情况 5.二叉搜索树总结 前言 在[算法04]树与二叉树中,已经介绍过了关于树的一些基本概念以及二叉树的前中 ...
- python函数(4):递归函数及二分查找算法
人理解循环,神理解递归! 一.递归的定义 def story(): s = """ 从前有个山,山里有座庙,庙里老和尚讲故事, 讲的什么呢? ""& ...
- 分布式共识算法 (三) Raft算法
系列目录 分布式共识算法 (一) 背景 分布式共识算法 (二) Paxos算法 分布式共识算法 (三) Raft算法 分布式共识算法 (四) BTF算法 一.引子 1.1 介绍 Raft 是一种为了管 ...
- 分布式共识算法 (四) BTF算法(区块链使用)
系列目录 分布式共识算法 (一) 背景 分布式共识算法 (二) Paxos算法 分布式共识算法 (三) Raft算法 分布式共识算法 (四) BTF算法 一.引子 前面介绍的算法,无论是 Paxos ...
- 【微信小程序】 小程序中的递归运算/二分查找算法/Maximum call stack size exceeded
摘要: 小程序中的递归运算/二分查找算法/Maximum call stack size exceeded 场景:最近做一个车贷计算器, 其中存在一个公式如下: /**** 总金额 * 月利率 * ( ...
- cb16a_c++_顺序容器的选用_排序_二分查找
/*cb16a_c++_顺序容器的选用_排序_二分查找顺序容器: 1.vector的优点与缺点 vector优点:排序利用下标,快速排序,做二分查找非常快 2.list的优点与缺点 list优点:插入 ...
- 数据结构和算法(Golang实现)(9)基础知识-算法复杂度及渐进符号
算法复杂度及渐进符号 一.算法复杂度 首先每个程序运行过程中,都要占用一定的计算机资源,比如内存,磁盘等,这些是空间,计算过程中需要判断,循环执行某些逻辑,周而反复,这些是时间. 那么一个算法有多好, ...
- 数据结构和算法(Golang实现)(10)基础知识-算法复杂度主方法
算法复杂度主方法 有时候,我们要评估一个算法的复杂度,但是算法被分散为几个递归的子问题,这样评估起来很难,有一个数学公式可以很快地评估出来. 一.复杂度主方法 主方法,也可以叫主定理.对于那些用分治法 ...
随机推荐
- 圆角带箭头的提示框css实现
css是一个很强大的东西,很多网页效果,我们可以通过css直接实现.今天给大家分享的是一个用css实现的圆角带箭头的提示框. 效果如下图: 这一个样式主要涉及到了css的边框样式border的运用和定 ...
- nodejs 聊天室简单实现
前言 博客园的样式真心不会用啊,看着大大们的博客各种好看,心里无奈啊,只能慢慢摸索了. 最近的项目nodejs+wcf+app,app直接从wcf服务获取数据,nodejs作为单独的服务器为app提供 ...
- 【BZOJ】3479: [Usaco2014 Mar]Watering the Fields(kruskal)
http://www.lydsy.com/JudgeOnline/problem.php?id=3479 这个还用说吗.... #include <cstdio> #include < ...
- (转)java反编译i++和++i问题
转自:http://blog.csdn.net/junsure2012/article/details/7099222 java字节码指令集:http://www.jb51.net/article/3 ...
- Java 反射机制[Field反射]
Java 反射机制[Field反射] 1. 反射概念及功能 反射就是把Java类中的各种成分映射成对应的Java类.比如一个Java类中用一个Class类的对象来表示. 一个类中的组成部分分为成员变 ...
- js 代码风格(2)
Properties • 当访问属性的时候,我们使用点(.)操作符. var luke = { jedi: true, age: 28 }; // bad var isJedi = luke[' ...
- JavaScript------分页插件下载地址
转载: https://github.com/pgkk/kkpager
- Visual Studio 2010 如何改用 Beyond Compare 作为 TFS 的比较工具
Beyond Compare 是一套非常实用的文件及文件夹比较软件,不仅可以快速比较出两个文件夹的不同之处,还可以详细的比较文件之间的内容差异.最近改用 TFS 进行版本控管之后,说实在的还是习惯使用 ...
- Less-loops循环
loop循环 example: .test(@i) when (@i > 0) { .test((@i - 1)); .study@{i} { width: (10px * @i); } } d ...
- 基于Web和二维码的文件传输服务
在工作中难免需要对外提供一些我们抓取的log或者操作视频之类的资料,但由于工作环境日渐规范和严格,公司的网络环境和客户的网络环境是被独立开来的.这样做的好处不必多说,但同时也给我们工作带来的诸多不便. ...