Practice in Action!--- First Attack!

从本周开始(3.14)开始进行算法训练,结合学习进行。

 

--------------------------------------------------------------------------------------------------------

3.14 -- 3.15

完成算法 EditDistance (算法导论P218)

涉及: 动态规划,算是对动归有了良好的理解:

1. 两个特征:最优子结构 和 重叠子问题

2. 用通俗的话讲,就是能够将问题转化为n*m的矩阵, 然后对矩阵的每一个元素求值,通常M[n][m]即为所求解,而通常时间复杂度为O(mn)

 

遇到的两个问题:

1. 对KILL operation 的处理,只需要将其放在操作序列的最后即可。

2. 对DELETE的处理, 不需要条件 if (src[i-1] == tgt[j] ) ,只需要j和i-1满足要求范围即可,原因是Delete操作,即可将问题转化到[i-1][j]的

状态,而不需要理会后续的匹配的问题。E[i-1][j]已经表明该状态能够满足 src[1..i-1]到tgt[1..j]的转换了,所以src[1..i]到tgt[1..j]的转换也

被满足了。

 

-------------------------------------------------------------------------------------------------------

3.16

今晚完成的是PrintEditProcess

1. 没想到会遇到这么多困难,居然花了一个晚上的时间来写!

反思: 先想好算法,再动手编码是最好的 最快 最高效的方法, 千万不要一上来就编码 ,这样反而会因为紧张而陷入 迷乱当中!

2. 遇到的一些问题: 在String中加入了重载的全局函数operator << (std::ostream &o, BasicString<char> &s)

   (1) 首先应该要注意 friend 声明应该放在private 或 public中,

 (2)友元函数的声明一定要完成一致,不匹配就会出现 m_iLength是私有成员 无法访问的情况。

 

3. 程序中的算法相关的问题:

   主要是PrintOperation中出现的: 如何打印出

Original String: algorithm
Opeartion-<Copy>: a*lgorithm
Opeartion-<INSERT>: an*lgorithm
Opeartion-<INSERT>: ana*lgorithm
Opeartion-<Copy>: anal*gorithm
Opeartion-<DELETE>: anal*orithm
Opeartion-<Replace>: analy*rithm
Opeartion-<Replace>: analys*ithm
Opeartion-<Copy>: analysi*thm
Opeartion-<DELETE>: analysi*hm
Opeartion-<Replace>: analysis*m
Opeartion-<DELETE>: analysis*

这样的过程呢?

其实算法很简单:就是对当前choice[i][j]

for l=0 to j-1 print target[l]

print *

for l=i to src.length()-1 print source[l]

为什么? 因为i,j表示当前进行到的源串和目标串的下标

花了两个小时都没弄好,原来是因为这个原因!!!

 

----------------------------------------------------------------------------

3.25

今晚开始完成编程之美的题目,今晚完成第一题:1的数目,其实这题就是找规律比较简单~而且调试也太好调了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值