day10 python
 
    1.冒泡算法
        冒泡排序,把列表竖起来看,就像一个个气泡往上去(时间复杂度大)
lst = [12,3,3,2424,14,3567,534,324,324,23,4,23,42,4324]
 
for num in range(len(lst)):
    for i in range(len(lst)-1):
        if lst[i] > lst[i+1]:
            lst[i], lst[i+1] = lst[i+1], lst[i]
print(lst)
        
        冒泡排序,优化后代码
lst = [12,3,3,2424,14,3567,534,324,324,23,4,23,42,4324]
 
for num in range(len(lst)):
    for i in range(len(lst)-1-num):                #冒完一次泡后, 以后冒泡的时候就可以少冒一个, 依次递减
        if lst[i] > lst[i+1]:
            lst[i], lst[i+1] = lst[i+1], lst[i]
print(lst)
 
    2.二分法:
        二分法进行查找,每次能够排除掉一半的数据. 查找效率非常高
        要求: 查找的序列必须是有序序列
        原生二分法:
lst = [1,2,4,5,9,21,23,34,35,56,87,123,231,345,678,999]
n = 35
 
for i in lst:               #遍历查找   #最大时间复杂度o(n)
    if i == n:
        print('found')
        break
else:
    print('not found')
 
left = 0
right = len(lst)-1
while left <= right:            #使用二分法可以提高效率(有序的才能用这种方法)(一次砍一半)
    middle = (left + right)//2  #这里必须是整除
    if lst[middle] > n:         #2**n < 数据量;    比如1亿个数, 27次就可以找到
        right = middle - 1
    if lst[middle] < n:
        left = middle + 1
    if lst[middle] == n:
        print('found')
        break
else:
    print('not found')
        
        递归可以完成二分法
lst = [1,2,4,5,9,21,23,34,35,56,87,123,231,345,678,999]
def func(n,left,right):
    if left <= right:                   #为啥不用while, 因为用了递归
        middle = (left + right)//2
        if n > lst[middle]:
            left = middle + 1
            return func(n, left, right)     #递归
        if n < lst[middle]:
            right = middle - 1
            return func(n, left, right)     #递归    #返回值的问题: 如果递归了很多层, 最后一层得到结果,返回给倒数第二层, 就完事了. 如何一层层返回: return 倒数第二层给倒数第三次, 依次类推直到返回给第一层.
        if n == lst[middle]:
            print('found')
            return middle              #通过return返回, 不能用break
    else:
        print('not found')
        return -1                      #1.模仿find找不到返回 -1(一般index是整数); 2. -1 比 None好运算,可能会用到
rst = func(87, 0, len(lst)-1)
print(rst)
    
    3.查找最快的方案
lst1 = [2,3,5,6,8]
lst2 = [0 for i in range(max(lst1)+1)]      #找到列表中最大的数, 作为都是 0 的新列表的长度
 
for el in lst1:                             #把数字变成index
    lst2[el] = 1
n = 1
if lst2[n] == 1:                            #优点o(1)   时间复杂度, 空间复杂度最低   
    print('it is in')
else:
    print('it not in')
 
 
    4.c3算法
class A:
    pass
class B(A):
    pass
class C(B):
    pass
class D:
    pass
class E(D,C):
    pass
class F:
    pass
class G(F):
    pass
class H(C,G):
    pass
class Foo(E,H):
    pass                                                 #c3算法:
                                                         #自己先拿出来, 最优先,先安放好
L(E) = D,object + C,B,A,object                           #拿出第一个的表头,和第二个(除表头)比, 如果没有相等的, 把第一个表头去掉安放好
>>>E,D,C,B,A,object                                      #如果有相等的, 第一个表头就不动, 然后从第二个拿出表头, 和第一个(除表头比)  
                                                         #依次类推, c3 算法可以得到继承顺序
L(H) = C,B,A,object + G,F,object
>>>H,C,B,A,G,F,object
 
L(Foo) = E + H
L(Foo) = E,D,C,B,A,object + H,C,B,A,G,F,object
>>>Foo,E,D,H,C,B,A,G,F,object
 
 
 
 
 
 
 
 

day10 python算法 冒泡算法 二分法 最快查找算法 c3算法的更多相关文章

  1. python之排序算法-冒泡、选排、快排

    影响内排序算法性能的三个因素: 时间复杂度:即时间性能,高效率的排序算法应该是具有尽可能少的关键字比较次数和记录的移动次数 空间复杂度:主要是执行算法所需要的辅助空间,越少越好. 算法复杂性.主要是指 ...

  2. Python新式类继承的C3算法

    在Python的新式类中,方法解析顺序并非是广度优先的算法,而是采用C3算法,只是在某些情况下,C3算法的结果恰巧符合广度优先算法的结果. 可以通过代码来验证下: class NewStyleClas ...

  3. Python C3 算法 手动计算顺序

    Python C3 算法 手动计算顺序   手动计算类继承C3算法原则: 以所求类的直接子类的数目分成相应部分 按照从左往右的顺序依次写出继承关系 继承关系第一个第一位,在所有后面关系都是第一个出现的 ...

  4. Python之从继承到C3算法

    在Python2.X和Python3.X有很多不同的地方,其中一个区别就是和继承有关. 在Python3.X中,一个类如果没有指明其继承哪个类的时候,其默认就是继承object类. 而在Python2 ...

  5. 类的继承和C3算法

    在Python的新式类中,方法解析顺序并非是广度优先的算法,而是采用C3算法,只是在某些情况下,C3算法的结果恰巧符合广度优先算法的结果. 可以通过代码来验证下: class NewStyleClas ...

  6. day21 MRO和C3算法

    核能来袭 --MRO和C3算法 1. python的多继承 2.python经典类的MRO 3.python新式类的MRO, C3算法 4.super 是什么鬼? 一.python的多继承 在前面的学 ...

  7. 面向对象多继承(c3算法)、网络基础和编写网络相关的程序

    一.面向对象多继承(c3算法) a.有多个父类先找左,再找右,如下示例: class A(object): pass class B(object): def f1(self): print('B') ...

  8. 面向对象多继承(C3算法)/网络编程

    https://www.cnblogs.com/aylin/p/5572104.html 一.面向对象多继承(c3算法) a.有多个父类先找左,再找右,如下示例: class A(object): p ...

  9. 常用查找数据结构及算法(Python实现)

    目录 一.基本概念 二.无序表查找 三.有序表查找 3.1 二分查找(Binary Search) 3.2 插值查找 3.3 斐波那契查找 四.线性索引查找 4.1 稠密索引 4.2 分块索引 4.3 ...

随机推荐

  1. 作业(二)—python实现wc命令

    Gitee地址:https://gitee.com/c1e4r/word-count(为什么老师不让我们用github) 0x00 前言 好久没发博客了,感觉自己的学习是有点偷懒了.这篇博客也是应专业 ...

  2. mysql百万级别重排主键id(网上的删除重建id在大数据量下会出错)

    网上教程: 先删除旧的主键 再新建主键 :数据量少时没问题,不会出现主键自增空缺间隔的情况(如:1,2,3,5):但是大数据量时会出现如上所述问题(可能是内部mysql多进程或多线程同时操作引起问题) ...

  3. GitHub区域和工作流程

    workspace:工作区 index:暂存区 repository:本地版本库 remote:远程仓库 首先到托管服务器上创建一个空版本库,例如在github.coding.oschina等 然后克 ...

  4. python 发送请求

    data = {"a":1,"b":2} urllib2 get: get_data = urllib.urlencode(data) req_url = UR ...

  5. ECUST_Algorithm_2019_4

    简要题意及解析 1001 第三次作业原题,略. 1002 把一个数转换为二进制. 不断除以\(2\)取余就好了.写递归代码会非常短. 时间复杂度\(O(Tlogn)\) \(T\)是数据组数,\(n\ ...

  6. disk或者Partition镜像的制作

    备份镜像还原一般都是在client-server端这边才有涉及,不过作为平时爱折腾的咸鱼,表示偶尔玩玩这种操作也不错: 工具:pc  X  1(装有 大白菜,装机吧,一类制作pe软件的即可,大同小异) ...

  7. ps查看和调整优先级

    主题ps查看和调整优先级 一查看优先级 nice值越大优先级越低 [root@centos72 ~]# ps axo pid,cmd,ni | head PID CMD NI 1 /usr/lib/s ...

  8. objective-c: Functions and static keyword

    Functions function is a concept for C programming language, objective-c is entirely relies on C. To ...

  9. 【Shiro】五、Apache Shiro加密

    Shiro提供了更好封装,更好使用的加密算法API,可以作为平时使用的一个工具类的预选方案. Shiro的密码学 基本特性 接口驱动,基于POJO 对JCE(Java Cryptography Ext ...

  10. 泰坦尼克号沉没之谜,用数据还原真相——Titanic获救率分析(用pyecharts)

    泰坦尼克号获救率数据分析报告,用数据揭露真相. 一,船上乘客生存率分析报告 泰坦尼克号生存率仅有38%的,可见此次事件救援不力,救生艇严重不足,且泰坦尼克号号撞得是冰山,海水冷,没有救生艇,在水里冻死 ...