python算法概述

1 Python算法概述

1.1 算法概念

数据结构:数据的存储结构,对这些数据进行操作。
算法:运算方法,解决问题的方法和思想。

1.2 算法的意义与重要性

(1)让代码可行、高效、低占用资源
(2)明白代码底层逻辑,方便使用和阅读代码
(3)面试必考,高薪企业看中
算法的5个基本要素:
(1)输入:0个或多个输入
(2)输出:至少有1个或多个输出
(3)有穷尽:可以终止
(4)确定性:不会有歧义
(5)可行性:有效性,可执行的步骤,明确的落地执行的

1.3 算法举例

算法是针对问题出现的,有问题的地方就有算法。
算法思想(加粗为5大常用算法):
(1)分治法:划分任务,越来越简单
(2)贪心法:1,3,5,找9元钱
(3)穷举法:所有组合方案列出来,比如试密码。答案全,但耗费精力
(4)递归法:调用函数本身,递归到本身
(5)递推法:数列根据前几项规律,得到第n项的规律
(6)回溯法:走迷宫,如果不通回到上个路口找其他路径,解决不下去,回到 回溯点,找其他方案
(7)动态规划法:用于数学中,寻找最优解
(8)迭代法:旧值 推导出 新值
(9)分支界限法:大问题找出最优解,找出各分支的上界和下届,再综合得到整个的优解

1.4 算法书籍推荐

《啊哈!算法》:c语言
《算法图解》:Python,3-4小时可以看完
《数据结构与算法 Python语言实现》
刷题:
LeetCode、牛客网nowcoder

2 时间复杂度

我们将算法执行运算的操作数丢弃低阶项,再去掉所有的系数。
在它前门加一个O,就是大O表示法
O(n):其中n是操作数

3 算法分析法则

3.1 一般法则
(1)for循环:循环体为O(n),循环次数为m,则总的时间复杂度=O(nm)
(2)嵌套的for循环:各个循环次数分别是a,b,c,则总的时间复杂度=O(n
ab…)
(3)顺序语句:各个语句的运行时间求和即可(或者说取较大值)
(4)if/else语句:总的时间复杂度=其中复杂度对打路径
3.2 常见复杂度
li.append()
li.insert()

4 二分法查找O(logn)

二分法:在有序数组中查找某一特定元素的搜索算法
搜索过程从数组的中间元素开始:
如果中间元素是正好要找的元素,则搜索过程结束;
如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较;
如果在某一步骤数组为空,则代表找不到。

# 先决条件:有序数组
# 数据类型有范围:其他语言如java采用表达式start+(end-start)/2可以防止溢出
# start =mid +1和end=mid-1,防止死循环
# 数据量不可过大,防止内存溢出
# 时间复杂度:O(log n)
def binary_search(arr,key):
    start = 0
    end = len(arr)-1
    while start <= end:
        mid = (start+end) // 2
        if arr[mid] < key:
            start = mid +1
        elif arr[mid] > key:
            end = mid + 1
        else:
            return mid
    return -1

5 数组vs链表

5.1 定义区别
数组:必须连续,存取麻烦;直接访问。为了解决计算机定址问题出现
链表࿱

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值