本节目录

排序

  • 一、冒泡排序
  • 二、选择排序
  • 三、插入排序
  • 四、快速排序
  • 五、堆排序
  • 六、归并排序
  • 七、NB三人组总结
  • 八、希尔排序
  • 九、计数排序
  • 十、桶排序
  • 十一、基数排序

查找

  • 一、顺序查找
  • 二、二分查找

递归

  • 汉诺塔问题

贪心算法

  • 定义
  • 找零问题
  • 背包问题
  • 拼接最大数字问题
  • 活动选择问题
  • 贪婪算法的弊端
  • 什么问题适用贪婪算法

动态规划

  • 斐波那契数列
  • 钢条切割问题
  • 最长公共子序列

欧几里得算法

RSA加密算法


 什么是算法?

 

  • 算法(Algorithm):一个计算过程,解决问题的方法

  • Niklaus Wirth:“程序=数据结构+算法“

算法入门示例

  • 示例1:时间复杂度初体验
"""
时间复杂度:衡量算法执行效率的快慢
a+b+c=1000,且a^2+b^2=c^2(a,b,c为自然数),如何求出所有a,b,c的自然数组合?
a,b,c
总时间=基本运算数量*执行次数
每台机器执行的总时间不同
但是执行基本运算数量大体相同
"""
import time

start_time = time.time()
# for a in range(1001):
#     for b in range(1001):
#         for c in range(1001):
#             if a+b+c==1000 and a**2+b**2==c**2:
#                 print('a,b,c:',a,b,c)      #222秒
"""
T = 1000 * 1000 * 1000 * 2
T = 2000 * 2000 * 2000 * 2
T = N * N * N *2
T(n) = n^3 * 2
T(n) = n^3 * 10
T(n) = n^3 * k
从数学上,T(n) = k*g(n),在现实中,省去细枝末叶,只剩下最显著特征
T(n) = g(n)
g(n) = n^3
"""
#顺序
#条件
#循环

for a in range(1001):
    for b in range(1001):
        c = 1000-a-b
        if a**2+b**2==c**2:
            print('a,b,c:',a,b,c)    #1秒
end_time = time.time()

print('times:',end_time-start_time)
print('finished')
"""
T(n) = n * n *(1+max(1,0))
     = n^2*2
     = 〇(n^2)
"""

  数据结构与算法系列(二)-- 算法数据结构与算法系列(二)-- 算法

示例2:列表效率对比

from timeit import Timer
"""
li1 = [1,2]
li2 = [23,5]
li = li1 + li2
li = [i for i in range(10000)]
li = list(range(10000))
"""


def t1():
    li = []
    for i in range(10000):
        li.append(i)


def t2():
    li = []
    for i in range(10000):
        # li = li + [i]   #218秒
        li += [i]  #1.04


def t3():
    li = [i for i in range(10000)]


def t4():
    li = list(range(10000))


def t5():
    li = []
    for i in range(10000):
        li.extend([i])


timer1 = Timer("t1()","from __main__ import t1")
print('append:',timer1.timeit(1000))
timer2 = Timer("t2()","from __main__ import t2")
print('+:',timer2.timeit(1000))
timer3 = Timer("t3()","from __main__ import t3")
print('[i for i in range]:',timer3.timeit(1000))
timer4 = Timer("t4()","from __main__ import t4")
print('list(range())',timer4.timeit(1000))
timer5 = Timer("t5()","from __main__ import t5")
print('extend:',timer5.timeit(1000))


def t6():
    li = []
    for i in range(10000):
        li.append(i)


def t7():
    li = []
    for i in range(10000):
        li.insert(0,i)


# timer6 = Timer("t6()","from __main__ import t6")
# print('append:',timer6.timeit(1000))
timer7 = Timer("t7()","from __main__ import t7")
print('insert:',timer7.timeit(1000))

#16,33s/test/t     #查找和替换

"""
数据结构是指数据对象中数据元素之间的关系
程序设计语言基本数据类型:int,float,string,char
Python内置数据结构:list,dict,tuple.
Python扩展数据结构:栈,队列
"""
"""
name
age
hometown
[
    ('zhangsan',24,'beijing'),
    ('zhangsan',24,'beijing'),
    ('zhangsan',24,'beijing'),
]
class Stus(object):
    def adds(self):pass
    def pop(self):pass
    def sort(self):pass
    def modify(self):pass
    

for stu in stus:
    if stu[0] == 'zhangsan':
[
    {'name':'zhangsan'},
    {'age':23},
    {'hometown':'beijjing'},
]
{
    'zhangsan':{
        'age':24,
        'hometown':'beijing',
    }
}
stu['zhangsan']
"""
列表效率对比

相关文章: