Algorithems
TinySunny
这个作者很懒,什么都没留下…
展开
-
大数乘法&除法
1. 大数乘法常见解法:A * B1)利用进位加法器的思想①用B的最低位去乘A的每一位,闭关在计算过程中处理进位,并存储该轮结果;②在用B的次位去乘A 的每一位,计算中间结果,并存储数据;③循环计算B的每一位乘A的每一位的结果,并计算之和。2)计算结果中每一位数出现的个数①依次用B的每一位去乘A中的每一位,但保存的结果不为中间结果,而为个十百千位出现的次数;原创 2015-03-07 17:27:16 · 977 阅读 · 0 评论 -
行程编码压缩算法
1. 算法说明RLE(Run Length Encoding行程编码)算法是一个简单高效的无损数据压缩算法,其基本思路是把数据看成一个线性序列,而这些数据序列组织方式分成两种情况:一种是连续的重复数据块,另一种是连续的不重复数据块。对于连续的重复数据快采用的压缩策略是用一个字节(我们称之为数据重数属性)表示数据块重复的次数,然后在这个数据重数属性字节后面存储对应的数据字节本身,例如某一个文件中有如下原创 2015-12-21 21:20:36 · 20508 阅读 · 0 评论 -
排列组合算法实现
1. 递归算法1.1 全排列:全排列表示把集合中元素的所有按照一定的顺序排列起来,使用 P(n, n) = n! 表示n个元素全排列的个数。 例如:{1, 2, 3}的全排列为: 123; 132; 213; 231; 312; 321; 共6个,即3!=321=6。 这个是怎么算出来的呢? 首先取一个元素,例如取出了1,那么就还剩下{2, 3}。 然后再从剩下的集合中取出一个原创 2015-12-21 21:12:31 · 826 阅读 · 0 评论 -
排序算法-SelectSort-选择排序
1. 选择排序算法介绍每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。选择排序是不稳定的排序方法。时间负责度为O(n^2)。2. 算法实现2.1 选择排序<由高到低>//type * pArray: 待排序数组指针//int len:数组的长度//typename type:模板库template <typename type原创 2015-12-21 17:41:45 · 606 阅读 · 0 评论 -
数值交换模板函数
//交换数据template <typename type>void Swap(type * lhs, type * rhs); //lhs = left hand side; rhs = right hand sidetemplate <typename type>void Swap(type * lhs, type * rhs){ type temp = *lhs; *lh原创 2015-12-21 17:22:11 · 356 阅读 · 0 评论 -
筛选法求素数
//输入:数//输出:1->素数// 0->非素数int findPrime(int *number);int findPrime(int *number){ int num = *number; int right = ( *number)/2+1; int i, j; int flag = 1; for (i=2; i<=right; i+原创 2015-12-21 17:00:11 · 319 阅读 · 0 评论 -
搜索算法-二分搜索(折半查找)
1. 二分搜索算法二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。2. 算法过程1)首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子原创 2015-12-21 12:55:16 · 523 阅读 · 0 评论 -
排序算法-InsertSort-插入排序
1. 插入排序算法介绍有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序算法。插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。2. 算法流程插入算法把要排序的数组分成两部分:第一部分包含原创 2015-12-21 12:49:03 · 519 阅读 · 0 评论 -
GCD&LCM-求最大公约数&最小公倍数
1. 定义 ##最大公约数,也称最大公因数、最大公因子,指两个或多个整数共有约数中最大的一个。求最大公约数有多种方法,常见的有质因数分解法、短除法、辗转相除法、更相减损法。 最小公倍数(Least Common Multiple,缩写L.C.M.),如果有一个自然数a能被自然数b整除,则称a为b的倍数,b为a的约数,对于两个整数来说,指该两数共有倍数中最小的一个。计算最小公倍数时,通常会借助最大公原创 2015-12-20 23:31:14 · 916 阅读 · 0 评论 -
动态规划&递归-危险的组合
1. 问题描述有若干个铅盒和铀盒(足量),要求将n(n<=30)个盒子进行排列组合,输出满足至少有三个铀盒相邻的排法的个数。例如输入5,要求输出8。2. 问题分析 说明: 柚盒用1表示,铅盒用0表示,下同。首先,考虑在n-1个盒子已经符合排列要求的情况下,当第n个盒子为1还是为0时,满足条件的排列数. 其情况描述图如图(1)。 对于图(1):当n-1个时满足要求时,如果增加一个盒子n,那么原创 2015-12-20 22:39:15 · 940 阅读 · 0 评论 -
精确乘幂
1. 算法思想精确乘幂的思想秉承于大数乘法,但其实质仍是大数的相乘。只不过,由于底数可以为小数,相比较于大数相乘,需要处理小数点的问题。但是我们可以将采用分离的思想,记录小数点所在的位数(从右往左数,且从0开始)并去除小数点,先将小数换为大数,求出大数的成绩,再填入小数点。2. 问题描述2.1 问题描述 对一个实数R(0.03. 问题要点在本题中,需要把握的要点有三点: 1)一个n位的整数和一个原创 2015-12-20 21:37:32 · 2701 阅读 · 0 评论 -
最短路径算法设计与实现(Dijkstra算法和Floyd算法)
1.问题描述和需求分析随着计算机、网络、Android的兴起与发展,人们在出行时越来越离不开计算机的帮助。人们在旅行时越来越需要地图的帮助。在人们查找最佳行程路线时,便涉及了最短路径问题。用户想从A地到B地,如何查找最短路径,最快到达;以及如何在一组地点中找到相互间的最短路径。这其实便是最短路径算法解决的问题。 本文便是围绕最短路径问题,设计并实现Dijstra和Floyd算法。2. 算法介绍2.原创 2016-01-14 20:16:10 · 1932 阅读 · 0 评论