算法设计技巧
黄焖鸡米饭啊
嗯。
展开
-
字典序全排列
思路:从左向右找到不符合递增规律的第一个数,比如1,2,5,4,3中的这个数就是2,将其与其右面递增序列中的比他大的最小数,比如在前面例子中的3互换,得到1,3,5,4,2,最后,将该数右边的递增序列排序,得到1,3,2,4,5即可。上面这个是求某一个数的下一个排列,而全排列只需按这个思路,将初始数组设置为从小到大排列的数组即可得到排列。public class 字典序全排列 { publi原创 2017-07-12 19:03:00 · 620 阅读 · 0 评论 -
数据结构之树状数组
树状数组(Binary Indexed Tree BIT)是一种特殊的数据结构,这种数据结构专门用来解决两种问题:给定一个数组array[ ]={a1,a2,a3...aN}(1)给定i,计算前i个数之和。(2)给定i和num,计算array[i]+num之后,对整个树状数组进行改变。这两种操作的时间复杂度在树状数组内均为(log(n))。 省去过多的长篇大论的理论介绍,通过一个简...原创 2018-02-26 21:52:58 · 512 阅读 · 0 评论 -
java中二维数组(多维数组)的理解认识
最近在一些练习之中遇到了很多关于二维数组的处理,例如二维数组的排序,找最大最小值之类的,所以现在来对二维数组或者可以说对多维数组,来做一个小小的总结。 其实无论是面对二维数组还是多维数组时都应该树立一种意识,不管几维数组,其实都可以看做一维数组。拿二维数组来举个例子,更加形象展现一下二维数组与一维数组的关系:public class exercise3 { public st原创 2017-08-23 19:33:23 · 14993 阅读 · 2 评论 -
关于博弈论基础知识的一些总结
文章PDF文档:http://pan.baidu.com/share/link?shareid=163007845&uk=1913509805博弈论是二人或多人在平等的对局中各自利用对方的策略变换自己的对抗策略,达到取胜目标的理论。基础的基础a) 当前执行者想赢。这个是必要的,有时候题目中判别胜负的条件会与平时练习的恰好相反,此时你就应该按照题目要求思考,即在经典模型中思考转载 2017-09-04 10:35:20 · 724 阅读 · 0 评论 -
程序中位运算的妙用
程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算说穿了,就是直接对整数在内存中的二进制位运算。比如,and运算本来是一个逻辑运算符,但整数与整数之间也可以进行and运算。举个例子,6的二进制110,11的二进制是1011,那么6 and 11的结果就是2(0010),它是二进制对应位进行逻辑运算的结果(0表示False,1表示True,空位都当0处理,同1为1,其余全为0)。位运算相较原创 2017-08-10 16:38:46 · 479 阅读 · 0 评论 -
数值计算处理之二分法
二分法:当数据量很大时适宜使用二分法。采用二分法查找时,数据必须是排好序的。因为二分法的核心是前后两个“指针”,根据中间值和目标数据比较的大小来进行移动。步骤:(1)确定该区间的中间位置K(2)将查找的值T与array[k]比较。若相等,查找成功返回此位置;否则确定新的查找区域,继续二分查找。(3)区域确定如下:array[k]>T 由数组的有序性可知array[k,k+1,…原创 2017-08-09 14:12:10 · 2697 阅读 · 0 评论 -
递归实现全排列(java版)
import java.util.Arrays;public class test{ static int count = 0; static void swap(int array[],int a, int b) { int temp = array[a]; array[a]=array[b];原创 2016-11-29 14:01:16 · 332 阅读 · 0 评论 -
五大常用算法
动态规划算法一、基本概念 动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划。二、基本思想与策略 基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子转载 2017-01-19 09:09:43 · 629 阅读 · 0 评论 -
从数组中抽取n个元素的全排列(JAVA)
一个从某个数组中抽取n个元素的全排列小算法。具体应用可以看Subsets题目。public class Test { public static int b[]; public static int totalcount=0; //a[]是被抽取的数组 //except是抽取的个数 //count2是抽取第几次,一共只能抽except次 //count是对每次抽取的数进行不重复原创 2017-07-27 21:53:12 · 3584 阅读 · 0 评论 -
无穷大的设置
在很多算法之中要对一些变量设置无穷大来表示特殊的含义或者进行特殊的计算,而一些高级编程语言之中往往会为编程者设置一些属性来表示无穷大,例如JAVA中的Integer.MAX_VALUE,这个属性的实际值就是大家都经常爱使用的0x7fffffff(2147483647)。使用这种语言本身的来进行无穷大设置在一些比较操作中看似简单便捷,但是在一些涉及到计算的操作中往往存在数值溢出的危险。通过一...原创 2018-03-09 21:41:05 · 1573 阅读 · 0 评论