首页 > 代码库 > Princeton Algorithms week3 Assignment

Princeton Algorithms week3 Assignment

这周编程作业是实现检测点共线的算法排序算法有关系的地方在于,对斜率排序后可以很快的检测出来哪些点是共线的,另外这个算法的瓶颈也在于排序的性能。

一点收获:

java传参数时传递的是值这很多人都知道只不过特别要注意的是对于引用类型传递的是“引用的值”也就是说传递的是指针的副本因此虽然似乎把一个数组传递进去了但只要其他地方改动了这个数组函数内部也会被影响同理返回值也是指针如果不拷贝一份再返回很有可能你在修改返回值的时候改动到了类的内部变量。 

自己还不太明白的地方:

循环内部除了排序还有很多很多操作这些相对于排序的时间复杂度不重要是因为当N很大很大时排序需要的时间ONlogN要远远大于你内部循环一遍O(N)和其他操作(常数级复杂度),所以说看时间复杂度还是要看循环内的操作。

总结一下:

编程时还是应该自己动手解决问题,太依赖论坛里的解答或者轻易问同学就等于自己放弃了学习的机会。刘未鹏老师在“为什么遇到问题要自己动手解决”里面已经讲的很清晰了,有时你心里清楚这个问题请做完作业的同学给你简单说两句,就马上可以解决(真的很诱惑呀,谁不想最快的速度写完作业呢?)可是如果你问了,下次遇到类似的问题你还是不会,因为你没有经历那个一点点琢磨明白这个知识点的过程,你就做到不到对这个知识点了然于心,下次用起来就不顺手。心理学上有一个“记忆的存储提取速度成反比”的现象,一个东西你理解它的时候越费劲,到用的时候越容易想起来。

另外,面对困难,坚持想办法,不断搜索,尝试,琢磨...这整个过程是很磨练人的耐性的。尤其是物理专业转计算机的学生,很多比较“怵”需要动手的东西,写程序这个过程就是一个训练自己心态的过程,只有不断积累写程序调程序的经验,才能让自己在面对困难的时候,坚持的时间更长一些。

Princeton Algorithms week3 Assignment