Homework_01

首先说说GitHub

第一次用GitHub,也是第一次代码版本管理器,暑假的时候在实验室写一个java的项目的时候,就挺烦的,不知道怎么能够管理每天的修改,只能不断地加包,显得很累赘,也不好分清楚不同包之间到底有哪些变化。现在有了GitHub,问题就迎刃而解了。

当然,因为是第一次接触GitHub,自己也做了很多尝试,所以就会出现很多奇奇怪怪的repository,而且还不知道怎么删除,不过我相信在后续的课程中不会再出现这种情况。

 


 

关于作业题

看到题目,不由自主的就想到了一个O(N^2)的算法,但是想想,如果就这么用两个for循环,简简单单地做完了作业,这应该不太符合老师的用意。

所以,出于算法优化的考虑,我开始一步一步推演O(n^2)算法,希望从里面找出一些可以省略的地方。刚开始还觉得算法无懈可击,不过,观察了一段时间后,自己又结合上学期算法里面讲过的最长公共串,然后便想到了用动归的方法来解决这个问题,应该能使算法复杂度降到O(n)。

算法如下:

在O(n)的算法下,顺序遍历数组。在遍历的过程中,在添加第i个元素时,得出来的结论其实是基于第i-1次的结果。并且,添加第i个元素后,得到的结果,也只有两种变化,一个是以它为结尾的新字串,一个是与它无关的旧串,如果是后者,那么很容易知道,无需修改。如果是前者,那么就得看第i个元素是是正是负。

所以就得到了如下两行关键代码: 

tailMax = Max(tailMax+arr[i],arr[i]);
result = Max(result, tailMax);

tailMax是最大尾串。result是最终结果。

至此,算法完成。


 

和所给参考比较

发现自己对这种问题的理解还是不够深刻,虽然可以写出O(n)的算法,但是,相比参考给出的4种解法,我完全没有想到有O(nlogn)的算法,其实,后来回想起来虽然nlogn算法复杂度更高,但是,其中蕴含的分治思想还是需要我们掌握的。


 

心得体会

第一次写这种偏科学性的博文,心里还是有点紧张的。而且我发现,写博文时的思考与自己在写代码时的思考是不一样的。在写代码时,我们往往只追求一种,自己悟了就悟了的地步但是这样很有可能是自己的一时灵感所致,而在写博文的时候,你要想的是,怎么能让别人看懂你书写的算法,理解你的思维脉络,这是很难得一点。

比如这次,我就纠结了好久,怎么措辞能够更为的简洁易懂。最终结果发现,自己所写的,和自己心里所想的差别很大,以后在这一方面还是要加强。这也是为以后写论文做准备吧!


 

至于书籍

我也是和大部分人一样,用的是《代码大全》。

 

 

 

转载于:https://www.cnblogs.com/GrainLee/p/3330155.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值