![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
nanshaws
Java,喜欢c,会一点c#,kotlin和c加加,欢迎大家和我做朋友,一起学习,共同进步,祈求面试和内推
展开
-
两个字符串匹配出最长公共子序列算法
最长公共子序列(Longest Common Subsequence, LCS)是一个经典的计算机科学问题,它寻找两个字符串序列中最长的公共子序列。一个子序列是指在不改变字符顺序的情况下,通过删除某些字符(也可能不删除)得到的新序列。可以得出第二个空为str1[i-1]==str2[j-1].可以看出21年的软考下午题试题4很简单。而第三空可以直接写出d[i-1][j-1]+1,离谱了,没见过像21年的软考题那么简单。根据式子一,二,若len1=0或者len2=0,等于j或者i。原创 2024-05-23 00:08:03 · 181 阅读 · 2 评论 -
算法之堆排序
在最小堆中,父节点的值总是小于或等于其子节点的值。这个很好理解,就是简单的将下面节点最大的用j表示,怎么说呢,就是你想想一颗二叉树,左节点是3,而右节点是4,而大堆肯定是选大的和根节点比较。然后就是那个空,明显是R[j] >=R[0] ,因为前面已经将R[0]=R[i],所以这里和R[0]进行比较就行了。然后第二个空,肯定是构建大堆呗,Heapify(R,i,n),第三个空 i>1或i>=2,第四个空是R[1]=R[0]。i=v,都是根节点编号,R[0]=R[i],就是将根节点存到R[0]。原创 2024-05-22 20:00:13 · 377 阅读 · 3 评论 -
算法之背包问题
所以第二个空应该是j>=w[i],因为只有剩余的背包容量大于或者等于w[i]里面的容量,才可以被选进去,第三个空是再次调用Calculate_Max_Value(v,w,i-1,j-w[i])+v[i] ,当c[i][j]选的值比那个temp小的时候,就进行一次互换就行了,也就是c[i][j]=temp。这里,( dp[i-1][w] ) 表示不选择第 ( i ) 个物品时的最大价值,而 ( dp[i-1][w-weight[i]] + value[i] ) 表示选择第 ( i ) 个物品时的最大价值。原创 2024-05-22 01:59:14 · 615 阅读 · 1 评论 -
c++实现HashMap
它有put(key, value)方法来添加键值对,get(key)方法来检索与键相关的值,remove(key)方法来删除键值对,size()方法来获取哈希映射的当前大小。它使用散列函数计算索引,然后遍历该索引处的链表,如果键已经存在,则更新该值,或者添加新的键值对。它使用散列函数计算索引,并在该索引处的链表中搜索键。vector的每个元素都是键值对的链表(std::list)。hash(const K& key):该方法使用std::hash函数计算给定键的哈希值。的参数,默认值为10。原创 2024-03-04 17:14:05 · 730 阅读 · 0 评论 -
论多段图的最短路径问题(我认为本质上还是暴力枚举法)
第三段:第5点有两条路径,选最短的m(3,5)=min(4+m(2,1), 2+m(2,2))=9,然后依次:m(3,6)=min(2+m(2,1),7+m(2,2),11+m(2,4))=11,m(3,7)=min(1+m(2,1),11+m(2,3),8+m(2,4))=10。第四段:m(4,8)=min(6+m(3,5),4+m(3,6))=15 m(4,9)=min(5+m(3,5),3+m(3,6),5+m(3,7))=14。从0开始,路径为0,所以m(1,0)=0;原创 2023-10-25 12:52:18 · 147 阅读 · 0 评论