数据结构&算法(二)_算法基础之前传(递归、时间复杂度、空间复杂度、二分查找)
什么是算法:
间而言之算法(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)基础知识-算法复杂度主方法
算法复杂度主方法 有时候,我们要评估一个算法的复杂度,但是算法被分散为几个递归的子问题,这样评估起来很难,有一个数学公式可以很快地评估出来. 一.复杂度主方法 主方法,也可以叫主定理.对于那些用分治法 ...
随机推荐
- Python中sort以及sorted函数初探
sorted(...) Help on built-in function sorted in module __builtin__: sorted(...) sorted(iterable, cmp ...
- elasticsearch插件三—— Marvel插件安装详解
2016年05月21日 22:58:13 阅读数:23058 一.Marvel插件介绍 Marvel插件:在簇中从每个节点汇集数据.这个插件必须每个节点都得安装. Marvel是Elasticsear ...
- Softmatic ScreenLayers 将截图存为psd格式
Softmatic ScreenLayers 是 Mac 上的一款截图软件,它与众不同的地方是可以将截取的屏幕图片按PSD格式保存到本地,并且图片里的每一种元素都被单独放入一个独立的layer,比如M ...
- 第一百四十六节,JavaScript,百度分享保持居中--下拉菜单
JavaScript,百度分享保持居中--下拉菜单 百度分享保持居中 效果图 html代码 <div id="share"> <h2>分享到</h2& ...
- 【BZOJ】3401: [Usaco2009 Mar]Look Up 仰望(单调栈)
http://www.lydsy.com/JudgeOnline/problem.php?id=3401 还能更裸一些吗.. 维护一个递减的单调栈 #include <cstdio> #i ...
- ICO图标的制作与应用
制作参看:http://www.shouce.ren/tool/ico?action=make 示例: <link href="./js/favicon.ico" rel=& ...
- Telnet发送邮件之聊以自慰
北京的冬天,闲着无聊,得做点什么暖暖脑袋,用windows系统自带工具telnet玩了把邮件发送 准备工作: 1.打开windows系统telnet客户端功能 2.准备两个邮箱帐号(xxx@163.c ...
- 【BZOJ4538】[Hnoi2016]网络 整体二分+树状数组
[BZOJ4538][Hnoi2016]网络 Description 一个简单的网络系统可以被描述成一棵无根树.每个节点为一个服务器.连接服务器与服务器的数据线则看做一条树边.两个服务器进行数据的交互 ...
- angualar入门学习-- 自定义指令 指令编译执行过程
3个阶段: 一.加载阶段 加载angular.js的源码,找到ng-app确定应用边界范围. 二.编译阶段 compile 查找所有指令,保存在一个列表中 对所有指令按优先级(property属性值) ...
- fnt 图字原理
摘自:http://blog.csdn.net/wzq9706/article/details/8188256 首先要介绍一下,图字是怎么来的?其实这个很早很早了,记得80后在95年开始玩DOS下的仙 ...