算法

作者: 微雨旧时歌丶 | 来源:发表于2019-11-06 09:59 被阅读0次
  • 大整数乘法 Karatsuba’s Algorithm
j = 13579246801593726048
k = 24680135792604815937

def karatsuba_multiply(j,k):
    n = int(len(str(min(j,k)))/2)
    if n==0 or j<10 or k<10:
        return j*k
    
    print(n)
    a, b = int(j/(10**n)), int(j%(10**n))
    c, d = int(k/(10**n)), int(k%(10**n))
    
    ac = karatsuba_multiply(a,c)   # a*c
    bd = karatsuba_multiply(b,d)   # b*d
    a_b_c_d = karatsuba_multiply((a+b),(c+d))   # (a+b)*(c+d)

    ad_bc = a_b_c_d - ac - bd  ## ad+bc
    return ac*(10**(2*n)) + ad_bc*(10**n) +bd
  • Select K 从列表中选择第k个最小的数 (索引从零开始) n-1+log(n) 次比较
### Select-k algorithm   比较的次数是 n-1 +log(n)     复杂度是多少???

···
#### 简单的查找
def merge_sort(lst):
    ## 由小到大排序列表, merge sort
    print(len(lst))
    if len(lst)<=1:
        return lst
    L,R = lst[:len(lst)//2], lst[len(lst)//2:]
    L = merge_sort(L)
    R = merge_sort(R)
    
    i,j=0,0   ### 将两个有序列表进行合并
    out = []
    while i<len(L) and j<len(R):
        if L[i]<=R[j]:
            out.append(L[i])
            i+=1
        else:
            out.append(R[j])
            j+=1
    out +=L[i:]+R[j:]
    return out
        

### runtime O(n logn)
def naive_select_k(lst, k):
    ##选择第k小的数
    lst = merge_sort(lst)
    return lst[k]
···


def partition(lst,  p):
    """
    按index p分成左右两部分
    """
    L, R = [], []
    for i in range(len(lst)):
        if i==p:
            continue
        
        L.append(lst[i]) if lst[i]<=lst[p] else R.append(lst[i])
    
    return L, lst[p], R  # 列表, 元素,列表    小--》大


def select_k(lst, k):
    if len(lst)==1:
        return lst[0]
    
    L, item, R = partition(lst, int(len(lst)/2))
    if len(L) == k:
        return item ## 前面的元素有k个,则索引为k的元素正是 item
    elif len(L) >k:
        return select_k(L,k)
    elif len(L)<k:
        return select_k(R, k-len(L)-1)

相关文章

  • 匈牙利算法

    算法思想 算法流程 算法步骤 算法实现 python 算法应用

  • web开发需要知道的几个算法

    算法分类 快速排序算法 深度优先算法 广度优先算法 堆排序算法 归并排序算法

  • 机器学习算法

    机器学习的算法分监督算法和无监督 算法。监督算法包括回归算法,神经网络,SVM;无监督算法包括聚类算法,降维算法。...

  • 字符串匹配

    BF 算法和 RK 算法BM 算法和 KMP 算法

  • 垃圾回收算法有几种类型? 他们对应的优缺点又是什么?

    常见的垃圾回收算法有: 标记-清除算法、复制算法、标记-整理算法、分代收集算法 标记-清除算法 标记—清除算法包括...

  • 头条-手撕代码

    [toc] 图算法 以及最短路径算法 树算法 手写LRU 排序算法 链表算法

  • 关于一些算法

    我们平常说的算法按照使用方向加密算法,排序算法,搜索算法,优化算法,音视频处理算法,图片处理算法 1.加密解密算法...

  • 给我巨大影响的技术书籍

    算法《算法概论》《算法设计与分析基础》 Anany Levitin《算法引论》Udi Manber《算法导论》《什...

  • 缓存相关

    cache淘汰算法:LIRS 算法 缓存那些事 Redis缓存淘汰算法,LRU算法,LRU算法讲解

  • LZW压缩算法

    参考链接:超级简单的数据压缩算法—LZW算法压缩算法——lzw算法实现LZW算法 LZW 压缩算法正确图解

网友评论

      本文标题:算法

      本文链接:https://www.haomeiwen.com/subject/xmnybctx.html