
数据结构(java)
hhu_Cenhelm
个人博客网站http://101.37.116.176
展开
-
背包问题算法实现
n个物品,质量分别wi,价值分别vi,放入包中,包的容量为T,怎么放价值最大最经典的动态规划的问题,动态规划不同于贪心算法,贪心算法是通过上一步的最优解求得下一步的最优解,然而很多时候并非最优解,动态规划是用局部最优解求得全局最优解背包的状态转换方程f[i,j] = Max{ f[i-1,j-Wi]+Vi( j >= Wi ), f[i-1,j] }f[i,j]表示在前i件物...原创 2020-04-01 11:48:07 · 289 阅读 · 0 评论 -
时间复杂度分析
影响时间复杂度的因素主要有1,机器硬件速度;2,书写程序的语言;3,数据规模 n;4,数据分布 D(原始数据的排列方式)。暂且不考虑硬件速度和程序语言,假设算法运行时间为T = f (D, n)确定基本操作例:s = 0; for(i = 0; i < n; i++) s = s + i;假设赋值运算所需时间为c1秒,一次加法为c2秒,那么算法总运行时间T = c1 + c2*n...原创 2019-02-28 22:24:45 · 3370 阅读 · 0 评论 -
单链表(Java)
单链表顺序表有两个主要缺点:插入和删除效率低下,时间复杂度都是O(n);数组一旦创建,大小不可改变链表方式:逻辑相邻,物理不相邻单链表是用一个指向后继元素的指针将具有线性关系的各个节点链接起来,最后一个节点的后继指针为空指针数据域 节点保存的数据元素(data)指针域 指向后继节点的指针(next)data next 带头节点的单链表头节点本身不包含有效...原创 2019-03-10 19:50:25 · 251 阅读 · 0 评论 -
常规表达式转化为后缀表达式的两种方法
用栈对表达式求值就要想到前缀表达式和后缀表达式了,后缀表达式方便一些。栈由于先进后出和后进先出的原则,所以后缀表达式求值的算法思路简单是:读取后缀表达式,遇到操作数就进栈,遇到操作符的时候,先从栈中连续取出两个操作数,计算出值然后结果进栈。那么问题来了,怎么将常规表达式转化成后缀表达式?以a*b+(c-d/e)*f为例方法一:1,遇到操作数直接输出到后缀表达式2,遇到操作符...原创 2019-03-11 23:13:50 · 2923 阅读 · 0 评论 -
二分查找,哈希查找与哈希映射
二分查找设数组a,其元素个数是n①查找区间的下界用low表示,上界用high表示。初始时,查找区间是low=0,high=n-1②设区间中点下标为mid,其中mid=(high+low)/2;将元素a[mid]的值与key进行比较,若key=a[mid],则表明查找成功,返回该元素的下标mid的值。 ...原创 2019-03-24 17:28:49 · 725 阅读 · 0 评论 -
几种常见排序算法总结
插入排序(教材上现拍的)左边框框中是有序表,右边是无序的,将右边无序的元素挨个往左边插入,我画了两张图,遇到有序表中比自己大的,右移,直到遇到比自己小的赋值退出循环,否则继续直到有序表中第一个public static void insersort(int a[]) { int n = a.length, i, j, x; for(i = 0; i <...原创 2019-04-06 16:09:10 · 236 阅读 · 0 评论