算法解读之Python篇

TSP、MTSP问题遗传算法详细解读及python实现 写在前面 遗传算法是一种求解NPC问题的启发式算法,属于仿生进化算法族的一员。仿生进化算法是受生物行为启发而发明的智能优化算法,往往是人们发现某种生物的个体虽然行为较为简单,但生物集群通过某种原理却能表现出智能行为。于是不同的人研究不同的生物行为原理,受到启发而发明出新的仿生进化算法。比如免疫优化算法,蚁群算法,模拟退火算法等,这些算法以后也会简单介绍。 本文的主题是遗传算法,该算法也是受到生物行为启发。物竞天择,适者生存,优胜劣汰,是该优化算法的核心思想。笔者在业务中需要用到遗传算法求解TSP问题,但是网 阅读详情

堆排序

堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆,是完全二叉树。大根堆的要求是每个节点的值都不大于其父节点的值,即A[PARENT[i]] >= A[i]。在数组的非降序排序中,需要使用的就是大根堆,因为根据大根堆的要求可知,最大的值一定在堆顶。

def adjust_heap(lists, i, size):
    lchild = 2 * i + 1
    rchild = 2 * i + 2
    max = i
    if i < size / 2:
        if lchild < size and lists[lchild] > lists[max]:
            max = lchild
        if rchild < size and lists[rchild] > lists[max]:
            max = rchild
        if max != i:
            lists[max], lists[i] = lists[i], lists[max]
            adjust_heap(lists, max, size)

def build_heap(lists, size):
    for i in range(0, (size/2))[::-1]:
        adjust_heap(lists, i, size)

def heap_sort(lists):
    size = len(lists)
    build_heap(lists, size)
    for i in range(0, size)[::-1]:
        lists[0], lists[i] = lists[i], lists[0]
        adjust_heap(lists, 0, i)

归并排序

归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。

归并过程为:比较a[i]和b[j]的大小,若a[i]≤b[j],则将第一个有序表中的元素a[i]复制到r[k]中,并令i和k分别加上1;否则将第二个有序表中的元素b[j]复制到r[k]中,并令j和k分别加上1,如此循环下去,直到其中一个有序表取完,然后再将另一个有序表中剩余的元素复制到r中从下标k到下标t的单元。归并排序的算法我们通常用递归实现,先把待排序区间[s,t]以中点二分,接着把左边子区间排序,再把右边子区间排序,最后把左区间和右区间用一次归并操作合并成有序的区间[s,t]。

def merge(left, right):
    i, j = 0, 0
    result = []
    while i < len(left) and j < len(right):
        if left[i] <= right[j]:
            result.append(left[i])
            i += 1
        else:
            result.append(right[j])
            j += 1
    result += left[i:]
    result += right[j:]
    return result

def merge_sort(lists):
    if len(lists) <= 1:
        return lists
    num = len(lists) / 2
    left = merge_sort(lists[:num])
    right = merge_sort(lists[num:])
    return merge(left, right)

基数排序

基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O (nlog(r)m),其中r为所采取的基数,而m为堆数,在某些时候,基数排序法的效率高于其它的稳定性排序法。

import math
def radix_sort(lists, radix=10):
    k = int(math.ceil(math.log(max(lists), radix)))
    bucket = [[] for i in range(radix)]
    for i in range(1, k+1):
        for j in lists:
            bucket[j/(radix**(i-1)) % (radix**i)].append(j)
        del lists[:]
        for z in bucket:
            lists += z
            del z[:]
    return lists

笛卡尔乘积

笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尓积(Cartesian product),又称直积,表示为X × Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员。
a=[1,2,3,4]
b=[5,6,7,8]
c=[(x,y,x*y) for x in a for y in b]
print(c)

斐波拉契数列

斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用
a,b=0,1
for i in range(0,12):
    c=a+b
    a=b
    b=c
    print(c)
    a,b=b,a+b
a=[1,1]
for i in range(2,12):
    a.append(a[i-1]+a[i-2])
a.reverse()
print(a)
def f(n=12):
    count=1
    a,b=0,1
    while count<=n:
        yield b
        a,b=b,a+b
        count+=1
for i in f(12):
    print (i)
EVM算法的Python实现 EVM(Eulerian Video Magnification,欧拉视频放大或欧拉影像放大)是一种将视频中的微小变化进行放大的算法,正如论文标题所说《Eulerian Video Magnification for Revealing Subtle Changes in the World》,该算法可以将视频中的微小变化转变为肉眼可以 阅读详情

相关推荐

一文解读Python的五种常见算法

这篇文章主要介绍了如何用Python实现几种常见算法,文中代码简单易懂非常适合零基础刚刚入门的小伙伴,方便大家更好的学习~以上就是五个Python的常见算法~

python03011的博客 1005

《Python 100例》练习,基于Python 3.5做了一遍

搜语法的时候无意间在这里发现了个python100题。 本着复习python的想法做了一下,过程中发现有些题不像是python的,网上一搜才知道这东西原名叫做《C语言程序设计100个经典例子》,果然好坑。 挑能做的做了一遍,有的需要思考一下;而有的题对于python而言,实现起来实在太简单了。 ------------------- 2018.2.1 补充tm016,关于datetime使...

watfe的专栏 3万+

【华为OD机试真题】简单的解压缩算法(java&python) 100%通过率 超详细代码注释 代码深度解读

已支持(java&python)原题描述 100%通过率 超详细代码注释 代码深度解读

笑着的程序员的博客 1903

python算法解析

以下内容摘抄自:https://blog.youkuaiyun.com/watfe/article/details/79206165 #!/usr/bin/env python3 -- coding: utf-8 -- ‘’’ 2018.1.30 Python 练习100题 http://www.runoob.com/python/python-100-examples.html ‘’’ ‘’’ 题...

licshow的博客 943

【华为OD机试真题】积木最远距离(相同数字的积木游戏1)(python)100%通过率 超详细代码注释 代码解读

(python)100%通过率 超详细代码注释 代码解读

笑着的程序员的博客 1005

【华为OD机试真题】计算至少需要多少个快递主站点(java&python)100%通过率 超详细代码注释 代码深度解读

已支持(java&python)原题描述 100%通过率 超详细代码注释 代码深度解读

笑着的程序员的博客 1551

这可能是史上最全的 Python 算法集!| 技术头条

本文是一些机器人算法(特别是自动导航算法)的Python代码合集。其主要特点有以下三点:选择了在实践中广泛应用的算法;依赖最少;容易阅读,容易理解每个算法的基本思想。希望...

优快云资讯 1万+

【华为OD机试真题】最优资源分配(java&python)100%通过率 超详细代码注释 代码深度解读

已支持(java&python)原题描述 100%通过率 超详细代码注释 代码深度解读

笑着的程序员的博客 1364

使用Anomalib项目的padim无监督算法 进行自制工业缺陷数据集的模型训练和ONNX部署(二)——Python代码解读篇

上一篇博客中完成了Anomalib中padim算法的模型训练,得到了onnx模型以及推理的效果,想看这部分的同学可以上翻...对于像我一样根本没读论文的同学,获得了onnx模型以后大概率一脸懵,输入是什么?输出是什么?需要经过什么样的预处理和后处理?如何画出和Anomalib项目中一样好看的概率热图呢?C++中如何部署?本篇博客会带大家逐个分析这些问题。(本来想和C++部署一起写的,但是实在太长了。想直接看C++代码的同学略过本篇,下一篇三天内发出来Orz)

m0_57315535的博客 6597

【华为OD机试真题】上班之路(C++&java&python)100%通过率 超详细代码注释 代码深度解读

已支持(C++&java&python)原题描述 100%通过率 超详细代码注释 代码深度解读

笑着的程序员的博客 1240

【华为OD机试真题】最差产品奖(java&python)100%通过率 超详细代码注释 代码深度解读

已支持(java&python)原题描述 100%通过率 超详细代码注释 代码深度解读

笑着的程序员的博客 443

图解算法英文版资源,阅读笔记及代码(Python)

图解代码的英文资源,阅读摘要以及书中代码(Python)

Ivy19980324的博客 550

【华为OD机试真题】 统计差异值大于相似值二元组个数(java&python)100%通过率 超详细代码注释 代码深度解读

已支持(java&python)原题描述 100%通过率 超详细代码注释 代码深度解读

笑着的程序员的博客 951

乘积小于 K 的子数组

文章目录今日题目题目解读算法思想代码实现 今日题目 今天LeetCode每日一题:713.乘积小于 K 的子数组【难度:中等】 给你一个整数数组 nums 和一个整数 k ,请你返回子数组内所有元素的乘积严格小于 k 的连续子数组的数目。 例如 输入:nums = [10,5,2,6], k = 100 输出:8 解释:8 个乘积小于 100 的子数组分别为:[10]、[5]、[2],、[6]、[10,5]、[5,2]、[2,6]、[5,2,6]。 需要注意的是 [10,5,2] 并不是乘积小于 10

coding makes me happy 365

【华为OD机试真题】整理扑克牌(java&python)100%通过率 超详细代码注释 代码解读

已支持(java&python)原题描述 100%通过率 超详细代码注释 代码解读

笑着的程序员的博客 606

【华为OD机试真题】不爱施肥的小布(C++&C&java&python)100%通过率 超详细代码注释 代码深度解读

已支持(C++&C&java&python)原题描述 100%通过率 超详细代码注释 代码深度解读

笑着的程序员的博客 889

python 苹果放入10个篮子 任意数量_Python实现分苹果(递归)

目录题目描述输入/输出描述题目分析代码展示传送门题目描述M个同样的苹果分在N个同样的篮子里,允许有篮子空着不放,求一共有多少种不同的分法。说明,3,1,1和1,3,1是一种分法;篮子可以放入的苹果数量没有最大限制。输入/输出描述输入:两个整数M和N,例如 7 3输出:一个整数K,表示一共有K种分苹果的方法。题目分析先假设篮子数量和苹果数足够多,输入合法。当苹果的数量少于篮子数,至少有basket ...

weixin_31951989的博客 1478

【华为OD机试真题】羊、狼、农夫过河(C++&java&python)满分 详细代码注释 代码深度解读

已支持(C++&java&python)满分 详细代码注释 代码深度解读

u013846552的博客 513
上一篇: Linux(Cent Os7)安装配置JDK
下一篇: Python之集合,字典 迭代器
C_FuL
博客等级 码龄10年 15粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值