精华内容
下载资源
问答
  • python中实现数组非常容易。比如,我们创建一个数组并进行一些基本操作: 数组的插入 my_list = [1,2,3,4,5,4,3,2,1] print(my_list) #打印数组 my_list[0] = 0 # 将第一个位置更新为0 my_list.append(6) # 在最后...
  • 学习算法是为了更有效率地解决问题,并且让程序运行的更快。我们来做一个小实验,在python解释器下输入下面的代码:>>> count = 10**5 >>> nums= [] >>> for i in range(count): ... nums.append(i) ... >>> nums....

    学习算法是为了更有效率地解决问题,并且让程序运行的更快。

    我们来做一个小实验,在python解释器下输入下面的代码:

    >>> count = 10**5
    >>> nums= []
    >>> for i in range(count):
    ...     nums.append(i)
    ...
    >>> nums.reverse()

    这段代码并没有什么实际用处。只是把一堆数字添加到一个空list里,然后反转这个list
    在实际的情形当中,这些数字可能来自外部,你想要把这些数字反向加入你的list,也就是往前插入。是啊,为什么我们不直接在list前面插入呢?


    >>> nums= []
    >>> for i in range(count):
    ... nums.inset(0,i)

    在我的电脑上运行第二段代码花费的时间是第一段的100倍。它不仅慢而且还增加了问题的数量级。比如吧count 变成 10**6。第一段代码的运行时间增加10倍,而第二段代码要比第一段满了1000多倍。我们可以猜到随着问题规模的增大,这两段代码的运行时间差距也会增大。可想而知选对正确的算法是多么的重要。


    这是线性增长VS二次方增长的例子

    习题

    • 1-1. 思考下面的语句:“电脑的cpu越来越快,存储器也越来越便宜,算法也会变得不重要。”你怎么认为;错还是对?为什么?
    • 1-2. 找到一种方法来判断两个字符串是不是互相为相同字母异序词。(比如:“debit card” 和 ”bad credit“)考虑下你的方法是否足够好。
      参考答案:https://github.com/mafanhe/Python_Learning/blob/master/pythonAlgorithm/c1-2.py
    展开全文
  • >>> s = "" >>> for chunk in input(): ... s += chunk
  • leetcode 分类 简介 本书采用leetcode刷题的模式,python语言,整理算法笔记。第一遍刷题按照leetcode给定的标签分大类,每类下三个难度划分小类。后面计划按照算法整理。
  • 灰狼优化算法的理解和应用一、背景介绍二、算法原理三、构建算法数学模型四、Python实现GWO 一、背景介绍 灰狼优化算法(Grey Wolf Optimizer,GWO)由澳大利亚格里菲斯大学学者 Mirjalili 等人于2014年提出来的一种...

    一、背景介绍

    灰狼优化算法(Grey Wolf Optimizer,GWO)由澳大利亚格里菲斯大学学者 Mirjalili 等人于2014年提出来的一种群智能优化算法。该算法受到了灰狼捕食猎物活动的启发而开发的一种优化搜索方法,它具有较强的收敛性能、参数少、易实现等特点。近年来受到了学者的广泛关注,它己被成功地应用到了车间调度、参数优化、图像分类等领域中。

    二、算法原理

    狼群中有α、β、γ三只狼做头狼,其中α是狼王,β、γ分别排第二、第三,β、γ都要听α的,γ要听β的。这三匹狼指导者其他的狼寻找猎物。狼群寻找猎物的过程就是我们寻找最优解的过程。
    GWO具体优化过程包含了社会等级分层、跟踪、包围和攻击猎物和寻找猎物。
    但其核心行为只有捕猎。
    为了模拟灰狼的搜索行为,假设α、β、γ具有较强识别潜在猎物的能力,因此,在每次迭代过程中,保留当前种群中最好的三只狼(α、β、γ),然后根据他们的位置信息来更新其他搜索代理的位置。
    在这里插入图片描述

    三、构建算法数学模型

    1)社会等级分层
    GWO的优化过程主要有每代种群中的最好三匹狼(具体构建时表示为三个最好的解)来指导完成。
    2)包围猎物
    灰狼捜索猎物时会逐渐地接近猎物并包围它,该行为的数学模型如下:
    在这里插入图片描述
    在这里插入图片描述
    3)狩猎行为的数学模型在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    4)攻击猎物
    5)寻找猎物

    更多关于灰狼算法原理的详细内容

    四、Python实现GWO

    import random
    import numpy
    
    
    
    def GWO(objf, lb, ub, dim, SearchAgents_no, Max_iter):
    
    
        # 初始化 alpha, beta, and delta_pos
        Alpha_pos = numpy.zeros(dim)  # 位置.形成30的列表
        Alpha_score = float("inf")  # 这个是表示“正负无穷”,所有数都比 +inf 小;正无穷:float("inf"); 负无穷:float("-inf")
    
        Beta_pos = numpy.zeros(dim)
        Beta_score = float("inf")
    
        Delta_pos = numpy.zeros(dim)
        Delta_score = float("inf")  # float() 函数用于将整数和字符串转换成浮点数。
    
        # list列表类型
        if not isinstance(lb, list):  # 作用:来判断一个对象是否是一个已知的类型。 其第一个参数(object)为对象,第二个参数(type)为类型名,若对象的类型与参数二的类型相同则返回True
            lb = [lb] * dim  # 生成[100,100,.....100]30个
        if not isinstance(ub, list):
            ub = [ub] * dim
    
        # Initialize the positions of search agents初始化所有狼的位置
        Positions = numpy.zeros((SearchAgents_no, dim))
        for i in range(dim):  # 形成5*30个数[-100,100)以内
            Positions[:, i] = numpy.random.uniform(0, 1, SearchAgents_no) * (ub[i] - lb[i]) + lb[
                i]  # 形成[5个0-1的数]*100-(-100)-100
        Convergence_curve = numpy.zeros(Max_iter)
    
    
    
    
        #迭代寻优
        for l in range(0, Max_iter):  # 迭代1000
            for i in range(0, SearchAgents_no):  # 5
                # 返回超出搜索空间边界的搜索代理
    
                for j in range(dim):  # 30
                    Positions[i, j] = numpy.clip(Positions[i, j], lb[j], ub[
                        j])  # clip这个函数将将数组中的元素限制在a_min(-100), a_max(100)之间,大于a_max的就使得它等于 a_max,小于a_min,的就使得它等于a_min。
    
                # 计算每个搜索代理的目标函数
                fitness = objf(Positions[i, :])  # 把某行数据带入函数计算
                # print("经过计算得到:",fitness)
    
                # Update Alpha, Beta, and Delta
                if fitness < Alpha_score:
                    Alpha_score = fitness  # Update alpha
                    Alpha_pos = Positions[i, :].copy()
    
                if (fitness > Alpha_score and fitness < Beta_score):
                    Beta_score = fitness  # Update beta
                    Beta_pos = Positions[i, :].copy()
    
                if (fitness > Alpha_score and fitness > Beta_score and fitness < Delta_score):
                    Delta_score = fitness  # Update delta
                    Delta_pos = Positions[i, :].copy()
    
            # 以上的循环里,Alpha、Beta、Delta
    
            a = 2 - l * ((2) / Max_iter);  #   a从2线性减少到0
    
            for i in range(0, SearchAgents_no):
                for j in range(0, dim):
                    r1 = random.random()  # r1 is a random number in [0,1]主要生成一个0-1的随机浮点数。
                    r2 = random.random()  # r2 is a random number in [0,1]
    
                    A1 = 2 * a * r1 - a;  # Equation (3.3)
                    C1 = 2 * r2;  # Equation (3.4)
                    # D_alpha表示候选狼与Alpha狼的距离
                    D_alpha = abs(C1 * Alpha_pos[j] - Positions[
                        i, j]);  # abs() 函数返回数字的绝对值。Alpha_pos[j]表示Alpha位置,Positions[i,j])候选灰狼所在位置
                    X1 = Alpha_pos[j] - A1 * D_alpha;  # X1表示根据alpha得出的下一代灰狼位置向量
    
                    r1 = random.random()
                    r2 = random.random()
    
                    A2 = 2 * a * r1 - a;  #
                    C2 = 2 * r2;
    
                    D_beta = abs(C2 * Beta_pos[j] - Positions[i, j]);
                    X2 = Beta_pos[j] - A2 * D_beta;
    
                    r1 = random.random()
                    r2 = random.random()
    
                    A3 = 2 * a * r1 - a;
                    C3 = 2 * r2;
    
                    D_delta = abs(C3 * Delta_pos[j] - Positions[i, j]);
                    X3 = Delta_pos[j] - A3 * D_delta;
    
                    Positions[i, j] = (X1 + X2 + X3) / 3  # 候选狼的位置更新为根据Alpha、Beta、Delta得出的下一代灰狼地址。
    
            Convergence_curve[l] = Alpha_score;
    
            if (l % 1 == 0):
                print(['迭代次数为' + str(l) + ' 的迭代结果' + str(Alpha_score)]);  # 每一次的迭代结果
    
    #函数
    def F1(x):
        s=numpy.sum(x**2);
        return s
    
    
    
    
    
    #主程序
    func_details = ['F1', -100, 100, 30]
    function_name = func_details[0]
    Max_iter = 1000#迭代次数
    lb = -100#下界
    ub = 100#上届
    dim = 30#狼的寻值范围
    SearchAgents_no = 5#寻值的狼的数量
    x = GWO(F1, lb, ub, dim, SearchAgents_no, Max_iter)
    
    

    运行结果截图:
    在这里插入图片描述

    五、算法分析

    灰狼优化算法的位置更新方程存在开发能力强而探索能力弱的缺点.
    灰狼算法的全局搜索能力强、精度稍差。

    参考链接:
    https://blog.csdn.net/haha0332/article/details/88805910
    https://www.it610.com/article/1288128297732976640.htm
    推荐阅读:
    https://www.jianshu.com/p/97206c3fc51f

    展开全文
  • 文章目录数据结构与算法Python)Why? 数据结构与算法PythonPython数据结构与算法 1. 引入概念 1.1. 第一次尝试 1.2. 算法的提出 1.3. 第二次尝试 1.4. 算法效率衡量 1.5. 算法分析 1.6. 常见时间复杂度 1.7...

    数据结构与算法(Python)

    在这里插入图片描述
    Python数据结构与算法
    1. 引入概念
    1.1. 第一次尝试
    1.2. 算法的提出
    1.3. 第二次尝试
    1.4. 算法效率衡量
    1.5. 算法分析
    1.6. 常见时间复杂度
    1.7. Python内置类型性能分析
    1.8. 数据结构
    2. 顺序表
    2.1. 顺序表的形式
    2.2. 顺序表的结构与实现
    2.3. 顺序表的操作
    2.4. Python中的顺序表
    3. 链表
    3.1. 单向链表
    3.2. 单项循环链表
    3.3. 双向链表
    4. 栈
    4.1. 栈结构实现
    5. 队列
    5.1. 队列的实现
    5.2. 双端队列
    6. 排序与搜索
    6.1. 冒泡排序
    6.2. 选择排序
    6.3. 插入排序
    6.4. 快速排序
    6.5. 希尔排序
    6.6. 归并排序
    6.7. 常见排序算法效率比较
    6.8. 搜索
    7. 树与树算法
    7.1. 二叉树
    7.2. 二叉树的遍历

    Why?

    我们举一个可能不太恰当的例子:

    如果将最终写好运行的程序比作战场,我们码农便是指挥作战的将军,而我们所写的代码便是士兵和武器。

    那么数据结构和算法是什么?答曰:兵法!

    我们可以不看兵法在战场上肉搏,如此,可能会胜利,可能会失败。即使胜利,可能也会付出巨大的代价。我们写程序亦然:没有看过数据结构和算法,有时面对问题可能会没有任何思路,不知如何下手去解决;大部分时间可能解决了问题,可是对程序运行的效率和开销没有意识,性能低下;有时会借助别人开发的利器暂时解决了问题,可是遇到性能瓶颈的时候,又不知该如何进行针对性的优化。

    如果我们常看兵法,便可做到胸有成竹,有时会事半功倍!同样,如果我们常看数据结构与算法,我们写程序时也能游刃有余、明察秋毫,遇到问题时亦能入木三分、迎刃而解。

    故,数据结构和算法是一名程序开发人员的必备基本功,不是一朝一夕就能练成绝世高手的。冰冻三尺非一日之寒,需要我们平时不断的主动去学习积累。

    通过三天的学习,我们希望让大家能理解其概念,掌握常用的数据结构和算法。

    展开全文
  • python学习笔记

    2018-08-26 11:51:00
    初学Python超详细笔记,包含最基础的关键字,算法,函数,数据类型等知识点,小白必备
  • python算法和数据结构笔记--递归--英国标尺的绘制

    <Data Structures andAlgorithms in Python> Michael T.Goodrich,Roberto Tamassia,Michael H.Goldwasser 学习笔记,内容源自该书

    英国标尺的绘制

    每一寸一个数字标签,一个整英寸里有次级的标注线,比如1/2英寸,1/4英寸,刻度线长度依次变短。当刻度长度减小一般时,刻度线减少一个-符号。



    a:4级刻度的2寸尺子,b:5级刻度的1寸尺子,c:3级刻度的3寸尺子


    #画一个给定长度L主刻度
    def draw_line(tick_length,tick_label=''):
        line = '-'*tick_length
        if tick_label:
            line += ' ' + tick_label
        print(line)
    #画主刻度中间的次刻度,刻度级数为L-1,递归
    def draw_interval(center_length):
        if center_length > 0:
            draw_interval(center_length - 1)
            draw_line(center_length)
            draw_interval(center_length - 1)
    #画指定长度及刻度级数的尺子
    def draw_ruler(num_inches, major_length):
        draw_line(major_length, '0')
        for j in range(1,1 + num_inches):
            draw_interval(major_length-1)
            draw_line(major_length,str(j))
    


    递归过程图解



    展开全文
  • 算法笔记 本 github 项目主要分享在公众号发表的机器学习、深度学习、Python方向的学习笔记和翻译文章,此外,还会包括一些教程、资源的推荐,偶尔的读书笔记分享。 整个目录如下: 公众号文章目录 深度学习 机器...
  • 笔记Python算法教程(1)

    千次阅读 2017-07-02 11:24:15
    Python里的list不是单(双)向链表,是顺序表,是一整块单一连续的内存区块----我们通常称之为数组(array)。这样做的好处有两点:这样按照既定索引值对某元素进行直接访问时更方便;append是在列表末尾添加,...
  • 数据:  http://download.csdn.net/detail/qq_26948675/9683350 ... 代码: #-*- coding: utf-8 -*- #使用K-Means算法聚类消费行为特征数据 import pandas as pd #参数初始化 inputfile = 'chapter
  • 本文实例讲述了Python学习笔记之While循环用法。分享给大家供大家参考,具体如下: 前面一篇《Python学习笔记之For循环用法》详细介绍了Python for循环,这里再来讲述一下while循环的使用方法: Python 中的While...
  • 【刷题笔记Python 算法刷题第一天:1、两数之和.pdf
  • Python学习笔记

    千次阅读 2018-10-04 10:46:23
    Python学习笔记: 开发环境搭建 一、Python -- 基础语法 二、Python -- 循环语句 三、Python -- 字符串 四、Python常用数据结构--列表 五、Python常用数据结构--元组 六、Python常用数据结构--字典 七、...
  • Python算法学习计划

    千次阅读 2013-04-17 12:01:18
    以Welcome to Problem Solving with Algorithms and Data Structures为原本,每次学习一个小结或者半个小结,每次都要留下学习笔记,每一段时间都要有反思笔记 学习数据结构和算法 加上自己的英文水平的提高作为...
  • 本文实例讲述了Python学习笔记之For循环用法。分享给大家供大家参考,具体如下: Python 中的For循环 Python 有两种类型的循环:for 循环和 while 循环。for 循环用来遍历可迭代对象。 可迭代对象是每次可以返回其中...
  • Python学习笔记——树与树算法

    千次阅读 2018-08-15 12:35:47
    树与树算法 树的概念 树的术语 树的种类 树的存储与表示 常见的一些树的应用场景 二叉树 二叉树的基本概念 二叉树的性质(特性) 二叉树的节点表示以及树的创建 二叉树的遍历 深度优先遍历 广度优先遍历...
  • Author: shizhixin Blog: http://blog.csdn.net/shizhixin Weibo:... Date: 2016-04-19 Note: 本笔记是机器学习算法笔记系列之深入理解主成分分析PCA的实现篇,有自己写的Python实现版本的P
  • Python回溯算法--笔记

    千次阅读 2019-08-19 16:33:49
    回溯算法基本思想骑士巡逻案例一道笔试题,题目的具体内容记不清楚了,但出现在笔试题中的算法的重要性不言而喻,记此笔记方便日后查阅。文章内容来源于github中jackfrued分享的课程内容。 基本思想 称为试探法,按...
  • 本文实例讲述了Python学习笔记之lambda表达式用法。分享给大家供大家参考,具体如下: Lambda 表达式 使用 Lambda 表达式创建匿名函数,即没有名称的函数。lambda 表达式非常适合快速创建在代码中以后不会用到的函数...
  • python入门笔记(一)

    万次阅读 2020-05-18 15:01:03
    系统关键字 不能用 python 3.x 关键字 (保留字) python3.x keyword.kwlist = ['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', '...
  • 本文讲述了python安装mysql-python的方法。分享给大家供大家参考,具体如下: ubuntu 系统下进行的操作 首先安装了pip工具 sudo apt-get install python-pip 然后使用 sudo pip install mysql-python 安装第三方...
  • Python学习笔记Python概述 一、Python概述   Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。Python在设计上坚持了清晰划一的风格,这使得其成为一门易读、易维护,并且被大量用户所欢迎的、...
  • 本文实例讲述了Python学习笔记之列表推导式。分享给大家供大家参考,具体如下: 列表推导式 列表推导式可以快速简练地创建列表 之前的复杂写法: capitalized_cities = [] for city in cities: capitalized_cities...
  • 回溯算法 1.概念 2.基本思想 3.用回溯法解题的一般步骤: 4. 实例:解决N皇后问题 1.概念 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”...
  • python学习笔记1-理解Python语言

    万次阅读 2016-10-19 14:06:22
    不可否认的是Python中已经集成了很多常用的库,但我想使用Python编程的一定是在某一领域有很深入的研究,这个时候常用的库是完全不能满足的,你一定会去github寻找其他的开源库,今天小编就教教大家如何下载以及安装...
  • Python学习笔记Python 标准库概览

    千次阅读 多人点赞 2018-07-30 11:55:39
    使用Python解释器:使用Python解释器 本文对Python的简介:Python 简介 Python流程介绍:深入Python 流程 Python数据结构:Python 数据结构 Python:模块:Python 模块 Python:输入和输出Python 输入和输出 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 64,372
精华内容 25,748
关键字:

python算法笔记

python 订阅