
算法
CS创新实验室
致力于计算机、人工智能相关领域的研发和教学
展开
-
python中的堆排序peapq模块
heapq模块实现了python中的堆排序,并提供了有关方法。让用Python实现排序算法有了简单快捷的方式。heapq的官方文档和源码:8.4.heapq-Heap queue algorithm下面通过举例的方式说明heapq的应用方法实现堆排序#! /usr/bin/evn python#coding:utf-8from heapq import *def原创 2014-06-23 21:53:20 · 444 阅读 · 0 评论 -
【译】零基础学习梯度下降算法
作者:Philipp Muens翻译:老齐梯度下降法是机器学习中最基本的优化技术之一。那么,什么是梯度? 下降的是什么?我们要优化的是什么?这些可能是第一次接触梯度下降时想到的一些问题,本文就从零基础开始实现梯度下降,并在过程中回答这些问题。优化和损失函数许多机器学习问题需要某种形式的优化。通常,算法首先对正确答案进行初步猜测,然后慢慢地调整参数,使其在每次预测检验中的误差变小。这个学习过程反复进行,直到算法学会了“正确地”预测到结果为止。为了弄清楚算法在预测上的误差,我们需要定义一个损失函翻译 2020-08-20 15:35:32 · 247 阅读 · 0 评论 -
无向图最小生成树Kruskal算法
问题最小生成树的Kruskal算法描述:有A、B、C、D四个点,每两个点之间的距离(无方向)是(第一个数字是两点之间距离,后面两个字母代表两个点):(1,'A','B'),(5,'A','C'),(3,'A','D'),(4,'B','C'),(2,'B','D'),(1,'C','D') 生成边长和最小的树,也就是找出一种连接方法,将各点连接起来,并且各点之间的距离和最小。原创 2014-06-18 11:51:14 · 1159 阅读 · 0 评论 -
利用动态方法修正贪婪算法中找硬币的问题
在博文:http://blog.youkuaiyun.com/qiwsir/article/details/31375449 中,讲述了如何用贪婪算法解决找硬币的问题,同时也指出了该方法存在的问题。如何解决?下面就是一个解决方案,在这里采用的是动态算法。def coinChange(centsNeeded, coinValues): minCoins = [[0 for j in ra原创 2014-07-07 17:21:50 · 345 阅读 · 0 评论 -
求平均数和排队
问题定义一个int型的一维数组,包含40个元素,用来存储每个学员的成绩,循环产生40个0~100之间的随机整数,(1)将它们存储到一维数组中,然后统计成绩低于平均分的学员的人数,并输出出来。(2)将这40个成绩按照从高到低的顺序输出出来。解决(python)#! /usr/bin python#coding:utf-8from __future__ import divisio原创 2014-06-03 15:49:07 · 177 阅读 · 0 评论 -
贪婪算法之兑换硬币及问题所在
兑换硬币问题,是贪婪算法的经典问题,本文不仅用python演示了这个算法,更指出此算法存在的问题,即不一定得到的结果都是最优解。原创 2014-06-16 14:19:03 · 1309 阅读 · 0 评论 -
最小生成树Kruskal算法的提出者Joseph Bernard Kruskal,Jr.
熟悉算法中的最小生成树的朋友都晓得有一个Kruskal算法,这个算法就是由题目中那个名字很长的人提出的。因为他功绩卓越,尊称他为Kruskal。Kruskal生于1928年1月29日,卒于2010年9月19日,美国人,维基里的词条中包含的头衔是:数学家、统计学家、计算机科学家、心理测量学专家。kruskal分别就读过芝加哥大学和普林斯顿大学,1954年获得博士学位。下面链接原创 2014-06-16 22:33:02 · 1624 阅读 · 1 评论 -
对一维整数数组的操作
问题定义一个int型的一维数组,包含10个元素,赋一些随机整数然后求出所有元素的最大值,最小值,平均值,和值,并输出出来。思路说明本问题是一个普通的对整数数组的操作,在下面的Python解决方法中,主要是尝试了python的一个内置函数reduce。解决(Python)#! /usr/bin/env python#coding:utf-8from原创 2014-06-03 15:52:56 · 496 阅读 · 0 评论 -
斐波那契数列多种实现方法
问题费波那契数列(意大利语:Successione di Fibonacci),又译费波拿契数、斐波那契数列、斐波那契数列、黄金分割数列。在数学上,费波那契数列是以递归的方法来定义:F0 = 0 (n=0)F1 = 1 (n=1)Fn = F[n-1]+ F[n-2](n=>2)关于Fibonacci的精彩解释,请看下列视频:TED-神奇的斐波那契数列:http原创 2014-07-07 14:12:30 · 451 阅读 · 0 评论 -
按照指定字母顺序排序
问题已知字母序列【d, g, e, c, f, b, o, a】,请实现一个函数针对输入的一组字符串 input[] = {"bed", "dog", "dear", "eye"},按照字母顺序排序并打印,结果应为:dear, dog, eye, bed。说明本问题在网上比较常见,但这里尝试用另外一个思路,并且用python来写,与众多用c++的有所不同,且似乎短小了不少。自己感觉比网原创 2014-05-30 13:31:29 · 1305 阅读 · 1 评论 -
全文索引搜索whoosh
问题Whoosh是python中解决索引查找的模块,在讨论索引查找的文章已经对有关索引查找进行了阐述,此处详细说明Whoosh模块的应用。思路说明Whoosh的安装这里有详细内容(链接被被阉割!)whoosh的使用步骤whoosh在应用上划分三个步骤:建立索引和模式对象写入索引文件搜索下面依次阐述各步骤建立索引和模式对象建原创 2014-07-10 18:06:06 · 657 阅读 · 0 评论 -
索引查找
问题索引查找索引查找的定义,来源百度百科索引查找是在索引表和主表(即线性表的索引存储结构)上进行的查找。 索引查找的过程是:首先根据给定的索引值K1,在索引表上查找出索引值等于K1的索引项,以确定K1对应的子表在主表中的开始位置和长度,然后再根据给定的关键字K2,在对应的子表中查找出关键字等于K2的元素(结点)。思路说明对于一个list或者d原创 2014-07-09 18:19:18 · 432 阅读 · 0 评论 -
寻找完全数
问题寻找完全数。思路说明所谓完全数,从维基百科的完全数词条中得到:[完全数,又称完美数或完备数,是一些特殊的自然数:它所有的真因子(即除了自身以外的约数)的和,恰好等于它本身,完全数不可能是楔形数。 例如:第一个完全数是6,它有约数1、2、3、6,除去它本身6外,其余3个数相加,1+2+3=6,恰好等于本身。第二个完全数是28,它有约数1、2、4、7、14、28原创 2014-07-15 17:19:22 · 1927 阅读 · 0 评论 -
全文索引搜索whoosh(2)
承接前面对whoosh的文章,继续:写索引文件下面开始写入索引内容,过程如下:writer = ix.writer()writer.add_document(title=u"my document", content=u"this is my document", path=u"/a", tags=u"firlst short", icon=u"/icons/star.p原创 2014-07-11 16:49:51 · 312 阅读 · 0 评论 -
排序算法比较和选择
排序算法有不少,当然,一般的语言中都提供某个排序函数,比如Python中,对list进行排序,可以使用sorted(或者list.sort()),关于这方面的使用,在我的github代码库algorithm中有几个举例,有兴趣的看官可以去那里看看(顺便告知,我在Github中的账号是qiwsir,欢迎follow me)。但是,在某些情况下,语言中提供的排序方法或许不适合,必须选择某种排序算法。原创 2014-06-22 19:03:25 · 444 阅读 · 0 评论 -
无向图最小生成树Prim算法
无向图最小生成树的Prim算法,在实现上方法各异。本文演示了用Python是实现的方法,特别是应用了Python有的一个heapq排序方法,让代码更简洁。原创 2014-06-20 11:12:14 · 793 阅读 · 0 评论 -
最短路径问题的Dijkstra算法
问题最短路径问题的Dijkstra算法是由荷兰计算机科学家艾兹赫尔·戴克斯特拉提出。迪科斯彻算法使用了广度优先搜索解决非负权有向图的单源最短路径问题,算法最终得到一个最短路径树> 。该算法常用于路由算法或者作为其他图算法的一个子模块。 这个算法的python实现途径很多,网上能够发现不少。这里推荐一个我在网上看到的,本来打算自己写,看了这个,决定自己不写了,因为他的已经太原创 2014-06-21 08:18:46 · 469 阅读 · 0 评论 -
要继续看Python写算法的内容请到那里去
因为在这里发文章的时候,莫名其妙的出现发布出去的问题,客服告知是因为链接或者敏感词。能不能告诉我哪里出了问题?我可以修改,以便再发。但是,没有人告诉我,只是告诉我不能发。另外,能不能公布一下敏感词?以后我在遣词造句的时候,才可以避免。但是,没有看到敏感词列表。以后我的文章将发布在https://www.github.com/qiwsir/algorithm里面,有兴趣的可以到那原创 2014-06-20 12:36:52 · 491 阅读 · 0 评论 -
为什么总是“待审核”
不知道这篇文章哪里犯忌讳了,发布出去,总处于待审核的状态,只能烦请看官移步到github上了。https://github.com/qiwsir/algorithm/blob/master/prim_algorithm.md也烦请高手指点?我哪里没有符合?原创 2014-06-20 11:27:11 · 769 阅读 · 0 评论 -
文章总是处于待审核状态
刚才发了一篇关于算法的文章,居然显示“待审核”原创 2014-06-20 11:16:53 · 655 阅读 · 0 评论 -
用阿拉伯乘法解决大整数相乘问题
在Python中本来不存在所谓大整数溢出问题。但是,我看到了一个叫做阿拉伯乘法的方法,是一个古老的计算两个数相乘的问题。于是用它来计算两个大整数相乘,感觉还不错。原创 2014-06-13 10:53:11 · 939 阅读 · 0 评论 -
Python中的二叉树查找算法模块
问题Python中的二叉树查找算法模块思路说明二叉树查找算法,在开发实践中,会经常用到。按照惯例,对于这么一个常用的东西,Python一定会提供轮子的。是的,python就是这样,一定会让开发者省心,降低开发者的工作压力。python中的二叉树模块内容:BinaryTree:非平衡二叉树 AVLTree:平衡的AVL树 RBTree:平衡的红黑树原创 2014-07-03 22:50:35 · 836 阅读 · 0 评论 -
九宫格问题的求解
九宫格问题是一个面试常被问及的问题,本文用python进行了求解。原创 2014-06-06 22:03:03 · 906 阅读 · 0 评论 -
有关科学计算方面的python解决
在科学计算方面,一般认为matlab是一个超强的东西,此外还有R。至于某种语言来说,一般都要讲究一些特别的算法,包括但不限于:矩阵方面的计算指数计算对数计算多项式运算各类方程求解总之,只要是数学问题,在python里面,可以使用以下任何一个来解决NumPySciPymatplotlibETS顺便推荐一本书《用Python做科學計算》。地址是:http:/原创 2014-06-26 21:25:10 · 327 阅读 · 0 评论 -
LUA分割字符串
+--在LUA中,没有类似python的str.split()函数,如果要将一个字符串按照指定的符号分割,并存到table中。+--如将a="1,2,3"转换为{1,2,3}++a="1,2,3,4," --或者 a="1,2,3,4" 不论最后一个是否有","+t={}+原创 2014-06-05 09:46:37 · 674 阅读 · 0 评论 -
统计整数数组的余数
问题要求定义一个int型数组a,包含100个元素,保存100个随机的4位数。再定义一个int型数组b,包含10个元素。统计a数组中的元素对10求余等于0的个数,保存到b[0]中;对10求余等于1的个数,保存到b[1]中,……依此类推。解决(python)#!/usr/bin/env python#coding:utf-8import randomif __name__=="__原创 2014-06-05 09:55:29 · 460 阅读 · 0 评论 -
Python实现归并排序
问题归并排序是一种常用的排序方法,本文讲述了其基本思想以及用python实现的方法。在python中,有一个非常强大的模块heapq,提供了merge方法,让归并排序在python中更简单了。思路说明归并操作过程:1. 申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列2. 设定两个指针,最初位置分别为两个已经排序序列的起始位置3. 比较两原创 2014-06-23 14:51:57 · 419 阅读 · 0 评论 -
快速排序的python多种实现
问题快速排序,这是一个经典的算法,本文给出几种python的写法,供参考。特别是python能用一句话实现快速排序。思路说明快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。(1) 分治法的基本思想分治法的基本思想是:将原问题分解为若干个规模更小但结构与原原创 2014-06-24 17:19:01 · 538 阅读 · 0 评论 -
对一个二维数组的操作
用python解面试题目:定义一个20*5的二维数组,用来存储某班级20位学员的5门课的成绩;这5门课按存储顺序依次为:core C++,coreJava,Servlet,JSP和EJB。(1)循环给二维数组的每一个元素赋0~100之间的随机整数。(2)按照列表的方式输出这些学员的每门课程的成绩。(3)要求编写程序求每个学员的总分,将其保留在另外一个一维数组中。(4)要求编写程序求所有学员的某门课程的平均分。原创 2014-06-05 22:26:49 · 491 阅读 · 0 评论 -
用递归方式遍历二叉树
问题用递归方式遍历二叉树思路说明遍历二叉树的方法有广度优先和深度优先两类,下面阐述的是深度优先。以下图的二叉树为例:先定义三个符号标记:访问结点本身(N)遍历该结点的左子树(L)遍历该结点的右子树(R)有四种方式:前序遍历(PreorderTraversal,NLR):先访问根结点,然后遍历其左右子树中序遍历(InorderT原创 2014-07-13 22:28:45 · 517 阅读 · 0 评论 -
二分查找算法的Python实现
问题二分查找list.index()无法应对大规模数据的查询,需要用其它方法解决,这里谈的就是二分查找思路说明在查找方面,python中有list.index()的方法。例如:>>> a=[2,4,1,9,3] #list可以是无序,也可以是有序>>> a.index(4) #找到后返回该值在list中的位置1>>原创 2014-06-25 21:56:10 · 1366 阅读 · 0 评论 -
去除数组中重复元素
统计一个一维数组中的各个元素的个数,然后删除多出来的重复元素,并输出新的数组结果。例如:[1,2,2,2,3,3,3,3,3]-->[1,2,3]原创 2014-06-07 10:57:28 · 946 阅读 · 0 评论 -
将一个数组中的偶数放前面奇数放后面
一个数组由若干个整数组成,现要求:将偶数放到前面,奇数放到后面,并输出数组。提供了两种PYTHON的解法和一个RACKET解法。原创 2014-06-10 09:51:14 · 3819 阅读 · 0 评论 -
删除一个字符串中连续超过一次的空格
问题删除一个字符串中连续超过一次的空格。解决(Python)#! /usr/bin/env python#coding:utf-8def del_space(string): split_string = string.split(" ") #以空格为分割,生成list,list中如果含有空格,则该空格是连续空格中的后一个 string_list =原创 2014-06-11 20:47:02 · 445 阅读 · 0 评论 -
非对称二叉树查找算法
问题非对称二叉树查找算法思路说明二叉树查找是一个面对动态数据比较常用的查找算法。本文根据下面地址文章翻译,并根据本人的理解进行适当修改。代码是用python实现的。原文地址:http://www.laurentluce.com/posts/binary-search-tree-library-in-python/comment-page-1/二叉树查原创 2014-07-02 18:24:58 · 499 阅读 · 0 评论 -
查找字符串中出现最多的字符和个数
问题:查找字符串中出现最多的字符和个数?如 sdsdsddssssssdd -> 字符最多的是s,出现9次思路说明利用python中的collections模块的Counter,查此函数详细内容.对字符串进行统计。然后将结果转化为字典类型。特别注意,在字符串中可能会出现数量并列第一的字符,因此要通过循环找出最大数之后,再通过循环找出最大数对应的字母(键)。解答imp原创 2014-05-28 09:04:22 · 348 阅读 · 0 评论 -
以整数元素构成的list中的数字组成最小整数
把一个int型数组中的数字拼成一个串,这个串代表的数字最小。用python解决此问题的方法。原创 2014-06-10 21:10:25 · 518 阅读 · 0 评论 -
python的sorted排序详解
排序,在编程中经常遇到的算法,我也在几篇文章中介绍了一些关于排序的算法。有的高级语言内置了一些排序函数。本文讲述Python在这方面的工作。供使用python的程序员们参考,也让没有使用python的朋友了解python。领略一番“生命有限,请用Python”的含义。内置函数sorted()/list.sort()的使用简单应用python对list有一个内置函数:原创 2014-07-01 16:11:09 · 1911 阅读 · 0 评论 -
查找元素在list中的位置以及折半查询
问题查找某个值在list中的位置解决思路可以用折半查询的方法解决此问题。解决(Python)#! /usr/bin/env python#coding:utf-8#折半查找某个元素在list中的位置def half_search(lst,value,left,right): length = len(lst) while left<ri原创 2014-06-11 14:11:16 · 1305 阅读 · 0 评论 -
字符串转成驼峰的方法
问题请写一个字符串转成驼峰的方法?例如:border-bottom-color -> borderBottomColor解决python解决方法:def convert(one_string,space_character): #one_string:输入的字符串;space_character:字符串的间隔符,以其做为分隔标志 string_list = st原创 2014-05-27 16:11:34 · 1791 阅读 · 0 评论