码迷,mamicode.com
首页 > 编程语言 > 详细

数据结构&算法(二)_算法基础之前传(递归、时间复杂度、空间复杂度、二分查找)

时间:2017-11-16 20:51:47      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:algo   技术分享   idt   none   col   div   opened   style   splay   

什么是算法:

  间而言之算法(Algorithm):一个计算过程,解决问题的方法

 递归的两个特点:

  •   调用自身
  •   结束条件

递归示例:

技术分享

技术分享
def func(x):
    if x==0:
        print("我的小鲤鱼",end=‘‘)
    else:
        print("抱着",end=‘‘)
        func(x-1)
        print("的我",end="")
        
func(5)
递归示例一:我的小鲤鱼
技术分享
‘‘‘
1 1 2 3 5 8 13 21 34 
输出长度为 n 的斐波那契数列
‘‘‘
#方式一:while 循环
def fibo(num):
    a=1
    b=1
    i=1
    while i<=num:
        print(a,end=" ")
        a,b = b,a+b
        i+=1
# fibo(10)

#方式二:用递归函数方式
#输出某一项
def fibo2(num):
    if num == 1 or num==2:
        return 1
    elif num>2:
        return fibo2(num-1)+fibo2(num-2)
#s输出整个数列
# for i in range(1,11):
#     print(fibo2(i),end=" ")

#方式三
def fibo3(a,b,num):
    if a > num:
        return
    print(a,end=" ")
    fibo3(b,a+b,num)
fibo3(1,1,1100)
递归示例二:斐波那契数列

时间复杂度

技术分享

 空间复杂度

空间复杂度:用来评估算法内存占用大小的一个式子

利用程序的空间复杂度,可以对程序的运行所需要的内存多少有个预先估计。一个程序执行时除了需要存储空间和存储本身所使用的指令、常数、变量和输入数据外,还需要一些对数据进行操作的工作单元和存储一些为现实计算所需信息的辅助空间。程序执行时所需存储空间包括以下两部分。  
(1)固定部分。这部分空间的大小与输入/输出的数据的个数多少、数值无关。主要包括指令空间(即代码空间)、数据空间(常量、简单变量)等所占的空间。这部分属于静态空间。
(2)可变空间,这部分空间的主要包括动态分配的空间,以及递归栈所需的空间等。这部分的空间大小与算法有关。
一个算法所需的存储空间用f(n)表示。S(n)=O(f(n))  其中n为问题的规模,S(n)表示空间复杂度。
 

二分查找

思路:

从有序列表的候选区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)

  

 
 
 
 
 
 
 

 

数据结构&算法(二)_算法基础之前传(递归、时间复杂度、空间复杂度、二分查找)

标签:algo   技术分享   idt   none   col   div   opened   style   splay   

原文地址:http://www.cnblogs.com/hedeyong/p/7846146.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!