精华内容
参与话题
问答
  • Python算法实战(上)

    千人学习 2019-04-29 21:26:53
    适用人群 Python 初、中级学习者和开发者,对 Python 数据结构和算法感兴趣的学生和开发者。 课程简介 计算机技术与语言发展迅速,但无论怎样发展,算法和数据结构是最底层的基础。 课程特点: ...
  • Python算法 Kruskal算法

    千次阅读 2012-12-05 22:57:30
    我们设计了一个简单的例子,如...Python版本实现,这里使用到了Disjoint Set(不交集),关于Disjoint Set参考这里解释。下面是具体实现: from operator import itemgetter class DisjointSet(dict):  def add(self,

    我们设计了一个简单的例子,如图所示(图中节点间的距离可能跟边值大小不成比例~,红色边为最小生成树的结果!).

    最小生成树

    Python版本实现,这里使用到了Disjoint Set(不交集),关于Disjoint Set参考这里解释。下面是具体实现:

    from operator import itemgetter
    class DisjointSet(dict):
        def add(self, item):
            self[item] = item
     
        def find(self, item):
            parent = self[item]
     
            while self[parent] != parent:
                parent = self[parent]
     
            self[item] = parent
            return parent
     
        def union(self, item1, item2):
            self[item2] = self[item1]
     
    def kruskal( nodes, edges ):
        forest = DisjointSet()
        mst = []
        for n in nodes:
            forest.add( n )
     
        sz = len(nodes) - 1
     
        for e in sorted( edges, key=itemgetter( 2 ) ):
            n1, n2, _ = e
            t1 = forest.find(n1)
            t2 = forest.find(n2)
            if t1 != t2:
                mst.append(e)
                sz -= 1
                if sz == 0:
                    return mst
     
                forest.union(t1, t2)
     
    #test   
     
    nodes = list( "123456" )
    edges = [ ("1", "2", 1), ("1", "4", 2),
              ("2", "4", 4), ("2", "3", 6), ("2", "5", 7),
          ("3", "6", 5),
          ("5", "6", 4), ("4", "5", 9),["3","5",8]]
     
    print kruskal( nodes, edges )

    执行结果跟前面一致:“[('1', '2', 1), ('1', '4', 2), ('5', '6', 4), ('3', '6', 5), ('2', '3', 6)]”

    附件下载 Dbank: http://dl.dbank.com/c05gv0a1hf

    Python解答来源:http://programmingpraxis.com/2010/04/06/minimum-spanning-tree-kruskals-algorithm/



    展开全文
  • Python算法学习计划

    千次阅读 2013-04-17 12:01:18
    以Welcome to Problem Solving with Algorithms and Data ...学习数据结构和算法 加上自己的英文水平的提高作为练习,很多术语和理解可能有错,请赐教。 原文地址 http://interactivepython.org/courselib/stat

    以Welcome to Problem Solving with Algorithms and Data Structures为原本,每次学习一个小结或者半个小结,每次都要留下学习笔记,每一段时间都要有反思笔记

    学习数据结构和算法 加上自己的英文水平的提高作为练习,很多术语和理解可能有错,请赐教。

    原文地址 http://interactivepython.org/courselib/static/pythonds/index.html

    每天至少有一个小时的时间在上面


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

    千人学习 2016-05-11 09:36:15
    图是程序设计中被广泛使用的数据结构, 它比栈,队列,树更复杂. 图是对实际问题进行数学...本套课程我们学习图的基本概念,常用接口, 以及如何在python中使用图, 图的基本算法, 后以几个经典问题体会图在实际问题中的应用.
  • python算法引入

    千次阅读 2019-06-29 20:26:04
    这里主要是介绍算法的介绍以及一些判断算法好坏的标准和方式


    这里主要是介绍算法的介绍以及一些判断算法好坏的标准和方式

    引入

    如果a+b+c = 1000,且a^2 + b^2 = c^2,如何求出所有a,b,c可能的组合?

    第一次尝试:

    import time
    print("开始")
    start_time = time.time()
    for a in range(1001):
        for b in range(1001):
            for c in range(1001):
                if a + b + c==1000 and a ** 2+b ** 2 == c ** 2:
                    print("a,b,c:%d,%d,%d" % (a, b, c))
    
    end_time = time.time()
    print("time:{}".format(end_time - start_time))
    print("结束")
    # 时间复杂度:T(n) = n^3 *2
    
    开始
    a,b,c:0,500,500
    a,b,c:200,375,425
    a,b,c:375,200,425
    a,b,c:500,0,500
    time:140.17622900009155
    结束
    

    算法

    算法的概述

    算法是独立存在的一种解决问题的方法和思想

    算法的五大特性:

    1. 输入: 0个或多个输入
    2. 输出: 1个或多个输出
    3. 有穷性: 有限步骤,可接受时间范围内完成
    4. 确定性: 每一步具有确定的意义,不会出翔二义性
    5. 可行性: 能不能实现

    第二次尝试:

    提示:c=1000-a-b

    import time
    print("开始")
    start_time = time.time()
    for a in range(1001):
        for b in range(1001):
            c = 1000 - a - b
            if a ** 2+b ** 2 == c ** 2:
                print("a,b,c:%d,%d,%d" % (a, b, c))
    
    end_time = time.time()
    print("time:{}".format(end_time - start_time))
    print("结束")
    # 时间复杂度:T(n) = n^2 *3
    
    
    开始
    a,b,c:0,500,500
    a,b,c:200,375,425
    a,b,c:375,200,425
    a,b,c:500,0,500
    time:1.0204615592956543
    结束
    

    解决一个问题有多个算法,每个算法的效率还是有差距的,如何判断算法的效率呢?

    算法的效率衡量

    时间复杂度和大O记法

    时间复杂度:算法进行了多少个基本操作(即花费了多少个时间单位),渐进函数

    时间复杂度的几条基本计算规则

    1. 基本操作,即只有常数项,时间复杂度为O(1)
    2. 顺序结构,时间复杂度按加法进行计算
    3. 循环结构,时间复杂度按乘法计算
    4. 分支结构,时间复杂度取最大值
    5. 判断一个算法的效率时,往往只需要关注操作数量的最高次项,其他次要项和常数项可以忽略
    6. 在没有特殊说明时,我们所分析的算法的时间复杂度都是指最坏时间复杂度

    python内置类型性能分析

    timeit模块

    timeit模块可以用来测试一小段Python代码的执行速度。

    class timeit,Timer(stmt=“pass”,setup=‘pass’,timer= <.timer function> )

    • Timer是测量小段代码执行速度的类。

    • stmt参数是要测试的代码语句(statment);

    • setup参数是运行代码时需要的设置;

    • timer参数是一个定时器函数,与平台有关。

    timeit.Timer.timeit(number=1000000)

    Timer类中测试语句执行速度的对象方法。number参数是测试代码时的测试次数,默认为1000000次。方法返回执行代码的平均耗时,一个float类型的秒数。

    下面是timeit模块的使用方式

    from timeit import Timer   
    def t1():
        li1 = []
        for i in range(10000):
            li1.append(i)
    
    def t2():
        li = []
        for i in range(10000):
            # li= li+[i]  # 两个列表相加放到一个新的列表中
            li += [i] # 这个做过优化,速度比相加快的多
    def t3():
        li = [i for i in range(10000)]
        
    def t4():
        li = list(range(10000))
        
    def t5():
        li = []
        for i in range(10000):
            li.extend([i])  # 放到li列表中
            
    def t6_end():
        li1 = []
        for i in range(10000):
            li1.append(i)  # 在列表最后加元素
    
    def t6_start():
        li1 = []
        for i in range(10000):
            li1.insert(0,i)  # 在列表最前面加元素
            
            
    timer = Timer("t1()","from __main__ import t1")
    print("t1",timer.timeit(1000))
    timer = Timer("t2()","from __main__ import t2")
    print("t2",timer.timeit(1000))
    timer = Timer("t3()","from __main__ import t3")
    print("t3",timer.timeit(1000))
    timer = Timer("t4()","from __main__ import t4")
    print("t4",timer.timeit(1000))
    timer = Timer("t5()","from __main__ import t5")
    print("t5",timer.timeit(1000))
    timer = Timer("t6_start()","from __main__ import t6_start")
    print("t6_start",timer.timeit(1000))
    timer = Timer("t6_end()","from __main__ import t6_end")
    print("t6_end",timer.timeit(1000))
    
    t1 0.8016083359998447
    t2 211.04629018700052
    t3 0.43422231000022293
    t4 0.17026640999938536
    t5 1.0775756929997442
    t6_start 0.7481699620002473
    t6_end 25.572036152000692
    
    展开全文
  • Python算法实战视频课程--二叉树

    万人学习 2016-05-11 09:14:36
    二叉树是重要的抽象数据类型,解决很多问题时都需要它。通过本课我们学习这种重要的数据结构,本课注重实践,没有过多枯燥的理论,我们的重点放在编码实现各种算法,这对于熟练使用Python语言也是很有益处的。
  • Python 算法实现

    千次阅读 2020-02-13 10:39:39
  • python算法

    千次阅读 2018-06-23 10:44:47
    1 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的四位数?都是多少? for a in range(1,5): for b in range(1,5): for c in range(1,5): for d in range(1,5): if(a!=b and a!...
  • Python算法- 剪绳子

    万次阅读 2020-08-01 12:21:33
    #问题 剑指 offer 有这样一道编程题 给你一根长度为 n 的绳子,请把绳子剪成整数长的 m 段(m、n 都是整数,n>1 并且 m>1,m<=n),每段绳子的长度记为 k [1],…,k [m]。请问 k [1] x…xk [m] 可能的最大...
  • [Python]python算法入门 -- 栈(stack)

    千次阅读 2013-05-09 15:52:21
    ref:http://interactivepython.org/courselib/static/pythonds/BasicDS/stacks.html Stack : LIFO last-in first-out 生活中的例子: 放书,浏览器记录等 stack通常的操作: Stack() 建立一个空的栈对象 ...
  • Python算法系列-哈希算法

    千次阅读 多人点赞 2020-04-12 23:11:10
    哈希算法一、常见数据查找算法简介二、什么是哈希三、实例:两个数字的和1.问题描述2.双指针办法解决3.哈希算法求解四、总结 哈希算法又称散列函数算法,是一种查找算法。就是把一些复杂的数据通过某种映射关系。...
  • python算法——旅行商问题

    千次阅读 2018-11-01 19:59:20
    旅行商问题 旅行商问题是一个运行时间非常长,时间增长的非常快的问题。甚至很多聪明的人认为都没有更好的解决方法。 实例 有一个商人,他要前往5个城市,A,B,C,D,E。怎么来确保行程最短。 (先暂且不计算每个城市的...
  • Brute-Force算法, 简称为 BF算法,是一种简单朴素的模式匹配算法,常用于在一个主串 S 内查找一个子串 T 的出现位置。 它的核心思想与操作是: 对于给定的主串 S 与子串 P ,主串 S 的长度为 N,子串 T 的长度为 M ...
  • python 算法-二叉搜索树

    万次阅读 2020-07-10 14:01:14
    python 算法-二叉搜索树 文章目录python 算法-二叉搜索树1、实现2、二叉搜索树-Coding 1、实现 2、二叉搜索树-Coding
  • Python算法实战视频课程--队列的应用

    千人学习 2016-05-11 09:28:43
    队列是程序设计中被广泛使用的数据结构, 很多问题都满足队列"先进先出"的特性(例如, 广度有限搜索), 本课程以实际应用为主, 先了解队列的基本特性, 操作接口以及学习使用python标准库中的deque, 以多个编程实例带领...
  • Python算法实战视频课程--栈的应用

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

    千次阅读 2018-07-11 09:26:03
  • Python算法 汉诺塔

    千次阅读 2018-12-14 00:45:14
    算法描述: 汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着N片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序...
  • Python算法系列—深度优先遍历算法【二叉树】

    千次阅读 多人点赞 2020-04-14 17:14:12
    深度优先遍历算法之二叉树一、什么是深度优先遍历二、二叉树1. 二叉树简介2.二叉树类型3.二叉树相关术语4. 二叉树的节点代码5. 二叉树遍历顺序6.深度优先遍历和广度优先遍历三、面试题+励志 ``这不就是二叉树吗?嗯...
  • 关于仿照js写python算法

    万次阅读 2019-07-24 14:57:48
    用了一套不知道哪弄来的 js加密算法 (我已经查到了,应该是出自这里 地址),有一个参数是通过 js 计算得到的,无奈我先想模拟登录就必须解决这个算法,这个说明是des, 但是和python中的第三方库提供的des算法根本不...
  • GitHub标星2.6万!Python算法新手入门大全

    千次阅读 多人点赞 2019-04-29 22:00:00
    几个印度小哥,在GitHub上建了一个各种Python算法的新手入门大全,现在标星已经超过2.6万。这个项目主要包括两部分内容:一是各种算法的基本原理讲解,二是各种算法的代码实现。 传送门在此: ...
  • python算法-兔子序列

    千次阅读 2018-01-31 11:16:16
    题目:打印第 N 个月兔子的数量 def fib(n): a, b = 0, 1 for i in range(n): a, b = b, a + b print(a) if __name__ == '__main__': fib(0) fib(1) fib(2) fib(3) fib(4) fib(5)
  • python算法有哪些特征

    2018-06-01 18:38:23
    算法是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令...算法是Python开发中重要知识技能,不可避免的要使用到该技能,那么,Python算法有什么特点呢?一个Python算法应该具有以下七个重要的特征:1. 有...
  • 重要的python算法

    千次阅读 2013-06-14 11:48:41
    Python(x,y)中没有包括的算法包: 1、基于梯度的最优化方法OpenOpt:http://openopt.org/Welcome 2、遗传算法Pyevolve:https://pypi.python.org/pypi/Pyevolve/0.5 介绍文档:...
  • Python算法分析与设计:最大流算法

    千次阅读 2019-02-01 14:30:03
    Python算法分析与设计:最大流算法 一、实验目的 1、掌握最大流问题的定义,了解流量、容量以及他们之间的关系。 2、掌握通过增广路径求最大流问题的Forder-Fulkerson和Edmond-Karp算法,理解这两个算法之间的异同 3...
  • python算法之Dijkstra Dijkstra算法是由荷兰计算机科学家迪杰斯特拉(Dijkstra)于1959 年提出的,因此又叫迪杰斯特拉算法。是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题。 实现原理: ...

空空如也

1 2 3 4 5 ... 20
收藏数 79,278
精华内容 31,711
关键字:

python算法

python 订阅