
算法
推敲
专注于企业信息化/工作流/微服务
展开
-
js算法:动态规划-金矿模型与买书问题(附js源码)
本文内容介绍转自博客:通过金矿模型介绍动态规划,后面附上实现的代码:经典的01背包问题是这样的: 有一个包和n个物品,包的容量为m,每个物品都有各自的体积和价值,问当从这n个物品中选择多个物品放在包里而物品体积总数不超过包的容量m时,能够得到的最大价值是多少?[对于每个物品不可以取多次,最多只能取一次,之所以叫做01背包,0表示不取,1表示取] 为原创 2015-08-27 17:22:36 · 1869 阅读 · 0 评论 -
数据结构-Java实现队列
概念队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(head)进行删除操作,而在表的后端(tail)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。队列的数据元素又称为队列元素。在队列中插入一个队列元素称为入队,从队列中删除一个队列元素成为出队。原创 2016-12-02 19:01:00 · 562 阅读 · 0 评论 -
数据结构-Java实现线性表
数据结构-Java实现线性表实现线性表有两种方式。第一种是使用数组存储线性表的元素。数组是动态创建的。超过数组的容量时,创建一个新的更大的数组,并且将当前数组中的元素复制到新建的数组中。另一种方法是用链表结构实现。链表由节点组成,每个结点都是动态生成的,用来存储一个元素。所有的结点连接成一个线性表。本文讲述使用边长数组实现线性表实现代码package com.billJiang.array;impo原创 2016-12-02 18:15:28 · 1994 阅读 · 0 评论 -
数据结构-Java实现散列表
概念散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表原创 2016-12-02 18:26:57 · 3757 阅读 · 1 评论 -
数据结构-Java实现链表
概念链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,操作复杂。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找原创 2016-12-02 18:42:43 · 754 阅读 · 0 评论 -
字符串翻转算法-JAVA
单词翻转问题描述:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变,句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。例如,输入“I am a student.”,则输出“student. a am I”。算法分析首先第一步反转.tneduts a ma I,然后以空格为界,逐个单词反转,最后输出student. a am I,时间复杂度O(n),空间复杂度O(1)Jav原创 2016-10-21 22:13:51 · 1353 阅读 · 0 评论 -
js算法:动态规划-多边形游戏
问题描述: 多边形游戏是一个单人玩的游戏,开始时有一个由n个顶点构成的多边形。每个顶点被赋予一个整数值,每条边被赋予一个运算符“+”或“*”。所有边依次用整数从1到n编号。 游戏第1步,将一条边删除。 随后n-1步按以下方式操作: (1)选择一条边E以及由E连接着的2个顶点V1和V2; (2)用一个新的顶点取代边E以及由E连接着的2个顶点V1和V2。将由顶点V1和V2的原创 2015-09-05 22:20:34 · 2535 阅读 · 0 评论 -
js算法:分治法-归并排序
归并排序(合并排序)是一个递归算法,这个算法的理解其实可以借助下面这个图:对于原始的数组2,1,3,8,5,7,6,4,10,在整个过程执行的是顺序是途中红色编号1-20。虽然我们描述中说的是程序先分解,再归并,但实际过程是一边分解一边归并,前半部分分先排好序,后半部分再拍好,最后整个归并为一个完整的序列,途中的merge过程它所在层的两个序列的merge过程:下图展示了每个merge过程原创 2015-08-23 17:30:56 · 3163 阅读 · 0 评论 -
js算法:动态规划-最大公共子串与最大子段和
最大公共子串代码: 问题定义:比如输入两个字符串BDCABA和ABCBDAB的最长公共字符串有BD和AB,它们的长度都是2 动态规划思路:假设两个字符串分别为s和t,s[i]和t[j]分别表示其第i和第j个字符(字符顺序从0开始),再令L[i, j]表示以s[i]和t[j]为结尾的相同子串的最大长度。应该不难递推出L[i, j]和L[i+1,j原创 2015-08-28 14:18:10 · 4490 阅读 · 0 评论 -
js算法:分治法-快速排序
附代码: 快速排序 /*在快速排序中,记录的比较和交换是从两端向中间 进行的,关键字较大的记录一次就能交换到后面单 元,关键字较小的记录一次就能交换到前面单元, 记录每次移动的距离较大,因而总的比较和移动次 数较少。*/ //快速排序是一种不稳定排序 var arr=[]; funct原创 2015-08-24 13:30:05 · 1435 阅读 · 0 评论 -
js算法:分治法-棋盘覆盖
附代码: New Document table,td{ border:1px solid gray; } var t=0; var color_arr=['red','yellow','green','blue']; var num function initTable(){原创 2015-08-21 17:02:16 · 2298 阅读 · 2 评论 -
js算法:分治法-循环赛事日程表
附代码 循环赛事日程表 table,td{ border:1px solid gray; text-align:center; } var arr=[]; var calc_num=0; /* $(function(){ for(var i=0;i<8;i原创 2015-08-24 17:17:13 · 1522 阅读 · 0 评论 -
数据结构-Java实现栈
概念栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。栈是先进后出,出栈与入栈操作均在一端进行。本文使用数组实现栈、使用容器实现原创 2016-12-02 19:10:48 · 807 阅读 · 0 评论