算法
文章平均质量分 73
judyge
学习好 能力强。
展开
-
牛顿迭代法求函数值
//////////////////牛顿迭代法,又称作切线法,其具体原理为////求方程f(x)=0的近似根x_k,f(x)=f(x_k)+f'(x_k)(x-x_k)+o(x-x_k)////从而转化为求f(x_k)+f'(x_k)(x-x_k)=0的根////牛顿迭代公式为:x_(k+1)=x_k-f(x_k)/f'(x_k)////相应的迭代函数为:g(x)=x-f(x)/f'(x原创 2014-11-29 14:42:11 · 2321 阅读 · 0 评论 -
HDU1007 查找平面最近点对
求点集中的最近点对有以下两种方法:设p1=(x1, y1), p2=(x2, y2), …, pn=(xn, yn)是平面上n个点构成的集合S,设计算法找出集合S中距离最近的点对。 OJ题目:HDU1007http://acm.hdu.edu.cn/showproblem.php?pid=10071、蛮力法(适用于点的数目比较小的情况下)1)算法描述:已知集合S中有n个点,一共可以转载 2014-11-29 17:45:32 · 662 阅读 · 0 评论 -
隐马尔可夫(HMM)
一、概述计算机科学中所谈的“模式”通常指按照一定顺序发生的事件序列,比如机器翻译和自然语言处理中的文字(词)序列,程序设计中的指令序列,模式则体现了序列中事件的相关性。举一个简单的例子,传说可以通过观察海草来预测天气,比如湿润(soggy)的海草意味着雨天(rainy),干燥(dry)的海草则意味着晴天(sunny)。可以再加入一个中间的状态“潮湿(dump)”,同时引入阴天(clou转载 2014-12-07 23:04:20 · 893 阅读 · 0 评论 -
史上最详细最容易理解的HMM文章
分类 隐马尔科夫模型 HMM(隐马尔科夫模型)是自然语言处理中的一个基本模型,用途比较广泛,如汉语分词、词性标注及语音识别等,在NLP中占有很重要的地位。网上关于HMM的介绍讲解文档很多,我自己当时开始看的时候也有点稀里糊涂。后来看到wiki上举得一个关于HMM的例子才如醍醐灌顶,忽然间明白HMM的三大问题是怎么回事了。例子我借助中文wiki重新翻译了一下,并对三大基本问题进行说明,希转载 2014-12-07 23:19:46 · 891 阅读 · 0 评论 -
java 矩阵计算 加减乘除 反转 分解
矩阵计算package Jama;import java.text.NumberFormat;import java.text.DecimalFormat;import java.text.DecimalFormatSymbols;import java.util.Locale;import java.text.FieldPosition;import java.io.Print原创 2014-12-25 15:44:14 · 1322 阅读 · 0 评论 -
Numpy中矩阵对象
numpy模块中的矩阵对象为numpy.matrix,包括矩阵数据的处理,矩阵的计算,以及基本的统计功能,转置,可逆性等等,包括对复数的处理,均在matrix对象中。 class numpy.matrix(data,dtype,copy):返回一个矩阵,其中data为ndarray对象或者字符形式;dtype:为data的type;copy:为bool类型。>>> a = np.matrix(转载 2014-12-25 15:59:24 · 1560 阅读 · 0 评论 -
numpy中的ndarray方法和属性
[2, 8, 5],[3, 7, 4]])>>> print x.flags #返回数组内部的信息C_CONTIGUOUS : TrueF_CONTIGUOUS : FalseOWNDATA : TrueWRITEABLE : TrueALIGNED : TrueUPDATEIFCOPY : False>>> x.flat[2:6] #将数组变为1维数组,并获取其中的一部分转载 2014-12-25 16:00:57 · 2700 阅读 · 0 评论 -
NumPy-快速处理数据
标准安装的Python中用列表(list)保存一组值,可以用来当作数组使用,不过由于列表的元素可以是任何对象,因此列表中所保存的是对象的指针。这样为了保存一个简单的[1,2,3],需要有3个指针和三个整数对象。对于数值运算来说这种结构显然比较浪费内存和CPU计算时间。此外Python还提供了一个array模块,array对象和列表不同,它直接保存数值,和C语言的一维数组比较类似。但是由于它不支转载 2014-12-25 16:18:46 · 453 阅读 · 0 评论 -
numpy 矩阵计算例子
#-*- coding: UTF-8 -*-import numpy as npa = np.matrix([[1,2,3],[5,5,6],[7,9,9]])s=a*a**-1print s'''矩阵转置'''b= np.array([1, 2, 3])b.reshape((-1,1))print bb.reshape((1,-1))print b'''矩阵乘法原创 2014-12-25 17:16:24 · 738 阅读 · 0 评论 -
【动态规划】电路布线问题
1、问题描述: 在一块电路板的上、下两端分别有n个接线柱。根据电路设计,要求用导线(i,π(i)) 将上端接线柱i与下端接线柱π(i)相连,如下图。其中,π(i),1≤ i ≤n,是{1,2,…,n}的一个排列。导线(I, π(i))称为该电路板上的第i条连线。对于任何1 ≤ i ≤ j ≤n,第i条连线和第j条连线相交的充要条件是π(i)> π(j).π(i)={8,7,4转载 2014-12-26 02:05:22 · 1250 阅读 · 0 评论 -
python 动态规划例子
#-*- coding: UTF-8 -*-import timedef isMatch(s, p): dp=[[False for i in range(len(p)+1)] for j in range(len(s)+1)] '''记录备忘值''' dp[0][0]=True for i in range(1,len(p)原创 2014-12-26 23:04:42 · 626 阅读 · 0 评论 -
leetcode Longest Palindromic Substring
中心拓展法/* * findLongestPalindrome.cpp * * Created on: 2014年12月26日 * Author: judyge */#include #include #include "stdio.h"using namespace std; string findLongestPalindrome(stri原创 2014-12-26 21:18:01 · 396 阅读 · 0 评论 -
LeetCode Regular Expression Matching
‘.’ Matches any single character.‘*’ Matches zero or more of the preceding element.The matching should cover the entire input string (not partial).The function prototype should be:bool isMatch原创 2014-12-26 22:44:32 · 401 阅读 · 0 评论 -
Parallel 并发编程实例
算法计算小于数的所有 素数和不用Parallel# sum_primes_without_pp.pyimport math, sys, timedef isprime(n): """Returns True if n is prime and False otherwise""" if not isinstance(n, int):原创 2014-12-27 11:09:09 · 423 阅读 · 0 评论 -
动态规划例子
对于由从1到N (1 例如,N=3时,可以将集合{1, 2, 3} 分为{1,2}和{3}。此时称有一种方式(即与顺序无关)。N=7时,共有四种方式可以将集合{1, 2, 3, ..., 7} 分为两个部分和相同的子集合:{1,6,7} 和 {2,3,4,5} {2,5,7} 和 {1,3,4,6} {3,4,7} 和 {1,2,5,6} {1,2,4,7} 和 {3,5,原创 2014-12-27 15:01:31 · 1124 阅读 · 0 评论 -
LeetCode Unique Paths 动态规划与大数
A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below).The robot can only move either down or right at any point in time. The robot is trying to reach th原创 2014-12-28 20:02:11 · 479 阅读 · 0 评论 -
九度OJ 时钟
输入: 输入包含多组测试数据,每组测试数据由一个按hh:mm表示的时刻组成。输出: 对于每组测试数据,输出一个浮点数,代表时针和分针的夹角(劣弧对应的角),用角度表示,结果保留两位小数。样例输入: 03:0014:45样例输出: 90.00172.50/* * arc.cpp * * Cre原创 2014-12-29 20:02:04 · 540 阅读 · 0 评论 -
leetcode A String Replacement Problem---流程图
Replace all occurrence of the given pattern to ‘X’.For example, given that the pattern=”abc”, replace “abcdeffdfegabcabc” with “XdeffdfegX”. Note that multiple occurrences of abc’s that are contiguo原创 2014-12-28 18:07:01 · 710 阅读 · 0 评论 -
C++ 测量程序运行时间 任务管理看内存
/* * timer.cpp * * Created on: 2014年12月28日 * Author: judyge */#include#include#include#include#include#include#include#include#include#include#define MAXN 9999#define MAXSIZE 1原创 2014-12-28 22:18:23 · 1127 阅读 · 0 评论 -
九度OJ 重复子串
题目描述:给定一个由小写字母组成的字符串,求它的所有连续子串中,出现过至少两次,且至少有一对出现的重复子串是不重合的连续子串个数。如给定字符串aaaa,aa和a,符合条件,aaa不符合条件(出现重合),故答案为2。 输入:输入包含多组测试用例,每组测试用例包含一个字符串,由小写字母组成,其长度不大于1000。 输出:对于每组测试数据,输出一个整数,代表符合条转载 2014-12-29 20:50:59 · 578 阅读 · 0 评论 -
搜索算法的通用优化方法
[DFS][搜索剪枝]在很多情况下,我们已经找到了一组比较好的解。但是计算机仍然会义无返顾地去搜索比它更“劣”的其他解,搜索到后也只能回溯。为了避免出现这种情况,我们需要灵活地去定制回溯搜索的边界。*例题 计算机网络连接要将n(n台计算机连成网络,连接方法:去除首尾两台计算机与一台计算机相连以外,其他计算机只与两台计算机相连。连接的长度则为计算机连接的电缆的长度。求:一种连接方式,使需要电缆的长度转载 2014-12-29 22:44:36 · 800 阅读 · 0 评论 -
九度OJ 区间问题
题目描述: 给定一个数组,判断数组内是否存在一个连续区间,使其和恰好等于给定整数k。输入: 输入包含多组测试用例,每组测试用例由一个整数n(1接下去一行为n个整数,描述这个数组,整数绝对值不大于100。最后一行为一个整数k(大小在int范围内)。输出: 对于每组测试用例,若存在这个连续区间,输出其开始和结束的位置,s,e(s 若存在多个符合条件的输出,则输出原创 2014-12-29 14:58:16 · 1123 阅读 · 0 评论 -
动态规划算法的优化技巧
动态规划是信息学竞赛中一种常用的程序设计方法,本文着重讨论了运用动态规划思想解题时时间效率的优化。全文分为四个部分,首先讨论了动态规划时间效率优化的可行性和必要性,接着给出了动态规划时间复杂度的决定因素,然后分别阐述了对各个决定因素的优化方法,最后总结全文。[正文]一、引言动态规划是一种重要的程序设计方法,在信息学竞赛中具有广泛的应用。使用动态规划方法解题,对于不少问题具有空间耗费转载 2014-12-29 22:44:54 · 1292 阅读 · 0 评论 -
回溯法+奇偶剪枝——Hdu 1010 Tempter of the Bone
1) 题目Tempter of the BoneTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 47967 Accepted Submission(s): 12905Problem Descriptio转载 2014-12-29 22:58:57 · 404 阅读 · 0 评论 -
九度OJ 朋友圈 并查集
题目描述: 假如已知有n个人和m对好友关系(存于数字r)。如果两个人是直接或间接的好友(好友的好友的好友...),则认为他们属于同一个朋友圈,请写程序求出这n个人里一共有多少个朋友圈。假如:n = 5 , m = 3 , r = {{1 , 2} , {2 , 3} , {4 , 5}},表示有5个人,1和2是好友,2和3是好友,4和5是好友,则1、2、3属于一个朋友圈,4、5属于另一个朋原创 2014-12-31 18:46:25 · 603 阅读 · 0 评论 -
统计子串出现次数 STL map
/* * hash.cpp * * Created on: 2014年12月31日 * Author: judyge */#include #include#include#include#include#include#include#include #include #define random(x) (rand()%x)using namespa原创 2014-12-31 21:10:31 · 749 阅读 · 0 评论 -
统计所有子串写到文件
/* * strin.cpp * * Created on: 2014年12月29日 * Author: judyge */#include #include#include#include#include#include#include #include #define random(x) (rand()%x)using namespace std;原创 2014-12-31 21:30:18 · 394 阅读 · 0 评论 -
九度OJ 区间问题 10000个随机正负数生成
/* * arc.cpp * * Created on: 2014年12月29日 * Author: judyge */#include#include#include#include#define random(x) (rand()%x)using namespace std;bool randbool(){ bool flag;原创 2014-12-31 11:04:08 · 1148 阅读 · 0 评论 -
九度 题目1548:平面上的点
题目描述: 给定平面上的n个点,任意做一条直线,求至多能有几个点恰好落在直线上。输入: 包含多组测试数据,每组测试数据由一个整数n(0接下去n行每行给出一个点的坐标(x,y),x、y的绝对值均小于等于100。输出: 对于每组测试数据,输出一个整数,表示至多能有几个点恰好落在直线上。样例输入: 20 01 140 01 12 2 3 6原创 2015-01-01 00:06:11 · 812 阅读 · 0 评论 -
捉虫记---查看变量,整数转浮点
/* * dot.cpp * * Created on: 2014年12月31日 * Author: judyge */#include#include#include#include#define random(x) (rand()%x)using namespace std;bool randbool(){ bool flag;原创 2015-01-01 00:28:13 · 586 阅读 · 0 评论 -
算法设计方法
《算法设计方法》一书介绍了算法描述和算法分析的基本方法,详细介绍了各种典型算法的基本设计思路。算法是计算机科学的核心内容之一,也是应用电子计算机求解实际问题的基础。对复杂的实际应用问题的求解,大多都归结为算法的设计,然后把求解算法转化为计算机程序。书 名算法设计方法作 者吴哲辉、马炳先ISBN97871转载 2015-04-10 06:32:23 · 550 阅读 · 0 评论 -
Java中Set巧用,去掉重复数据
public static void main(String[] args) { Set set=new HashSet(); set.add("abc"); set.add("cde"); set.add("efg"); set.add("fgh"); set.add("abc"); //重复的abc,set会自动将其去掉 System.out.pri原创 2015-04-10 07:08:44 · 2442 阅读 · 0 评论 -
在O(1)时间删除链表结点
删除结点的操作我们经常碰到,比如一个链表A->B->C->D->E->F->G。如果我们要删除结点E,那么我们只需要让结点D的指针指向结点F即可,但是我们现在只给出链表头结点的指针以及结点E的指针,而又是单项链表,不能在O(1)时间内得到被删除结点前面的那一个结点的指针,所以我们原先的方法是不能在O(1)时间内删除结点E的。那么既然我们不能获得被删除结点的前一个结点的指针,我们就需要转变思原创 2015-04-10 07:20:12 · 371 阅读 · 0 评论 -
数字在数组中出现的次数
目:统计一个数字k在排序数组中出现的次数。例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,输出4次方案一:扫描数组,记录第一个出现的k和最后一个k中间有多少个,时间复杂度为O(n)方案二:由于数组是有序的,那么我们可以利用二分的思想,求出k在数组中的第一个位置和最后位置相减即可。时间复杂度为O(logN)注意严格按照良好的C++编码风格转载 2015-04-10 07:53:39 · 669 阅读 · 0 评论 -
编写实现atoi函数
题目:给定一个字符串,要求转成整数,不允许使用atoi或者其它类似库函数。方案:实现这个函数并不难,但是要考虑以下几个问题 1.考虑字符串为空指针的时候 2.考虑字符串为空串 3.考虑是否有+/-符号 4.考虑是否有不合法的字符 5.考虑结果是否会溢出转载 2015-04-10 08:16:23 · 632 阅读 · 0 评论 -
STL中的set容器的一点总结
1.关于setC++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构操作。vector封装数组,list封装了链表,map和set封装了二叉树等,在封装这些数据结构的时候,STL按照程序员的使用习惯,以成员函数方式提供的常用操作,如:插入、排序、删除、查找等。让转载 2015-04-10 09:36:41 · 371 阅读 · 0 评论 -
链表合并
题目: 输入两个递增排序的链表,要求把两个链表和并成一个链表并且使得新链表也是递增排序的。分析:1. 假设两个链表如下所示 2. 要合并两个链表,可以利用归并排序的合并思想,从头枚举两个链表,判断两个指针指向的两个结点的值关系。 (1)初始化两个指针p1,p2分别指向两个链表的头结点,合并之后新的链表头结点肯定是两个链表中值转载 2015-04-10 09:50:22 · 597 阅读 · 0 评论 -
旋转数组的最小数字
题目:把一个递增数组的前几个元素移动到数组的末尾,我们称之为数组的旋转。输入一个递增排序数组的旋转,输出旋转数组的最小元素。例如输入3 4 5 6 7 1 2,则最小元素为1。规定递增元素是没有重复元素的。分析:1. 最简单做法是从头到尾遍历数组,就可以求出最小元素。时间复杂度O(n),但是这个是最朴素的方法。2. 根据旋转数组的性质,旋转数组满足“转载 2015-04-10 10:01:02 · 363 阅读 · 0 评论 -
高精度进制转换模板
高精度进制转换模板/*高精度进制转换 把oldBase 进制的数转化为newBase 进制的数输出。调用方法,输入str, oldBase newBase.change();solve();output();也可以修改output(),使符合要求,或者存入另外一个字符数组,备用 */#include#include#defien MAXSIZE 1000char原创 2015-04-10 10:15:38 · 555 阅读 · 0 评论 -
最大连续子段和
最近在学习动态规划,将自己的所思所想所得记录下来,检验自己是否真正懂了。 问题描述:给定一个数组,记录一串数字,可正可负,现要求出其中最大的连续子段和。 用数组A[N]记录所要求的数组,用数组B[N]来记录连续子段和的状态通过分析,可以知道:当B[K]>0时,无论B[K]为何值,B[K]=B[K-1]+A[K]当B[K]转载 2015-04-10 20:23:10 · 579 阅读 · 0 评论