上一页 1 ··· 12 13 14 15 16 17 18 19 20 ··· 28 下一页

2012年8月7日

数据结构之位图

摘要: 1. 概述位图(bitmap)是一种非常常用的结构,在索引,数据压缩等方面有广泛应用。本文介绍了位图的实现方法及其应用场景。2. 位图实现(1)自己实现在位图中,每个元素为“0”或“1”,表示其对应的元素不存在或者存在。#define INT_BITS sizeof(int)#define SHIFT 5 // 2^5=32#define MASK 0x1f // 2^5=32#define MAX 1024*1024*1024 //max numberint bitmap[MAX / INT_BITS];/** 设置第i位* i >> SHIFT 相当于 i / (2 ^ SHI 阅读全文

posted @ 2012-08-07 16:20 mycapple 阅读(3012) 评论(0) 推荐(0) 编辑

算法之排列与组合算法

摘要: 1. 前言本文介绍了常用的排列组合算法,包括全排列算法,全组合算法,m个数选n个组合算法等。2. 排列算法常见的排列算法有:(A)字典序法(B)递增进位制数法(C)递减进位制数法(D)邻位对换法(E)递归法介绍常用的两种:(1) 字典序法对给定的字符集中的字符规定了一个先后关系,在此基础上按照顺序依次产生每个排列。[例]字符集{1,2,3},较小的数字较先,这样按字典序生成的全排列是:123,132,213,231,312,321。生成给定全排列的下一个排列 所谓一个的下一个就是这一个与下一个之间没有字典顺序中相邻的字符串。这就要求这一个与下一个有尽可能长的共同前缀,也即变化限制在尽可能短的后 阅读全文

posted @ 2012-08-07 16:19 mycapple 阅读(1463) 评论(0) 推荐(0) 编辑

算法之图搜索算法(一)

摘要: 1. 介绍本文介绍了比较初级的图搜索算法,包括深度优先遍历,广度优先遍历和双向广度优先遍历。2. 深度优先遍历DFS2.1 算法思想从图中某个顶点v开始,访问此节点,然后依次从v中未被访问的邻接点出发深度优先遍历图,直到图中上所有和v有路径相通的顶点都被访问;若此时图中尚有顶点未被访问,则另选图中一个未被访问顶点做起点,重复以上过程,直到图中所有顶点都被访问为止。深度优先搜索遍历类似于树的先序遍历。假定给定图G的初态是所有顶点均未被访问过,在G中任选一个顶点i作为遍历的初始点,则深度优先搜索遍历可定义如下:(1) 首先访问顶点i,并将其访问标记置为访问过,即visited[i]=1;(2) 然 阅读全文

posted @ 2012-08-07 16:17 mycapple 阅读(2031) 评论(0) 推荐(0) 编辑

素数判定算法

摘要: 1. 素数判定问题素数判定问题是一个非常常见的问题,本文介绍了常用的几种判定方法。2. 原始算法素数的定义是,除了能被1和它本身整除而不能被其他任何数整除的数。根据素数定义 只需要用2到n-1去除n,如果都除不尽,则n是素数,否则,只要其中有一个数能整除则n不是素数。bool is_primer1(int num) { int i; for(i = 2; i < num; i++) { if(num % i == 0) { return true; } } return false;}3. 改进算法n不是素数,则n可表示为a*b,其中2<=a<=b<=n-1,则a... 阅读全文

posted @ 2012-08-07 16:16 mycapple 阅读(2493) 评论(0) 推荐(0) 编辑

数据结构之红黑树

摘要: 1. 简介红黑树是一种自平衡二叉查找树。它的统计性能要好于平衡二叉树(AVL树),因此,红黑树在很多地方都有应用。在C++ STL中,很多部分(目前包括set, multiset, map, multimap)应用了红黑树的变体(SGI STL中的红黑树有一些变化,这些修改提供了更好的性能,以及对set操作的支持)。它是复杂的,但它的操作有着良好的最坏情况运行时间,并且在实践中是高效的: 它可以在O(log n)时间内做查找,插入和删除等操作。本文介绍了红黑树的基本性质和基本操作。2. 红黑树的性质红黑树,顾名思义,通过红黑两种颜色域保证树的高度近似平衡。它的每个节点是一个五元组:color( 阅读全文

posted @ 2012-08-07 16:12 mycapple 阅读(770) 评论(0) 推荐(0) 编辑

背包问题应用

摘要: 1. 背包问题介绍背包问题不单单是一个简单的算法问题,它本质上代表了一大类问题,这类问题实际上是01线性规划问题,其约束条件和目标函数如下:自从dd_engi在2007年推出《背包问题九讲》之后,背包问题的主要精髓基本已道尽。本文没有尝试对背包问题的本质进行扩展或深入挖掘,而只是从有限的理解(这里指对《背包问题九讲》的理解)出发,帮助读者更快地学习《背包问题九讲》中的提到的各种背包问题的主要算法思想,并通过实例解释了相应的算法,同时给出了几个背包问题的经典应用。2. 背包问题及应用dd_engi在《背包问题九讲》中主要提到四种背包问题,分别为:01背包问题,完全背包问题,多重背包问题,二维费用 阅读全文

posted @ 2012-08-07 16:11 mycapple 阅读(1677) 评论(0) 推荐(2) 编辑

NYOJ 212 K尾相等数

摘要: 题目分析:本题就是要利用M*N%R=((M%R)*(N%R))%R 来计算。即K先%1000,然后接下来有1001个K%1000相乘,之所以这样是由于当K或者Power比较大的时候它们相乘可能导致数据溢出,这就需要参考我的另一篇文章里的对大数进行求模运算的相关算法了 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> //包含memset函数 4 5 int Record[1000];//用以记录的一维数组 6 7 int KTail(int K) 8 { 9 memset(Record 阅读全文

posted @ 2012-08-07 12:24 mycapple 阅读(255) 评论(0) 推荐(0) 编辑

抽屉原理

摘要: 桌上有十个苹果,要把这十个苹果放到九个抽屉里,无论怎样放,我们会发现 至少会有一个抽屉里面放两个苹果。这一现象就是我们所说的“抽屉原理”。 抽屉原理的一般含义为:“如果每个抽屉代表一个集合,每一个苹果就可以代 表一个元素,假如有n+1或多于n+1个元素放到n个集合中去,其中必定至少有 一个集合里有两个元素。” 抽屉原理有时也被称为鸽巢原理(“如果有五个鸽 子笼,养鸽人养了6只鸽子,那么当鸽子飞回笼中后,至少有一个笼子中装有2 只鸽子”)。它是组合数学中一个重要的原理。 第一抽屉原理 原理1 把多于n个的物体放到n个抽屉里,则至少有一个抽屉里的东西不少 于两件; 抽屉原理[证明](反证法):如. 阅读全文

posted @ 2012-08-07 12:24 mycapple 阅读(434) 评论(0) 推荐(0) 编辑

NYOJ 169 素数

摘要: 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<math.h> 4 int is_prime(int x) 5 { 6 int i; 7 if(x==1) return 1;//是素数返回0,不是素数返回1 8 for(i=2;i<=sqrt(x);i++) 9 if(x%i==0) return 1;10 return 0;11 }12 int main()13 {14 int n,m,a,b;15 scanf("%d",&n);16 while(n--)17 ... 阅读全文

posted @ 2012-08-07 12:00 mycapple 阅读(830) 评论(0) 推荐(0) 编辑

C++ floor函数

摘要: 在论坛里看到了一个人的提问,关于如何截断浮点数小数部分的问题。我的第一感觉是使用字符串处理(呵呵,估计知道floor函数的人都会笑话我了)。的确,用C++也算挺久了,竟然不知道C++库中的floor函数,可以轻易实现这个功能,唉,感慨~~~~就不多说别的了,下面说一下关于floor函数:1、函数原型:1 double floor ( double x );2 float floor ( float x );3 long double floor ( long double x );2、功能:返回一个小于传入参数的最大整数3、参数:x为将来被处理的数4、返回值:返回不大于x... 阅读全文

posted @ 2012-08-07 11:36 mycapple 阅读(52050) 评论(4) 推荐(5) 编辑

上一页 1 ··· 12 13 14 15 16 17 18 19 20 ··· 28 下一页

导航