2026/1/22

4 阅读2分钟

忙的工作昨天又没更新,尽量保持日更。 今天开始学习数据结构与算法,4周时间。今天学习二分查找法&数组与链表,笔记如下:

1. 二分查找

输入一个==有序==的元素列表,如果要查找的元素包含在列表中,返回其位置,否则返回null
当你检索n个元素时,采用二分查找,你最多需要检查log(n)个元素,运行时间为对数时间(log时间)-O(logn),而采用简单查找需要检索n个元素,所需的时间称为线性时间(linear time-O(n)
  • 用二分法查找数字位置
def binary_search(list,item):
    low = 0 # low和high用于跟踪要在其中查找的列表部分
    high = len(list)-1
    
    while low < =high: #只要范围没有缩小到只包含一个元素
        mid = (low+high)//2
        guess = list[mid]
        if guess = item:
            return mid
        if guess > item: #猜的数字大了
            high = mid - 1
        else:  #猜的数字小了
            low = mid +1
    return None    #没有指定的元素
my_list = [1,3,5,7,9]
print(binary_search(my_list,3))
print(binary_search(my_list,-1))

#》1
#》None

2. 大O表示法

一些常见的大O运行时间
  • O(log n) 对数时间,算法包括二分查找
  • O(n) 线性时间,算法如简单查找
  • O(n * log n) 算法如 快速排序法
  • O(n 2次方) 算法如选择排序
  • O(n !) 旅行商问题的解决方案

3.关于算法的速度

  • 算法的速度指的并非时间,而是操作数的增速
  • 谈论算法的速度时,谈的是随着输入的增加,其运行时间将以什么样的速度增加
  • 算法的运行时间用大O表示法表示

4.数组和链表

  • 数组的读取速度快,而插入速度慢
  • 链表的读取速度慢,而插入速度快
  • 数组支持随机访问和顺序访问
  • 链表不支持随机访问

5. 由数组和链表组合形成的复杂结构

  • Facebook

6.多项式的表示

例 一元多项式及其运算 一元多项式:

f(x)=a0+a1x++anxnf(x)=a_{0}+a_{1}x+\dots+a_{n}x^n

主要运算:多项式相加、相减、相乘等 分析:如何表示多项式? 多项式的关键数据:

  • 多项式项数n

  • 各项系数aia_i及指数i

  • 方法1:顺序存储结构直接表示 数组各分量对应多项式各项: a[i]:xi的系数aia[i]: 项x^i的系数a_i 例如: f(x)=4x53x2+1f(x)=4x^5 -3x^2 +1 表示成:

小标i012345
a[i]10-3004