精华内容
下载资源
问答
  • Python算法实战视频课程--栈的应用

    千人学习 2016-05-11 09:21:09
    栈是程序设计中被广泛使用的数据结构, 很多问题都满足栈"后进先出"的特性, 本课程以实际应用为主, 先了解栈的基本特性, 操作接口以及python中的使用后, 以多个编程实例带领大家真正学会栈在实际问题中的运用.
  • Python算法实战视频课程--队列的应用

    千人学习 2016-05-11 09:28:43
    队列是程序设计中被广泛使用的数据结构, 很多问题都满足队列"先进先出"的特性(例如, 广度有限搜索), 本课程以实际应用为主, 先了解队列的基本特性, 操作接口以及学习使用python标准库中的deque, 以多个编程实例带领...
  • A* 算法的理解,请看这里*A星算法详解(个人认为最详细,最通俗易懂的一个版本),本文着重于将实际问题的数学化,并用A算法求解。 问题描述:在一个矩形区域内,已知一些标记,实现起点到终点的自动路径规划。规则:...

    A* 算法的理解,请看这里:

      A算法的示例程序请查看 paulQuei 。本文着重于将实际问题的数学化,并用A算法求解。源码我已经上传至Gitee,安装好git后可以直接Clone:

    git clone https://gitee.com/ascloudwalker/algorithem.git
    

    1 .问题描述:
      在一个矩形区域内,已知一关键路径点,实现起点到终点的自动路径规划。规则:只能移动到X方向,或者Y方向相邻的点,不能对角线移动。

    在这里插入图片描述2.方法描述:
      面对这个问题,我首先想到了A Star算法,下图就是示例程序中A Star算法的路径寻找过程:首先构建了一个正方形(矩形)的map,每一个坐标点用一个小矩形表示,灰色表示障碍物,规划目标是从左下角到右上角。蓝色方块表示算法在寻找路径的过程,绿色方块表示找到的路径。
    在这里插入图片描述

      本文中的问题与上述示例的差别在于:示例中的坐标是相邻的整数,数据本身就说明了各点之间的相邻关系,比如(1,2)和(2,2);而本文的问题中,坐标并不是一定相邻的,例如(1,2)和(2,4)是否能够直接连接(直接到达)需要建立新的相邻关系。于是我想到了图(graph),通过node(节点)和edge(边)来建立点的相邻关系。所以,在我的计算中,map不再是上图的矩形网格,而是下图所示的图(graph)。
    在这里插入图片描述  除此以外:我自定义了Cost(指标)计算表达式、障碍点判断表达式。依然使用示例程序给出的A*算法结构流程,可以得到如下结果:(蓝色是算法的寻找路径过程,绿色为最终寻找的轨迹)
    在这里插入图片描述
      更多点以及增加不可用障碍点后的效果:
    在这里插入图片描述
    附:动图生成方法
    程序中将每一次生成的图保存为图片(如png),再使用ImageMagick 进程处理:

    magick *.png image.gif #生成gif
    magick images.gif -layers Optimize dest.gif #压缩衣gif
    

    在这里插入图片描述

    展开全文
  • Python算法实战视频课程--图

    千人学习 2016-05-11 09:36:15
    图是程序设计中被广泛使用的数据结构, 它比栈,队列,树更复杂. 图是对实际问题进行数学...本套课程我们学习图的基本概念,常用接口, 以及如何在python中使用图, 图的基本算法, 后以几个经典问题体会图在实际问题中的应用.
  • 探索不断扩展的遗传算法世界,以解决搜索、优化和人工智能相关的任务,并使用Python库(如DEAP、scikit-learn和NumPy)改进机器学习模型 Explore the ever-growing world of genetic algorithms to solve search, ...

    探索不断扩展的遗传算法世界,以解决搜索、优化和人工智能相关的任务,并使用Python库(如DEAP、scikit-learn和NumPy)改进机器学习模型

    Explore the ever-growing world of genetic algorithms to solve search, optimization, and AI-related tasks, and improve machine learning models using Python libraries such as DEAP, scikit-learn, and NumPy

    主要特点

    •用这本快节奏的指南探索遗传算法的来龙去脉

    •使用Python实现特征选择、搜索优化和聚类分析等任务

    •解决组合问题、优化函数,提升人工智能应用的性能

    Key Features

    • Explore the ins and outs of genetic algorithms with this fast-paced guide

    • Implement tasks such as feature selection, search optimization, and cluster analysis using Python

    • Solve combinatorial problems, optimize functions, and enhance the performance of artificial intelligence applications

    遗传算法是受自然进化原理启发的一系列搜索、优化和学习算法。通过模拟进化过程,遗传算法可以克服传统搜索算法中遇到的障碍,为各种问题提供高质量的解决方案。这本书将帮助你掌握一个强大而简单的方法,使用Python将遗传算法应用到广泛的任务中,包括人工智能的最新发展。

    Book Description

    Genetic algorithms are a family of search, optimization, and learning algorithms inspired by the principles of natural evolution. By imitating the evolutionary process, genetic algorithms can overcome hurdles encountered in traditional search algorithms and provide high-quality solutions for a variety of problems. This book will help you get to grips with a powerful yet simple approach to applying genetic algorithms to a wide range of tasks using Python, covering the latest developments in artificial intelligence.

    在向您介绍遗传算法及其工作原理之后,您将了解它们与传统算法的区别以及它们可以解决哪些类型的问题。然后您将发现如何将它们应用于搜索和优化问题,例如计划、调度、游戏和分析。随着学习的深入,您还将学习如何使用遗传算法来改进机器学习和深度学习模型,解决强化学习任务,以及执行图像重建。最后,您将学习一些相关的技术,这些技术可以为将来的应用开辟新的可能性。

    After introducing you to genetic algorithms and their principles of operation, you'll understand how they differ from traditional algorithms and what types of problems they can solve. You'll then discover how they can be applied to search and optimization problems, such as planning, scheduling, gaming, and analytics. As you advance, you'll also learn how to use genetic algorithms to improve your machine learning and deep learning models, solve reinforcement learning tasks, and perform image reconstruction. Finally, you'll cover several related technologies that can open up new possibilities for future applications.

    在这本书的结尾,你将拥有在人工智能以及许多其他领域应用遗传算法的实际经验

    By the end of this book, you'll have hands-on experience applying genetic algorithms in artificial intelligence as well as numerous other domains.

    你将学到什么

    •学习使用最先进的Python工具创建基于遗传算法的应用程序

    •使用遗传算法优化功能并解决计划和调度问题

    •提高机器学习模型的性能,优化深度学习网络架构

    •使用OpenAI Gym将遗传算法应用于强化学习任务

    •探索如何使用一组半透明形状重建图像

    发现其他受生物启发的技术,如遗传编程和粒子群优化

    What you will learn

    • Learn to use state-of-the-art Python tools to create genetic algorithm-based applications

    • Use genetic algorithms to optimize functions and solve planning and scheduling problems

    • Enhance the performance of machine learning models and optimize deep-learning network architecture

    • Apply genetic algorithms to reinforcement learning tasks using OpenAI Gym

    • Explore how images can be reconstructed using a set of semi-transparent shapes

    • Discover other bio-inspired techniques such as genetic programming and particle swarm optimization

    这本书是为希望使用遗传算法在应用程序中执行智能任务的软件开发人员、数据科学家和人工智能爱好者编写的,本书中的Python和计算机基础知识将帮助你的工作。

    Who This Book Is For

    This book is for software developers, data scientists, and AI enthusiasts who want to use genetic algorithms to carry out intelligent tasks in their applications. Working knowledge of Python and basic knowledge of mathematics and computer science will help you get the most out of this book.

    完整资料领取

    展开全文
  • 主要介绍了以Python代码实例展示kNN算法实际运用,这里举了一个用来预测豆瓣电影用户的性别的例子,需要的朋友可以参考下
  • 这篇文章主要介绍了Python退火算法在高次方程的应用,需要的朋友可以参考下 文章目录一,简介二,计算方程三,总结 一,简介 退火算法不言而喻,就是钢铁在淬炼过程中失温而成稳定态时的过程,热力学上温度(内能)越...

    @本文来源于公众号:csdn2299,喜欢可以关注公众号 程序员学府
    退火算法就是钢铁在淬炼过程中失温而成稳定态时的过程,热力学上温度(内能)越高原子态越不稳定。这篇文章主要介绍了Python退火算法在高次方程的应用,需要的朋友可以参考下

    一,简介

    退火算法不言而喻,就是钢铁在淬炼过程中失温而成稳定态时的过程,热力学上温度(内能)越高原子态越不稳定,而温度有一个向低温区辐射降温的物理过程,当物质内能不再降低时候该物质原子态逐渐成为稳定有序态,这对我们从随机复杂问题中找出最优解有一定借鉴意义,将这个过程化为算法,具体参见其他资料。

    二,计算方程

    我们所要计算的方程是f(x) = (x - 2) * (x + 3) * (x + 8) * (x - 9),是一个一元四次方程,我们称为高次方程,当然这个函数的开口是向上的,那么在一个无限长的区间内我们可能找不出最大值点,因此我们尝试在较短区间内解最小值点,我们成为最优解。
    解法一:

    毫无疑问,数学方法多次求导基本可以解出,但是这个过程较复杂,还容易算错,我就不赘述了,读者有时间自己可以尝试解一下。

    解法二:

    这个解法就是暴力解决了,我们这里只求解区间[-10,10]上的最优解,直接随机200个点,再除以10(这样可以得到非整数横坐标),再依此计算其纵坐标f(x),min{f(x)}一下,用list的index方法找出最小值对应位置就行了,然后画出图形大致瞄一瞄。

    直接贴代码:

    import random
    import matplotlib.pyplot as plt
    list_x = []
    # for i in range(1):
    #   #print(random.randint(0,100))
    #   for i in range(0,100):
    #     print("sss",i)
    #
    #   list_x.append(random.randint(0,100))
    for i in range(-100,100):
      list_x.append(i/10)
    print("横坐标为:",list_x)
    print(len(list_x))
    list_y = []
    for x in list_x:
      # print(x)
      #y = x*x*x - 60*x*x -4*x +6
      y = (x - 2) * (x + 3) * (x + 8) * (x - 9)
      list_y.append(y)
    print("纵坐标为:",list_y)
    #经验证,这里算出来的结果6.5和最优解1549都是对的
    print("最小值为:",min(list_y))
    num = min(list_y)
    print("最优解:",list_y.index(num)/10)
    print("第",list_y.index(num)/10-10,"个位置取得最小值")
    plt.plot(list_x, list_y, label='NM')
    #plt.plot(x2, y2, label='Second Line')
    plt.xlabel('X') #横坐标标题
    plt.ylabel('Y') #纵坐标标题
    #plt.title('Interesting Graph\nCheck it out',loc="right")  #图像标题
    #plt.title('Interesting Graph\nCheck it out')
    plt.legend()  #显示Fisrt Line和Second Line(label)的设置
    plt.savefig('C:/Users/zhengyong/Desktop/1.png')
    plt.show()
    

    得到如下结果:
    在这里插入图片描述
    那么我们得出最优解的坐标是(6.5,-1549.6875),结果先放这里,接下来用退火算法看能不能解出。

    解法三:

    我们看一张图(解法二中的方法得出的图),然后讲讲退火算法的最核心的思想。
    在这里插入图片描述
    首先,先随机一个[-10.10]之间的随机解,作为初始解空间,比方说随机了一个位于[-2.5.2.5]中最高的那个点就是点1(横坐标为x1),他有对于的纵坐标的值y1,这时候我们把这个点的横坐标随机加或者减去一个值(注意这个值的大小很重要,我们先叫他随机移动值),加或者减后得到新的横坐标的值x2,再算出这个横坐标的对应纵坐标(y2),对比之前的纵坐标的大小,这里设置

    delta = y2-y1,发现无论怎样都是小于原先的纵坐标(前提是随机移动值足够小),这时候我们把新得到的x2赋值给x1,这时候现在的x2的值传给x1,x1是原先随机的值,这个过程可以重复iter_num 次,大小就根据自己的区间来。
    上述的整个过程是在一个温度下进行的,这个过程结束后我们用温度更新公式再次的更新温度,再去重复上述步骤。

    温度更新我是用的常用的公式是T(t)=aT0(t-1),其中0.85≦a≦0.99。也可用相应的热能衰减公式来计算,T(t)=T0/(1+lnt),t=1,2,3,…,这都是简单的状态更新方法。

    也就是说,不管你随机的是几我都能朝着优化的方向前进(前提是非最优点)。

    其次,点2 是同理的,区别在于他是局部最优解,那么跳出这个局部最优解的机制是什么呢?

    若初始点是(x3,y3),然后用上述方法得出(x4,y4),在点二处得到的delta肯定是大于0的,那么怎么办呢?当大于0的时候我们每次都有一定的概率来接受这个看起来不是最优的点,叫Metropolis准则,具体是这样的:在这里插入图片描述
    这里的E就是y,T就是当前温度,delta小于0就是百分百接受新值,否者就是按照这个概率接受,当迭代多次的时候,每次向右移动的步长累加到点1 时候他就有可能找到最终的最优解了,步长是累加的但是概率是累成的,意味着这个概率很小,但是一旦迭代次数多久一定会跑出来到最优解处。

    最优,点3不解释了哈,和上面一样。

    那么我们上代码:

    #自己改写的退火算法计算方程(x - 2) * (x + 3) * (x + 8) * (x - 9)的计算方法
    #class没啥用
    import numpy as np
    import matplotlib.pyplot as plt
    from matplotlib import pyplot as plt 
    #设置基本参数
    #T初始温度,T_stop,iter_num每个温度的迭代次数,Q温度衰减次数
    class Tuihuo_alg():
      def __init__(self,T_start,iter_num,T_stop,Q,xx,init_x):
        self.T_start = T_start
        self.iter =iter_num
        self.T_stop = T_stop
        self.Q = Q
        self.xx = xx
        self.init_x = init_x
      # def cal_x2y(self):
      #   return (x - 2) * (x + 3) * (x + 8) * (x - 9)
    if __name__ == '__main__':
      def cal_x2y(x):
        #print((x - 2) * (x + 3) * (x + 8) * (x - 9))
        return (x - 2) * (x + 3) * (x + 8) * (x - 9)
      T_start = 1000
      iter_num = 1000
      T_stop = 1
      Q = 0.95
      K = 1
      l_boundary = -10
      r_boundary = 10
      #初始值
      xx = np.linspace(l_boundary, r_boundary, 300)
      yy = cal_x2y(xx)
      init_x =10 * ( 2 * np.random.rand() - 1)
      print("init_x:",init_x)
      t = Tuihuo_alg(T_start,iter_num,T_stop,Q,xx,init_x)
      val_list = [init_x]
      while T_start>T_stop:
        for i in range(iter_num):
          init_y = cal_x2y(init_x)
          #这个区间(2 * np.random.rand() - 1)本身是(-1,1),所以加上就是一个随机加或者减过程
          new_x = init_x + (2 * np.random.rand() - 1)
          if l_boundary <= new_x <= r_boundary:
            new_y = cal_x2y(new_x)
        #print("new_x:",new_x)
        #print('new_y:',new_y)
            delta = new_y - init_y #新减旧
            if delta < 0:
              init_x = new_x
            else:
              p = np.exp(-delta / (K * T_start))
              if np.random.rand() < p:
                init_x = new_x
          #print("new_x:",new_x)
          #print("当前温度:",T_start)
        T_start = T_start * Q
    print("最优解x是:", init_x)  #这里最初写的是new_x,所以结果一直不对
    print("最优解是:", init_y)
    #比如我加上new_x,真假之间的误差实际就是最后一次的赋值“init_x = new_x”
    print("假最优解x是:", new_x)  #这里最初写的是new_x,所以结果一直不对
    print("假最优解是:", new_y)
    xx = np.linspace(l_boundary,r_boundary,300)
    yy = cal_x2y(xx)
    plt.plot(xx, yy, label='Tuihuo')
    #plt.plot(x2, y2, label='Second Line')
    plt.xlabel('X for tuihuo') #横坐标标题
    plt.ylabel('Y for tuihuo') #纵坐标标题
    #plt.title('Interesting Graph\nCheck it out',loc="right")  #图像标题
    #plt.title('Interesting Graph\nCheck it out')
    plt.legend()  #显示Fisrt Line和Second Line(label)的设置
    plt.savefig('C:/Users/zhengyong/Desktop/1.png')
    plt.show()
    

    这里用了class,发现并不需要,但是不想改了,就这样吧。

    最优结果为:
    在这里插入图片描述
    得出的示意图为:在这里插入图片描述

    三,总结

    退火算法的具体思想我没怎么讲,但是核心的点我都写出来了,经过验证发现退火算法得出了(6.551677228904226,-1548.933671426107)的最优解,看看解法二的(6.5,-1549.6875),我们发现,呵呵,差不多,误差来讲的话,能接受,当然读者也可以多跑几个数据出来验证。

    我的实验环境是Python3.6,Numpy1.14.3,matplotlib2.2.2,64位win10,1709教育版,OS内核16299.547,就这样吧,尽量讲详细点。
    非常感谢你的阅读
    大学的时候选择了自学python,工作了发现吃了计算机基础不好的亏,学历不行这是没办法的事,只能后天弥补,于是在编码之外开启了自己的逆袭之路,不断的学习python核心知识,深入的研习计算机基础知识,整理好了,我放在我们的微信公众号《程序员学府》,如果你也不甘平庸,那就与我一起在编码之外,不断成长吧!

    其实这里不仅有技术,更有那些技术之外的东西,比如,如何做一个精致的程序员,而不是“屌丝”,程序员本身就是高贵的一种存在啊,难道不是吗?[点击加入]
    想做你自己想成为高尚人,加油!

    展开全文
  • 最全Python算法入门

    千次阅读 2020-03-30 09:02:00
    本文经AI新媒体量子位(ID:QbitAI)授权转载,转载请联系出处问耕 发自 凹非寺【导读】Github上超过6.8万星标:最全算法Python实现...
    本文经AI新媒体量子位(ID:QbitAI)授权转载,转载请联系出处
    问耕 发自 凹非寺
    【导读】Github上超过6.8万星标:最全算法及Python实现。该项目的算法包括排序、搜索等经典算法,描述较为详细,对算法原理本身、应用场景以及实现过程的可视化等。

    我们讨论机器学习的时候,其实很多时候都是在讨论算法。今天新智元向大家推荐一个好资源,用Python实现所有算法。该项目在Github上已经获得了超过6.8万星标,可以说非常受欢迎了。

    该项目主要包括两方面内容:算法的基本原理讲解,以及Python代码实现,并给出了算法实现过程的动图,非常直观易懂。项目地址:

    https://github.com/TheAlgorithms/Python

    排序算法介绍及代码实现

    冒泡算法

    冒泡排序,有时也称为下沉排序,是一种简单的排序算法,它反复遍历要排序的列表,比较每对相邻的项目,如果它们的顺序错误则交换它们。重复传递列表,直到不需要交换,这表明列表已排序。

    代码实现:

    https://www.toptal.com/developers/sorting-algorithms/bubble-sort

    桶排序算法

    桶排序(Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶里。每个桶再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序)。桶排序是鸽巢排序的一种归纳结果。

    鸡尾酒排序算法

    鸡尾酒排序,也叫双向冒泡排序(Bidirectional Bubble Sort)等。这是冒泡排序的一种变体。不同之处在于,冒泡排序是从低到高比较序列里的每个元素,而鸡尾酒排序从两个方向(低到高、高到低)来回排序,效率更高。

    代码实现:

    https://en.wikipedia.org/wiki/Cocktail_shaker_sort

    插入排序

    插入排序(英语:Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序,因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。

    代码实现:

    https://www.toptal.com/developers/sorting-algorithms/insertion-sort

    归并排序

    归并排序(英语:Merge sort,或mergesort),是创建在归并操作上的一种有效的排序算法,。1945年由约翰·冯·诺伊曼首次提出。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归可以同时进行。

    代码实现:

    https://www.toptal.com/developers/sorting-algorithms/merge-sort

    快速排序

    快速排序(英语:Quicksort),又称划分交换排序(partition-exchange sort),简称快排,一种排序算法,最早由东尼·霍尔提出,用作按顺序放置数组元素的系统方法。

    代码实现:

    https://www.toptal.com/developers/sorting-algorithms/quick-sort

    堆排序

    堆排序(英语:Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子节点的键值或索引总是小于(或者大于)它的父节点。

    代码实现:

    https://www.toptal.com/developers/sorting-algorithms/heap-sort

    基数排序

    基数排序(英语:Radix sort)是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。基数排序的发明可以追溯到1887年赫尔曼·何乐礼在打孔卡片制表机(Tabulation Machine)上的贡献。

    选择排序

    选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

    代码实现:

    https://www.toptal.com/developers/sorting-algorithms/selection-sort

    希尔排序

    希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。希尔排序是非稳定排序算法。希尔排序是基于插入排序的以下两点性质而提出改进方法的:

    • 插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率

    • 但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位

    代码实现:

    https://www.toptal.com/developers/sorting-algorithms/shell-sort

    拓扑排序

    在计算机科学领域,有向图的拓扑排序是其顶点的线性排序,使得对于从顶点u到顶点v的每个有向边uv,u在排序中都在v之前。例如,图形的顶点可以表示要执行的任务,并且边可以表示一个任务必须在另一个任务之前执行的约束; 在这个应用中,拓扑排序只是一个有效的任务顺序。 如果且仅当图形没有定向循环,即如果它是有向无环图(DAG),则拓扑排序是可能的。任何DAG具有至少一个拓扑排序,并且已知这些算法用于在线性时间内构建任何DAG的拓扑排序。

    搜索算法

    线性搜索

    线性搜索或顺序搜索是一种寻找某一特定值的搜索算法,指按一定的顺序检查数组中每一个元素,直到找到所要寻找的特定值为止。是最简单的一种搜索算法。

    二分搜索算法

    二分搜索(英语:binary search),也称折半搜索(英语:half-interval search),对数搜索(英语:logarithmic search),是一种在有序数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。

    插值搜索算法

    插值查找(Interpolation Search)是根据要查找的关键字key与顺序表中最大、最小记录的关键字比较后的查找方法,它假设输入数组是线性增加的(这个假设的精确度会影响算法的效率,但不会影响算法的正确性)。

    跳跃搜索算法

    跳跃搜索算法(Jump Search)跟二分查找算法类似,它也是针对有序序列的查找,只是它是通过查找比较少的元素找到目标。当然它需要通过固定的跳跃间隔,这样它相比二分查找效率提高了很多。

    快速选择

    快速选择(英语:Quickselect)是一种从无序列表找到第k小元素的选择算法。它从原理上来说与快速排序有关。与快速排序一样都由托尼·霍尔提出的,因而也被称为霍尔选择算法。它在实际应用是一种高效的算法,具有很好的平均时间复杂度,然而最坏时间复杂度则不理想。快速选择及其变种是实际应用中最常使用的高效选择算法。与快速排序一样,快速选择一般是以原地算法的方式实现,除了选出第k小的元素,数据也得到了部分地排序。

    禁忌搜索

    禁忌搜索(Tabu Search,TS,又称禁忌搜寻法)是一种现代启发式算法,由美国科罗拉多大学教授Fred Glover在1986年左右提出的,是一个用来跳脱局部最优解的搜索方法。其先创立一个初始化的方案;基于此,算法“移动”到一相邻的方案。经过许多连续的移动过程,提高解的质量。

    加密算法

    凯撒密码

    凯撒密码(英语:Caesar cipher),或称凯撒加密、凯撒变换、变换加密,是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。这个加密方法是以罗马共和时期恺撒的名字命名的,当年恺撒曾用此方法与其将军们进行联系。

    维吉尼亚密码

    维吉尼亚密码(又译维热纳尔密码)是使用一系列凯撒密码组成密码字母表的加密算法,属于多表密码的一种简单形式。维吉尼亚密码曾多次被发明。该方法最早记录在吉奥万·巴蒂斯塔·贝拉索( Giovan Battista Bellaso)于1553年所著的书《吉奥万·巴蒂斯塔·贝拉索先生的密码》(意大利语:La cifra del. Sig. Giovan Battista Bellaso)中。然而,后来在19世纪时被误传为是法国外交官布莱斯·德·维吉尼亚(Blaise De Vigenère)所创造,因此现在被称为“维吉尼亚密码”。

    置换密码

    又名取代加密法,是密码学中按规律将文字加密的一种方式。置换密码中可以用不同字母数为一单元,例如每一个或两个字母为一单元,然后再作加密。密文接收者解密时需用原加密方式解码才可取得原文本。由于拼音文字中字的组成为有限的字母,以英语为例只有26个字母,组成可能的单元数较少,因此使用置换密码相对较为容易,而且亦可使用简单机械进行加密;相反,非拼音文字如中文则因单元数非常大难以使用一般加密方式,必需建立密码本,然后逐字替换。更何况某些非拼音文字中字字皆由不同大小的字根来组字,较难转换,因此使用置换密码的示例比较少。

    RSA加密算法

    RSA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被广泛使用。RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。对极大整数做因数分解的难度决定了RSA算法的可靠性。换言之,对一极大整数做因数分解愈困难,RSA算法愈可靠。假如有人找到一种快速因数分解的算法的话,那么用RSA加密的信息的可靠性就肯定会极度下降。但找到这样的算法的可能性是非常小的。今天只有短的RSA钥匙才可能被强力方式解破。到当前为止,世界上还没有任何可靠的攻击RSA算法的方式。只要其钥匙的长度足够长,用RSA加密的信息实际上是不能被解破的。

    ROT13算法

    ROT13(回转13位,rotate by 13 places,有时中间加了个连字符称作ROT-13)是一种简易的替换式密码。它是一种在英文网络论坛用作隐藏八卦(spoiler)、妙句、谜题解答以及某些脏话的工具,目的是逃过版主或管理员的匆匆一瞥。ROT13被描述成“杂志字谜上下颠倒解答的Usenet点对点体”。(Usenet equivalent of a magazine printing the answer to a quiz upside down.)ROT13 也是过去在古罗马开发的凯撒加密的一种变体。

    异或密码

    异或密码是密码学中一种简单的加密算法,异或运算符常作为更为复杂的加密算法的组成部分。对于其本身来说,如果使用不断重复的密钥,利用频率分析就可以破解这种简单的异或密码。如果消息的内容被猜出或知道,密钥就会泄露。异或密码值得使用的原因主要是其易于实现,而且计算成本小。简单重复异或加密有时用于不需要特别安全的情况下来隐藏信息。

    推荐阅读:

    这个沙雕项目,可以自制PornHub风格LOGO

    展开全文
  • 语音识别之DTW算法应用Python

    千次阅读 2019-10-04 16:50:25
    本文目的是探究语音识别中DTW算法应用,本人在相关算法中加入了自己的理解并对实时识别进行了扩展。 代码链接:基于Python的智能家居语言识别模拟系统 注意:在运行之前,需要修改代码os.chdir()中的绝对路径。 ...
  • 决策树算法应用【基于Python语言实现】 本文包括源码,数据提供,环境等; 1.需要Python基础 2. Python机器学习的库:scikit-learn scikit-learn中关于决策树的介绍:...
  • python实际工作中的应用有哪些

    千次阅读 2020-03-16 00:51:41
    python实际工作中的应用有哪些 无论是工作还是生活,Python都是一个既实用又有趣的技能。 Python应用领域广泛,下图可概括: ...
  • 前些天对决策树算法有了一个基本的了解,下面就这一个算法实际应用的记录: 一、Python机器学习库:scikit-learn 1.1 特性: 简单高效的数据挖掘和机器学习分析 对所有用户开放,根据不同需求高度可重用性 ...
  • 原标题:推荐 10 本程序员必读的算法书 我们为你总结了十本各具特色的算法书,学习课程的同时,阅读这些书籍,快速前进,离你的理想目标更近一步!1.《算法导论》 Thomas H. Corman 这是最著名的算法书之一,但要...
  •  随机森林是一种多功能的机器学习算法,能够执行回归和分类的任务。同时,它也是一种数据降维手段,在处理缺失值、异常值以及其他数据探索等方面,取得了不错的成效。另外,它还担任了集成学习中的重要方法,在将几...
  • Python机器学习应用

    2019-06-08 23:10:22
    (2)Python第三方库sklearn(scikit-learn),讲解应用机器学习算法快速解决实际问题的方法。 选修内容包括: (1)讲解AlphaGo背后的机器学习原理(强化学习); (2)游戏对战实例展示,通过实例展示自主学习的...
  • Python 经典算法100及解析

    万次阅读 多人点赞 2019-06-10 19:01:26
    【个人备注】:知道python有时间元组这一概念,这道题完全不需要计算。 时间元组包含九个属性 tm_year 年 tm_mon 月(1~12) tm_mday 日(1~31) tm_hour 时(0~23) tm_min 分(0~59) tm_sec 秒(0~61, 60或61是...
  • FP-growth算法应用实例(基于python

    千次阅读 2018-11-05 19:16:27
    我把关于FP-Growth的算法原理,python实现代码,以及代码解读放在了另外一篇文章:有兴趣可以看看。 这篇文章给出该算法的一个很酷的实例应用。我们将用到一个叫 kosarak.dat 的数据集,可以从这里下载。这份数据集...
  • python实际应用3-敏感字段MD5脱敏

    千次阅读 2018-12-24 14:47:41
    用MD5加密算法进行敏感字段脱敏 @2018年12月24日 背景 由于工作性质,经常面对不同的问题,某些场景下SQL+Excel、常用办公软件不能处理,这时到网上找一些案例,自己动手用python处理。后续,借此博客记录比较典型...
  • 基本算法python递归算法

    千次阅读 2017-09-24 16:44:33
    最近在做语义识别的项目,为了对语义识别的算法有一个深入的了解,所以抽出部分精力研究一下递归算法,递归作为最简单的基本算法,不是很难,原理大家都理解,下面我就结合我的理解,讲解一下递归算法: ...
  • 应用OpenCV和Python进行SIFT算法的实现

    万次阅读 多人点赞 2018-03-30 11:07:40
    应用OpenCV和Python进行SIFT算法的实现 如下图为进行测试的gakki101和gakki102,分别验证基于BFmatcher、FlannBasedMatcher等的SIFT算法,对比其优劣。为体现出匹配效果对于旋转特性的优势,将图gakki101做成具有...
  • 这可能是史上最全的Python算法集!

    千次阅读 多人点赞 2019-02-20 17:38:49
    来源 | CSDN(ID:CSDNnews)本文是一些机器人算法(特别是自动导航算法)的Python代码合集。其主要特点有以下三点:选择了在实践中广泛应用算法;依赖最...
  • python光流算法学习

    千次阅读 2017-01-02 18:39:31
    某次随便写代码时遇到了光流算法,就简单的看了看代码,对它有了一点点了解,记录一下。其实代码在python opencv里的例子里就有,路径为: D:\Program Files\opencv\sources\samples\python2\lk_track.py网上很多这...
  • 决策树方法在分类、预测、规则提取等领域有着广泛的应用。20 世纪 70 年代后期和 80 年代初期,机器学习研究者 J.Ross Quinlan 提出了 ID3 算法以后,决策树就在机器学习与数据挖掘领域取得了巨大的发展。Quinlan ...
  • k-近邻算法用于实际应用

    千次阅读 2016-10-20 23:51:29
    本章所有内容数据均来自《机器学习实战》的数据,是对K近邻算法应用以及熟练 实例1改进约会网站的配对效果  题目描述:海伦喜欢在在线约会网站寻找适合自己的对象,但是她不是喜欢每一个人。她发现交往过三种...
  • 1.贪心算法简介 贪心算法,是用来求解最优化问题的一种方法。一般来说,求解最优化问题的过程就是...2.贪心算法应用之一:找零钱 假设有4种硬币,它们的面值分别为2角5分、1角、5分和1分。现在要找给某顾客六角三分...
  • python Kmeans算法解析

    千次阅读 2018-11-05 21:52:00
    而这一类算法应用最为广泛的就是“聚类”。 聚类算法可以对数据进行数据归约,即在尽可能保证数据完整的前提下,减少数据的量级,以便后续处理。也可以对聚类数据结果直接应用或分析。 而Kmeans...
  • 机器学习、深度学习算法原理与案例实现暨Python大数据综合应用高级研修班一、课程简介课程强调动手操作;内容以代码落地为主,以理论讲解为根,以公式推导为辅。共4天8节,讲解机器学习和深度学习的模型理论和代码...
  • Python 实现递归算法

    万次阅读 2015-08-24 20:35:04
    递归算法1、递归的定义 递归就是子程序(或函数)直接调用自己或通过一系列调用语句间接调用自己,是一种描述问题和解决问题的...Python实现递归算法 阶乘的递归算法 汉诺塔递归算法 斐波拉契数列递归算法 排列组合
  • Python解决数据结构与算法问题(一):Python基础

    万次阅读 多人点赞 2019-09-29 09:51:44
    python学习之路 - 从入门到精通到大师 文章目录[python学习之路 - 从入门到精通到大师](https://blog.csdn.net/TeFuirnever/article/details/90017382)1.7.回顾Python基础1.8.数据入门1.8.1.内置的原子数据类型1.8.2...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 112,741
精华内容 45,096
关键字:

python算法的实际应用

python 订阅