算法(4th ed)(112):基础——数据抽象 4.7

阅读数:18 2019 年 11 月 2 日 12:27

算法(4th ed)(112):基础——数据抽象 4.7

(练习)

1.2.1 编写一个 Point2D 的用例,从命令行接受一个整数 N。在单位正方形中生成 N 个随机点,然后计算两点之间的最近距离。

1.2.2 编写一个 Interval1D 的用例,从命令行接受一个整数 N。从标准输入中读取 N 个间隔(每个间隔由一对double 值定义)并打印出所有相交的间隔对。

1.2.3 编写一个 Interval2D 的用例,从命令行接受参数 Nminmax。生成 N 个随机的 2D 间隔,其宽和高均匀地分布在单位正方形中的 minmax 之间。用StdDraw 画出它们并打印出相交的间隔对的数量以及有包含关系的间隔对数量。

1.2.4 以下这段代码会打印出什么?

复制代码
String string1 = "hello";
String string2 = string1;
string1 = "world";
StdOut.println(string1);
StdOut.println(string2);

1.2.5 以下这段代码会打印出什么?

复制代码
String s = "Hello World";
s.toUpperCase();
s.substring(6, 11);
StdOut.println(s);

"Hello World"String 对象是不可变的——所有字符串方法都会返回一个新的String 对象(但它们不会改变参数对象的值)。这段代码忽略了返回的对象并直接打印了原字符串。要打印出 "WORLD",请用 s = s.toUpperCase()s = s.substring(6, 11)

1.2.6 如果字符串 s 中的字符循环移动任意位置之后能够得到另一个字符串 t,那么 s 就被称为 t回环变位(circular rotation)。例如,ACTGACG 就是 TGACGAC 的一个回环变位,反之亦然。判定这个条件在基因组序列的研究中是很重要的。编写一个程序检查两个给定的字符串 st 是否互为回环变位。提示:答案只需要一行用到 indexOf()length() 和字符串连接的代码。

1.2.7 以下递归函数的返回值是什么?

复制代码
public static String mystery(String s)
{
int N = s.length();
if (N <= 1) return s;
String a = s.substring(0, N/2);
String b = s.substring(N/2, N);
return mystery(b) + mystery(a);
}

1.2.8 设 a[]b[] 均为长数百万的整形数组。以下代码的作用是什么?有效吗?

复制代码
int[] t = a; a = b; b = t;

:这段代码会将它们交换。它的效率不可能再高了,因为它复制的是引用而不需要复制数百万个元素。

1.2.9 修改 BinarySearch(请见 1.1.10.1 节中的二分查找代码),使用 Counter 统计在有查找中被检查的键的总数并在查找全部结束后打印该值。提示:在 main() 中创建一个 Counter 对象并将它作为参数传递给 rank()

1.2.10 编写一个类 VisualCounter,支持加一和减一操作。它的构造函数接受两个参数 Nmax,其中 N 指定了操作的最大次数,max 指定了计数器的最大绝对值。作为副作用,用图像显示每次计数器变化后的值。

1.2.11 根据 Date 的 API 实现一个 SmartDate 类型,在日期非法时抛出一个异常。

1.2.12 为 SmartDate 添加一个方法 dayOfTheWeek(),为日期中每周的日返回 MondayTuesdayWednesdayThursdayFridaySaturdaySunday 中的适当值。你可以假定时间是 21 世纪。

1.2.13 用我们对 Date 的实现(请见表 1.2.12)作为模板实现 Transaction 类型。

1.2.14 用我们对 Date 中的 equals() 方法的实现(请见 1.2.5.8 节中的 Date 类代码框)作为模板,实现 Transaction 中的 equals() 方法。

评论

发布