算法&数据结构
dingyaguang117
这个作者很懒,什么都没留下…
展开
-
计算三角形费马点
1.在一个三角形中,到3个顶点距离之和最小的点叫做这个三角形的费马点。2. 费马点计算方法:(1)若三角形ABC的3个内角均小于120°,那么3条距离连线正好平分费马点所在的周角。所以三角形的费马点也称为三角形的等角中心。(2)若三角形有一内角不小于120度,则此钝角的顶点就是距离和最小的点。3.如何计算等角中心呢?做任意一条边的外接等边三角形,得到另一点,将此原创 2012-01-27 23:47:52 · 19687 阅读 · 0 评论 -
python实现支持unicode中文的AC自动机
最近开始从分析数据,要从大量短文本中匹配很多关键字,如果暴力find的话,发现CPU成为了瓶颈,于是想到了AC自动机AC自动机是多模式匹配的一个经典数据结构,原理是和KMP一样的构造fail指针,不过AC自动机是在Trie树上构造的,但原理是一样的。为了能够匹配unicode,我讲unicode编码之后,按照每4位进行索引,变成了16叉trie树。其实这种事情应该用C/C++来写的,不原创 2012-05-26 12:01:24 · 5157 阅读 · 0 评论 -
DFS+Trie—— DrawSomething辅助 java版
最近你画我猜挺火的,于是就写了个辅助工具。输入候选字符,以及单词长度,就可以匹配出所有符合的单词使用Trie树改造了下,6W单词,虽然还有一个剪枝没有加,但是还是秒出,速度挺快的。Trie树:package org.huohua.drawsomething;import java.util.*;class TrieNode{ TrieNode []m原创 2012-04-05 13:11:56 · 1411 阅读 · 0 评论 -
ProjectEuler,1-10题
先介绍一下,ProjectEuler,欧拉工程,是一个国外的练习数论的网站,总共300多道题目。网址是http://projecteuler.net/problems,有个特点是可以使用任何编程语言,或者自己手算,得到答案提交就可以了。这个和OJ是不一样的。提交通过以后,可以去论坛看看那别人的解决方法,以及参与讨论。好久没有动手做题了,那天看到论坛又有人在说,就来做做。我使用的原创 2012-08-19 12:15:00 · 1534 阅读 · 1 评论 -
ProjectEuler 201,多维背包
http://projecteuler.net/problem=201寻找100个数里面,50大小的子集的,所有和唯一的子集的,和。比普通背包多了一个子集数。没计算最大可能的数是多大,直接用了python的字典表示“和" 的那个维度,当然可以用滚动数组,或者临时变量啥的来减少一个维度,不过我直接每处理一行之后把上一行del,这样可以简单些。。。def m原创 2012-08-19 12:23:07 · 1522 阅读 · 0 评论 -
HDOJ 1223 java大整数递推
又有月赛了 虽然已经是大四实习的老人了 但是还是没忍住做了一题。。翻了一道没人A的题看了下~大致题意是有N个数,请问有多少种大小关系比如3个数就是:1) A=B=C2) A=B3) A4) A5) A6) A=C7) B8) B9) B10) B=C11) C12) C13) C抽象一下,可以看作是,N个球放到盒子里原创 2012-04-08 14:58:33 · 1192 阅读 · 0 评论 -
二维空间点索引数据结构
一、四叉树(quad tree)是在数据库中放置和定位文件(称作记录或键)的方法。这一算法通过不停的把要查找的记录分成4部分来进行匹配查找直到仅剩下一条记录为止。 在树中,记录被存储在叶子的位置上。这一名字的由来是因为记录被存储在端点上,它们上面再没有节点了。分支被称作节点。数的顺序是每节点的分支(也称孩子)数。在四叉树中,每个节点通常有4个孩子,因此顺序是4。四叉树的叶子原创 2012-03-06 00:54:11 · 5861 阅读 · 0 评论 -
关于聚类算法的一些个人想法
现在的项目是在做的超大规模的矩阵的奇异值分解,其目的是对数据进行求特征值,做为聚类算法的输入 因为很久以前就想过聚类单词,所以对聚类算法比较感兴趣。目前只听说了K-means算法,大概的思想就是,把每个数据看做向量空间中的点,然后进行聚类。问题是怎么得到这个数据的表示向量。做奇异值分解的目的就是得到一个特征向量可以表示这个数据。 下面是我对这个特征向量的一些理解: 1.将一原创 2011-05-22 13:10:00 · 779 阅读 · 0 评论 -
C++ 泛型 Heap 实现
鉴于自己没写过Heap,很是羞愧~于是今晚写了一下~1. 学习了下嵌套template的使用~ 实现部分就是template template这种形式2.使用函数对象传递函数,一开始忘了用实例化一个函数对象,语法老错,真汗~3. 想了下heap的push方法,只要在最后一个加上元素,然后从下往上“冒泡”就可以了~可以证明是保持heap有效的原创 2012-01-24 02:54:29 · 1232 阅读 · 0 评论 -
几种线段树举例
我做过的几种线段树类型,贴一下代码备忘1.HDU1166 更新节点,区间求和#include #include #include #include using namespace std;#define MAXN 100005struct node{ int begin,end; int value;};node ST[MAXN*2];int N,A[M原创 2012-01-28 00:02:23 · 821 阅读 · 0 评论 -
Java实现双数组Trie树(DoubleArrayTrie,DAT)
原文地址:Java实现双数组Trie树(DoubleArrayTrie,DAT)传统的Trie实现简单,但是占用的空间实在是难以接受,特别是当字符集不仅限于英文26个字符的时候,爆炸起来的空间根本无法接受。双数组Trie就是优化了空间的Trie树,原理本文就不讲了,请参考An Efficient Implementation of Trie Structures,本程序的编写也是参考这篇论原创 2012-05-28 11:32:32 · 9421 阅读 · 4 评论