算法
文章平均质量分 57
wuqiuping695
这个作者很懒,什么都没留下…
展开
-
Catalan数
me 一个童鞋跟 me 提过一个问题:说1-12 这 12 个数,分成 2 组,然后每组按大小排序,其中一组中的数总是比另外一组中对应顺序的数要大,问有多少种情况?me 还真做不出来,他告诉 me 说这是Catalan数。即使他这么说,me 貌似还是不太明白。不过这不影响,me 简单搜索一下这个数(其实me以前就有所耳闻),有好几个用处,简单罗列一下。平衡括号平衡括号:在一个合法的算术表达转载 2015-03-30 22:21:04 · 374 阅读 · 0 评论 -
hashCode()应该怎么写才能高效?
对于散列表,高效的hash函数是保证速度的关键。在java中每个对象都有自己的hashcode()函数,但hashcode()怎么写才高效呢?以下是jdk7系统类库的写法。String类/** * Seed value used for each alternative hash calculated. */ private static final int H原创 2015-09-08 22:01:59 · 1774 阅读 · 0 评论 -
回溯法解决N皇后问题
八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。计算机发明后,有多种计算机语言可以解决此问原创 2015-08-16 17:06:16 · 1978 阅读 · 0 评论 -
生产者消费者模型实现<一>模拟实现
熟悉生产者消费者模型是学习多线程的编程的必经之路,它广泛应用于各种系统中,如TCP消息队列等。下面是模拟实现的代码(为什么叫模拟,请看真实实现就懂了)。Store.javapackage test.producerAndConsumer1;/** * 仓库类 * create by qiuping.wu on 2015-08-10 */public class Stor原创 2015-08-12 12:47:20 · 569 阅读 · 0 评论 -
【手写排序算法及优化】直接插入排序
c++版#includevoid Print(int A[],int len){for(int i=0;i{cout}cout}void InsertSort(int A[], int len){int i,j,temp;for(i=1;i{temp = A[i];j = i-1;while(A[j]>temp原创 2015-03-28 20:56:34 · 490 阅读 · 0 评论 -
Kmeans聚类算法及其java实现
1.基本Kmeans算法选择K个点作为初始质心 repeat 将每个点指派到最近的质心,形成K个簇 重新计算每个簇的质心 until 簇不发生变化或达到最大迭代次数 时间复杂度:O(tKmn),其中,t为迭代次数,K为簇的数目,m为记录数,n为维数空间复杂度:O((m+K)n),其中,K为簇的数目,m为记录数,n为维数2.java实现原创 2015-06-10 19:20:13 · 1332 阅读 · 2 评论 -
【手写排序算法及优化】冒泡排序
c++代码#includevoid Print(int A[],int len){for(int i=0;i{cout}cout}void BubbleSort(int A[], int len){int i,j,temp;int flag;for(i=0;i{flag =0;for(j=0;j{if(A[原创 2015-03-28 21:42:38 · 1681 阅读 · 0 评论 -
n人围成一圈数数出列的问题
题目: n个人围成一个圈,依次报数,每次数到x的人就出列,且开始位置在a处,求所有人出列的顺序。#includeusing namespace std;int main(){ int n=20,a=0,x=5; int count,current; int * array = (int *)malloc(sizeof(int)*n);//建立一个数组,若ar原创 2015-04-19 15:18:28 · 1008 阅读 · 0 评论 -
如何判断链表有环
1, 最简单的方法, 用一个指针遍历链表, 每遇到一个节点就把他的内存地址(java中可以用object.hashcode())做为key放在一个hashtable中. 这样当hashtable中出现重复key的时候说明此链表上有环. 这个方法的时间复杂度为O(n), 空间同样为O(n). 2, 使用反转指针的方法, 每过一个节点就把该节点的指针反向: Boolean reverse(Node *转载 2015-04-18 21:44:39 · 337 阅读 · 0 评论 -
大数乘法
大数乘法:两int(4字节)相乘时,若两个数都比较大,结果用一个int(4字节)存放不了,会产生溢出,导致结果不准确。因此需要对此类比较大的数的乘法另外想办法。这就是大数乘法。大数乘法在ACM大赛,华为,BAT的笔试面试题都比较经常出现。以下是大数乘法的一种实现方法:#include<iostream>using namespace std;#include <string.h>#define原创 2015-03-31 10:38:16 · 546 阅读 · 0 评论 -
【手写排序算法及优化】快速排序
c++#includevoid Print(int A[],int len){for(int i=0;i{cout}cout}void QuickSort(int A[], int l,int r){if(l>=r){return;}int i,j,temp;i = l;j = r;temp = A原创 2015-03-29 11:34:17 · 917 阅读 · 0 评论