算法第四版学习——Coursera&DrJava使用方法

引言

前段时间失业了,找工作的时候最深的两点体会是:

1、虽然做过大项目,做过很多复杂业务功能,涉及过很多知识领域。但是都很难表达清楚。

2、笔试遇到很多算法题,做得都比较头疼(糟糕),很多都直接影响了面试结果。

第一点我明白是需要不断总结和积累的,第二点勾起了我对算法学习的兴趣。大学学算法的时候,脱离实践,只谈时间、空间复杂度和实现难度,学完了就忘了,那样枯燥的算法我肯定不想再碰一遍。

偶然看到了Coursera的算法导论课程,遇到了大牛老师Robert Sedgewick,他的视频在网上下下来看了,虽然没有中文字幕,但看起来非常易懂(比大学老师说中文都容易懂。。。)

在写这篇文章的时候已经大约花了一个月时间,学到了字符串处理。算法第一部分(前三章)的Coursera题目已经在网上做完了,应该说例题也是非常经典。如果广大苦手算法的同学可以考虑去看看,真心不错。

这里简单介绍下Algorithm这门课的习题方式和做习题可能遇到的问题,具体习题解答在之后的博客更新:

1、语言用JAVA,但是基本上C#上手很容易,我本人以前用过JAVA,现在主要用C#,基本感觉不到区别。

2、作业上传zip包,只需包含要求的java类文件即可,上传无次数限制,上传后会自动编译测试,测试结果会过几分钟显示。测试结果基本不会很难懂,这个之后我会举例的。

3、官方推荐的开发环境是DrJava,虽然我用的是这个,但不是很推荐,因为默认版本好像是不能设置断点的。调试很麻烦,对新手来说有点难用,我还是推荐用eclipse,但我会介绍怎么用DrJava。

4、每个作业有SpecificationChecklist,前者是题目正文,后者是提示和常见问题,做题目第一个就足够了,如果看不懂题目、做不来或者过不了测试,可以求助第二个。

5、官方提供的algs4.jar import包类似C#中的include,相关的源码和接口文档在Specification和Checklist都有,可以查看,每个项目都要用到,其它的JAVA数据结构我也不知道,所以我也没有引用。

6、实在苦手做不来的童鞋也可以去Coursera论坛上求助,尽量不要太丢人就行。。。

关于DrJava

第一步、下载安装就不说了。打开以后新建项目,和VS里一样,不然无法import jar包。

第二步、选择编译路径引入外部类,最重要的是要把algs4.jar文件的路径添加到Extra Classpath,这点搞了我好久。不然你代码里不能import。

第三步、写Class,一个Class一个文件

第四步、编译执行,先编译成中间文件,我理解和IL类似;只要有main函数,基本上都可以按以下方式执行,注意大小写敏感。

高级功能:单元测试JUNIT

以前比较熟悉NUNIT,JUNIT的话差不多,但是DrJava支持的断言异常少,建议还是不要用了。。基本上手工测测也够了

时间: 2024-10-28 23:20:28

算法第四版学习——Coursera&DrJava使用方法的相关文章

算法(第四版)学习笔记之java实现选择排序

选择排序步骤: 1.找到数组中参与遍历比较的所有元素中的最小元素的下标: 2.将最小元素与数组中参与遍历比较的第一个元素进行交换(如果第一个元素就是最小元素的话,那么也会进行一次交换): 3.若数组中还有需要参与遍历比较的元素,则跳转到步骤1:否则排序结束. 在算法第四版中给出的所有排序均是适用于任意实现了Comparable接口的数据类型,若要将数字作为测试用例,请勿使用基本数据类型,改用Integer等实现了Comparable接口的对象. 选择排序代码如下: /** * * @author

算法第四版学习笔记之快速排序 QuickSort

软件:DrJava 参考书:算法(第四版) 章节:2.3快速排序(以下截图是算法配套视频所讲内容截图) 1:快速排序 2:

算法(第四版)学习笔记之java实现快速排序

快速排序是一种分治的排序算法.它将一个数组分成两个子数组,将两部分独立地排序.快速排序和归并排序是互补的,归并排序将两个子数组分别排序,并将有序的子数组归并以将整个数组排序:而快速排序则是当两个子数组有序时整个数组也就自然有序了.在快速排序中,切分的位置取决于数组的内容. 优点: 1.实现简单: 2.适用于各种不同的输入数据且在一般应用中比其他排序算法都要快得多: 3.原地排序: 4.时间复杂度为o(nlgn); 5.内循环比大多数排序算法都要短,比较次数少. 缺点:快速排序算法非常脆弱,在实现

算法(第四版)学习笔记之java实现堆排序

继上一篇实现基于堆的优先队列后,这次将利用上一次完成的基于堆的能够重复删除最大元素操作的优先队列来实现一种经典而优雅的排序算法,称之为堆排序. 堆排序可分为两个阶段: 1.构建堆:在堆的构建过程中,我们将原始数组重新组织安排进一个堆中: 2.下沉排序:从堆中按递减顺序取出所有元素并得到排序结果 具体的思想在下面的代码中有较为详细的注释: /** * * @author seabear * */ public class HeapSort { /** * 1.构造大根堆:与上一篇基于堆的优先队列相

算法(第四版)学习笔记之java实现栈和队列(链表实现)

下压堆栈(链表实现): import java.util.Iterator; public class LinkedStack<Item> implements Iterable<Item> { public class Node { Item item; Node next; } private Node frist; private int N = 0; public boolean isEmpty() { return N == 0; } public int size()

算法(第四版)学习笔记之java实现归并排序

归并排序思想:将一个数组分成两部分分别排序(使用递归),然后将结果合并起来,即将最后两个有序的数组归并成一个更大的有序数组. 时间复杂度O(n) = NlogN 归并排序最吸引人的性质是它能保证将任意长度为N的数组排序所需时间和NlogN成正比,而缺点便是它所需的额外空间和N成正比. 归并排序又分为自顶向下的排序方式和自底向上的排序方式: 自顶向下的排序方式是利用了分治的思想,将一个大问题分割成若干个等价的子问题进行求解: 自底向上的排序方式是先归并那些微型数组,然后再成对归并得到的子数组. 两

算法(第四版)学习笔记之java实现可以动态调整数组大小的栈

下压(LIFO)栈:可以动态调整数组大小的实现 import java.util.Iterator; public class ResizingArrayStack<Item> implements Iterable<Item> { private int N = 0; private Item[] a = (Item[]) new Object[1]; public boolean isEmpty() { return N == 0; } public int size() {

算法(第四版)学习笔记之java实现能够动态调整数组大小的栈

下压(LIFO)栈:能够动态调整数组大小的实现 import java.util.Iterator; public class ResizingArrayStack<Item> implements Iterable<Item> { private int N = 0; private Item[] a = (Item[]) new Object[1]; public boolean isEmpty() { return N == 0; } public int size() {

算法第四版学习笔记一

1. Integer.toBinaryString(2):就是将输入的数字转换成二进制数,但是转换输出的是 String 类型的字符串. 2. (char)('a'+4); //e 在 java 中,char 类型字符串运行时,直接当作 ASCCII 表上的整数来对待. ('b'+'c'); //197 char + char, char + int 类型均提升为 int. 3. 2.0e-6 //是一个科学计数法,表示 0.000002 . 4.什么是 java 的字节码? 它是一种程序的低级