Python基本常用算法

什么是算法

就是一个计算的过程,解决问题的方法

用到知识点

递归

调用自身

有结束条件

下次执行相应的复杂度要减少

时间复杂度排序(按效率排序)

O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n2logn)<O(n3)

判断时间复杂度

1.循环减半的过程就是O(logn)

2.几次循环就是n的几次方的复杂度

空间复杂度(以空间换时间)

评估算法内存占用大小

列表查找

顺序查找

从列表第一个元素开始,顺序进行搜索,直到找到为止。

def linear_seach(data_set,val):
    for i in range(5,data_set):
        if i == val:
            print(i)
            return i
    return ‘没找到‘

二分查找

有序列表的候选区data[0:n]开始,通过对待查找的值与候选区中间值的比较,可以使候选区减少一半。

def bin_seacher(data_set,val):
    low = 0
    high = len(data_set) - 1
    while low <= high:
        mid = (low+high) // 2
        if data_set[mid] == val:
            print(‘索引位置:‘,mid)
            return mid
        elif data_set[mid] < val:
            low = mid + 1
        else:
            high = mid - 1
    print(‘没有找到‘)
    return None

li = range(100000)
bin_seacher(li,557)

案例

import random

def random_list(n):
    ‘‘‘
    生成随机数据
    :param n:
    :return:
    ‘‘‘
    ret = []
    a1 = [‘赵‘,‘钱‘,‘孙‘,‘李‘,‘邹‘,‘吴‘,‘郑‘,‘王‘,‘周‘]
    a2 = [‘力‘,‘好‘,‘礼‘,‘丽‘,‘文‘,‘建‘,‘梅‘,‘美‘,‘高‘,‘‘]
    a3 = [‘强‘,‘文‘,‘斌‘,‘阔‘,‘文‘,‘莹‘,‘超‘,‘云‘,‘龙‘,‘‘]
    ids = range(1001,1001+n)
    for i in range(n):
        name = random.choice(a1) + random.choice(a2) +random.choice(a3)
        age = random.randint(18,60)
        dic = {‘id‘:ids[i], ‘name‘:name, ‘age‘:age}
        ret.append(dic)
    return ret

def id_seacher(data_list,id):
    low = 0
    high = len(data_list) - 1
    while low <= high:
        mid = (low+high) // 2
        if data_list[mid][‘id‘] == id:
            print(‘索引位置:‘,mid)
            return mid
        elif data_list[mid][‘id‘] < id:
            low = mid + 1
        else:
            high = mid - 1
    print(‘没有找到‘)
    return None

data_list = random_list(100)
ind = id_seacher(data_list,1025)
print(data_list[ind][‘name‘])#输入人名

冒泡排序

首先,列表每两个相邻的数,如果前边的比后边的大,那么交换这两个数

循环无序区的数继续比较

import random
def bubble_sort(li):

    for i in range(len(li) - 1):# 几趟
        exchange = False # 标志位
        for j in range(len(li) - i - 1):
            if li[j] > li[j + 1]:
                li[j], li[j + 1] = li[j + 1], li[j]
                exchange = True
            if not exchange:
                break
li = list(range(1000))
random.shuffle(li)
print(li)
bubble_sort(li)
print(li)

时间复杂 

最好情况 O(n)

一般情况 O (n2)

最差情况 O (n2)

选择排序 

  一趟遍历记录最小的数,放到第一个位置;

再一趟遍历记录剩余列表中最小的数,继续放置;

def select_sort(li):

    for i in range(len(li) - 1): #循环次数
        min_loc = i
        for j in range(i + 1,len(li)):#从无序区找
            if li[j] < li[min_loc]:
                min_loc = j
        li[i], li[min_loc] = li[min_loc], li[i]

li = list(range(1000))
random.shuffle(li)
print(li)
select_sort(li)
print(li)

插入排序  

  列表被分为有序区和无序区两个部分。最初有序区只有一个元素。

  每次从无序区选择一个元素,插入到有序区的位置,直到无序区变空。

def insert_sort(li):
    for i in range(1,len(li)):
        tmp = li[i]
        j = i - 1
        while j >= 0 and tmp < li[j]:
            # 判断新数是否比前一个数小,小就将前一个数向后挪一个位置
            li[j + 1] = li[j]
            j -= 1
        li[j + 1] = tmp

li = list(range(1000))
random.shuffle(li)
print(li)
insert_sort(li)
print(li)
时间: 2024-08-05 23:15:31

Python基本常用算法的相关文章

Python之路,Day21 - 常用算法学习

Python之路,Day21 - 常用算法学习 本节内容 算法定义 时间复杂度 空间复杂度 常用算法实例 1.算法定义 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制.也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出.如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题.不同的算法可能用不同的时间.空间或效率来完成同样的任务.一个算法的优劣可以用空间复杂度与时间复杂度来衡量. 一个算

python常用算法了解

这里从个人角度,总结下python常用算法,不罗嗦,直接看代码(文字解释及推到过程网上有很多,大家可以通过度娘了解) 以下排名仅从写代码人自己习惯的顺序! NO.1 二分查找 import time # 时间装饰器 def cal_time(func): def wrapper(*args, **kwargs): start_time = time.time() result = func(*args, **kwargs) end_time = time.time() # print("%s r

Python常用算法

本节内容 算法定义 时间复杂度 空间复杂度 常用算法实例 1.算法定义 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制.也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出.如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题.不同的算法可能用不同的时间.空间或效率来完成同样的任务.一个算法的优劣可以用空间复杂度与时间复杂度来衡量. 一个算法应该具有以下七个重要的特征: ①有穷性(Fin

python数据结构与算法 38 分析树

分析树 树的结构完成以后,该是时候看看它能做点什么实事儿了.这一节里,我们研究一下分析树.分析树能够用于真实世界的结构表示,象语法或数学表达式一类的. 图1 一个简单语句的分析树 图1所示是一个简单语句的层级结构,把语句表示为树结构可以让我们用子树来分析句子的组成部分. 图2 ((7+3)?(5?2))的分析树 我们也可以把数学表达式如((7+3)?(5?2))表示为分析树,如图2.此前我们研究过完全括号表达式,这个表达式表达了什么呢?我们知道乘法的优先级比加减要高,但因为括号的关系,在做乘法之

Python数据结构与算法--List和Dictionaries

Lists 当实现 list 的数据结构的时候Python 的设计者有很多的选择. 每一个选择都有可能影响着 list 操作执行的快慢. 当然他们也试图优化一些不常见的操作. 但是当权衡的时候,它们还是牺牲了不常用的操作的性能来成全常用功能. 本文地址:http://www.cnblogs.com/archimedes/p/python-datastruct-algorithm-list-dictionary.html,转载请注明源地址. 设计者有很多的选择,使他们实现list的数据结构.这些选

STL——配接器、常用算法使用

学习STL,必然会用到它里面的适配器和一些常用的算法.它们都是STL中的重要组成部分. 适配器 在STL里可以用一些容器适配得到适配器.例如其中的stack和queue就是由双端队列deque容器适配而来.其实适配器也是一种设计模式,该种模式是将一个类的接口转换成用户希望的另外一个接口.简单的说:就是需要的东西就在眼前,但却不能用或者使用不是很方便,而短时间又无法改造它,那我们就通过已存在的东西去适配它. STL中的适配器一共有三种: ①应用于容器的即容器适配器:比如stack和queue就是对

Python的常用库

读者您好.今天我将介绍20个属于我常用工具的Python库,我相信你看完之后也会觉得离不开它们.他们是: Requests.Kenneth Reitz写的最富盛名的http库.每个Python程序员都应该有它. Scrapy.如果你从事爬虫相关的工作,那么这个库也是必不可少的.用过它之后你就不会再想用别的同类库了. wxPython.Python的一个GUI(图形用户界面)工具.我主要用它替代tkinter.你一定会爱上它的. Pillow.它是PIL(Python图形库)的一个友好分支.对于用

五大常用算法

http://www.cnblogs.com/steven_oyj/archive/2010/05/22/1741370.html 分治算法 一.基本概念 在计算机科学中,分治法是一种很重要的算法.字面上的解释是"分而治之",就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题--直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并.这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)-- 任何一个可以用计

推荐系统中常用算法 以及优点缺点对比

推荐系统中常用算法 以及优点缺点对比 在 推荐系统简介中,我们给出了推荐系统的一般框架.很明显,推荐方法是整个推荐系统中最核心.最关键的部分,很大程度上决定了推荐系统性能的优劣.目前,主要的推荐方法包括:基于内容推荐.协同过滤推荐.基于关联规则推荐.基于效用推荐.基于知识推荐和组合推荐. 一.基于内容推荐 基于内容的推荐(Content-based Recommendation)是信息过滤技术的延续与发展,它是建立在项目的内容信息上作出推荐的,而不需要依据用户对项目的评价意见,更多地需要用机 器