
算法
Hnubama
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
算法复习笔记-BST
二叉树是一种能够将链表插入的灵活性和有序数组查找的高效性结合起来的数据结构实现,这个数据结构主要是由一些节点构成。//节点包含的链接可以为NULL或者指向其他节点,在二叉树中,每个节点最多只能有一个父节点,而且每个节点都有左右两个子节点,如果把节点指向的位置看成另一颗二叉树,则一个根节点指向的就是它的左右子树。节点的定义为一个键,一个值,两个左右子节点public calss Node{原创 2016-03-16 18:56:01 · 445 阅读 · 0 评论 -
Largest Rectangle in Histogram
给定一个数组,把每个元素当做一个矩形,宽度为1,高度为数组元素的值,求出这个数组中矩形面积最大的值。我的做法是遍历数组,给每个值找到左边比他小的值的下标,右边比他值小的下标。两个下标之间的距离即是这个矩形的宽。然后计算面积和最大面积进行比较与替换. 这个算法的时间复杂度为O(n²)int largestRectangle(vector<int> &height){ int sum=0,原创 2016-04-07 19:40:44 · 459 阅读 · 0 评论 -
大数乘法
乘积是逐位相乘,也就是aibj,结果加入到积C的第i+j位,最后处理进位即可,例如:A =17 = 1*10 + 7 = (7,1)最后是十进制的幂表示法,幂次是从低位到高位,以下同。B=25 = 2*10 + 5 = (5, 2);C = A * B = (7 * 5, 1 * 5 + 2 * 7, 1 * 2) = (35, 19, 2) = (5, 22, 2) = (5, 2. 4)=425转载 2016-03-25 22:39:44 · 552 阅读 · 0 评论 -
自动生成格雷码
出处:blog.youkuaiyun.com/beiyeqingteng问题:产生n位元的所有格雷码。格雷码(Gray Code)是一个数列集合,每个数使用二进位来表示,假设使用n位元来表示每个数字,任两个数之间只有一个位元值不同。 例如以下为3位元的格雷码: 000 001 011 010 110 111 101 100 。 如果要产生n位元的格雷码,那么格雷码的个数为2^n.假设原始的值从0开始,格雷码转载 2016-03-25 22:30:19 · 578 阅读 · 0 评论 -
个人算法复习笔记1-二分查找
个人算法复习笔记1-二分查找二分查找的前提是此数组已经有序,所以接收一个key值和一个已经排序的Vector容器,算法使用两个变量lo,hi来记录两端,每次计算中间值与key比较,如果kye小于中间值则,key一定在中间值左方,所以hi=mid-1。反之,key>mid,则key一定在中间值右方,则lo=mid+1,如果找到key=中间值则搜索完毕。如果lo>hi则说明没有查找到。则放回-1;该算法原创 2016-02-29 20:35:55 · 612 阅读 · 0 评论 -
算法复习-3种较高级排序
1.归并排序:它先将要排序的数组递归地分成两半分别排序,然后再将结果归并起来。要做到这一点首先需要一种原地归并两半数组的方法,该方法的思想为先将所有数组复制到一个辅助数组aux[]中,然后再归并到a[]中,也就说将数组按下标i=lo~mid,j=mid+1~hi两部分进行大小比较然后依次返回原数组之中,在比较的时候需要添加一下判定条件 1.左半边用完,i>mid,则直接把右半边剩余数组依次放入原数原创 2016-03-09 15:13:53 · 463 阅读 · 0 评论 -
散列表-拉链法
一个散列函数能够将转化为数组索引。散列算法的第二步是碰撞处理,也就是处理两个或者多个散列值的情况。一种直接的方法是将大小为M的数组的每一个元素指向一条链表,链表中的每个节点都存储了散列值为该元素的索引的键值对,这种方法称为拉链法,因为发生冲突的元素都被存储在链表之中,这个方法的基本思想就是选择足够大的M,使得所有链表都尽可能短以保证查找的高效。查找分为两步:首先根据散列值找到对应的链表,然后沿着链表翻译 2016-03-20 20:00:55 · 2752 阅读 · 0 评论 -
计算机图形学笔记-三种画线算法
1.DDA:在一个坐标轴上以单位间隔对线段取样,从而确定另一个坐标轴上最靠近路线的整数点。 如果斜率m<=1,则以单位X间隔取样,逐步计算y值 y(k+1)=y(k)+m 如果斜率m>1,则以单位Y间隔取样,逐步计算X值 x(k+1)=x(k)+1/m这个算法可以概括为以下过程:首先输入两个端点的坐标,计算端点之间的水平和垂直差值分别赋值给dx,dy 他们绝对值大的作为确定参数K的值。在这个绝原创 2016-03-18 22:05:30 · 7788 阅读 · 1 评论 -
算法复习2-3种初级排序
1.选择排序:首先找到数组中最小的那个元素,其次将它和数组第一个元素交换位置,再次,在剩下的元素中寻找最小的元素,将它与数组第二个元素交换。直到整个数组排序完毕。public void Selection(int[] a){ int N=a.length(); for(int i=0;i<N;i++) { int min=i; for(int j=i+1;j<N;原创 2016-03-06 19:39:07 · 521 阅读 · 0 评论 -
找出出现次数超过数组一半元素的数
开始时k存储数组中的第一个数,j为0,如果数组出现的数于k相等,则j加1,否则就减1,如果j为0,就把当前数组中的数赋给k 因为指定的数出现的次数大于数组长度的一半,所有j++与j–相抵消之后,最后j的值是大于等于1的,k中存的那个数就是出现最多的那个数。下面这个算法只适合数组中数组中某个数的出现次数超过数组长度一半的数组int Search(int A[],int len){if转载 2016-03-26 11:04:51 · 658 阅读 · 0 评论