在开始看这套教材的时候,第一个程序Binary Search就不能正常运行下去,因为作者提供一些常用的方法,需要用到他提供的jar包,同时需要用到他提供的测试数据,为了便于代码的管理,我采用ecilpse对算法进行实现和调试,下面主要介绍一下环境的准备。
一。环境准备
在官网下载需要的jar包和数据 地址 ,下载jar包和一个数据集的压缩包,如下图
二。创建项目
2.1首先配置环境变量,将下载下来的jar包,配置到classpath中
2.2创建一个普通的java项目,导入刚才的jar包
以及解压后的数据,整体目录结构如下:
2.3编写测试代码,主要是二分查找的方法,放在定义的包名下面
import java.util.Arrays; import edu.princeton.cs.algs4.In; import edu.princeton.cs.algs4.StdIn; import edu.princeton.cs.algs4.StdOut; public class Test { public static void main(String[] args) { int[] whileList = In.readInts(args[0]); Arrays.sort(whileList); while(!StdIn.isEmpty()){ int key = StdIn.readInt(); if(rank(key,whileList)<0){ StdOut.println(key); } } } public static int rank(int key,int[] a){ int lo = 0; int hi = a.length -1; while(lo <= hi){ int mid = lo + (hi - lo) / 2; if(key < a[mid]) hi = mid -1 ; else if(key > a[mid]) lo = mid + 1; else return mid; } return -1; } }
说明:其中的StdIn,StdOut方法是作者自定义的标准输入输出方法,根据函数名就可以知道具体想要实现的功能。
2.4测试
因为本书中的很多代码,都需要重定向(本文附录会介绍本书中的重定向和管道),例如二分查找,书中给出的查询方式是:java Test tinyW.txt < tinyT.txt ,在eclipse中采用如下的方式来进行测试:
选中执行类run as --> Run Configurations --> java Application (下面的执行类) -->Common
Input File: 去选择要重定向的文件(<之后的文件)注意:这里的文件路径需要完整的路径
Arguments:输入main函数中 agrs数组接受的参数,路径地址可以是相对地址。
附录:重定向和管道
本书中的两个例子(产生随机数和计算平均数):
1.重定向:
java RandomSeq 100 100.0 200.0 > data.txt ====>回家执行的结果通过标准输出StdOut.print()输出到 data.txt的文件中,而不会打印在控制台
java Average < data.txt ===> 通过标准输入StdIn,将data.txt文件中的内容读取出来,传给Average类进行操作。
2.管道:将一个程序的输出当做另一个程序的输入
java RandomSeq 100 100.0 200.0 | java Average ===>将RandomSeq程序产生的100个平均数 最为 Average计算平均数的参数(这些动作的实际发生顺序是取决于操作系统)
最后教材中所有算法我都会实现出来,并提交到github中。项目地址:https://github.com/yohzhangxin/Algorithms