写在前面整个项目都托管在了 Github 上:https://github.com/ikesnowy/Algorithms-4th-Edition-in-Csharp这一节内容可能会用到的库文件有 Measurement 和 TestCase,同样在 Github 上可以找到。善用 Ctrl + F 查找题目。习题&题解1.4.1题目证明从 N 个数中取三个整数的不同组合总数为 N(N - 1)(N - 2) / 6。解答即为证明组合计算公式:C(N, 3)= N! / [(N - 3)! × 3!]= [(N - 2) * (N - 1) * N] / 3!= N(N - 1)(N - 2) / 6显然 N 必...
关于-Algorithms, 4th Edition (算法-第四版)源代码在本地机器的运行配置。
其实关于这个教程的使用已经在 Java Algorithms and Clients 页面中写出,并且跨三大平台包括Windows,Linux,Mac OS X。
但对于许多有英文阅读障碍的同学来说,这是一个很棘手的麻烦。(Java Algorithms and Clients 文中列出的配置步骤,如图并且即使按照页面中所给的步骤在相应的平台配置部署之后也会遇到很多问题,所以在这里我列出在Windows上详细...
课程主要教程:算法第四版
网络资料:https://algs4.cs.princeton.edu/home/
第一天:
两个经典算法:快速查找和快速合并
快速查找:
可以由代码实现看出我们查看两个数是否连通,只需要判断数组的值是否相等,所需要的时间很少
但要是合并数组则需要高昂的代价,如果有N个对象就要进行N个对象进行合并,很繁琐。
快速合并:
快速合并算法主要采用树的结构,针对对象的合并,只需要改变对象的父节点指向,合并操作比快速查...
《算法(第四版)》练习答案,自己做的,记录一下~ 如有错误,烦请不吝赐教!1-1-1.
a.7 b.200.0000002,没溢出,正常算就可以 c.true,因为&&的优先级高于||
1-1-2.
a.1.618,类型自动转换了,整型转换为浮点型 b.10.0,类型自动转换了,整型转换为浮点型 c.true,类型自动转换了,整型转换为浮点型,这里4.1>4.0也是true d.33,类型自动转换了,转换为字符串,但是1和2还是能计算的,如果要得到字符串123可以尝试1+""+2+“3”,或...
此博客连接:
字符串
字符串拼接
+
类型转换
整型转字符串int a=6;
String str=toString.value(a);字符串转整型String str="123"
int a=Integer.parseInt(str)在Java中,连接字符串的时候会自动讲任意数据类型的值转换为字符串,如果+后的第一个参数时字符串类型,那么Java会自动将其他参数都转换为字符串类型。
1.初级排序算法
1.1我们关注的主要对象为重拍数组元素的算法。,其中每个元素有个主键,将主键按照某种方式排列。在java中元素通常都是对象,对主键描述往往通过comparable接口。
一般排序模板public class Example{public static void sort(Comparable[] a){.......}private static boolean less(Comparable v,Comparable w){ return v.compareTo(w)<0;}private static void each(Comparable[] a,int i, int j){ Comparable t=a[i...
【转】:https://blog.csdn.net/artprog/article/details/52797472
博主用的是Eclipse。配置Java开发环境就省略了,下面主要说怎么在Eclipse中使用书本自带的库。
1.下载algs4.jar
点击下面的链接下载algs4.jarhttp://algs4.cs.princeton.edu/code/algs4.jar
2.配置环境
首先,将下载好的库放到自己喜欢的一个目录下,最好路径无空格无中文。然后在用户环境变量CLASSPATH中添加该库的路径,如果没有该变量请自行创建。例如我的如下...
import edu.princeton.cs.algs4.StdOut;public class E1_5_21 {public static void main(String[]args){for (int N=125;true;N+=N){int cnt=RandomConnection.count(N)/2;StdOut.printf("N=%13d count=%15d 1/2NlnN=%16.1f ratio=%5.1f\n",N,cnt,1.0/2*N*Math.log(N),1.0/2*N*Math.log(N)/cnt);}}
}
用到的类结合1.5.17
import edu.princeton.cs.algs4.StdIn;
import edu.princeton.cs.algs4.StdOut;public class E1_5_17 {public static void main(String[]args){int N= StdIn.readInt();int cnt=RandomConnection.count(N);StdOut.printf("N=%8d count=%15d\n",N,cnt);}
}
import edu.princeton.cs.algs4.StdRandom;public class RandomConnection {public static int count(int N){//Union find.随机产生pair,直到所有点连在一起,返回产生的数的...
题目意思是当第一次重复的数出现时 生成的前一个数用了多少次import edu.princeton.cs.algs4.StdOut;
import edu.princeton.cs.algs4.StdRandom;public class E1_4_44 {public static void main(String[]args){int N=10000;double sum=0.0;for (int i=0;i<20000;i++){//int temp=BirthdayProblem(N);sum+=temp;StdOut.printf("N=%8d find=%8d\n",N,temp);}StdOut.println("avg="+sum/20000+" expectation="+Math.sqrt(Math.PI*N/...
import edu.princeton.cs.algs4.StdOut;public class E1_4_27 {public static void main(String[]args){Queue<Integer> queue=new Queue<>();for (int i=0;i<5;i++)//先入5个queue.enqueue(i);//出两个StdOut.print(queue.dequeue()+" ");StdOut.print(queue.dequeue()+" ");for (int i=5;i<10;i++)//再入5个queue.enqueue(i);while (!queue.isEmpty())//全出StdOut.print(queue.dequeue()+" ");}public static class Queue<Ite...
import edu.princeton.cs.algs4.StdOut;
import edu.princeton.cs.algs4.StdRandom;import java.util.Arrays;public class E1_4_14 {public static void main(String[]args){//测试是否正确int[] a={1,2,3,-6,-6,7};StdOut.println(fourSum(a));//DoublingRatio 测试速度int N=25;double prev=timeTrial(N);for (N=50;true;N+=N){double now=timeTrial(N);StdOut.printf("N=%6d time=%6.1f ratio=%4.1f\n",N,now,now/prev);prev=...
这道题的意思是给一摞纸牌,上面标有大小的数字,让你在一定条件限制下完成排序,条件是你只能看到上面两张牌,要么交换两张牌,要么将最上面的牌放到这摞牌的底部。
从这道题的描述可以发现,纸牌的交换类似于冒泡排序。
先复习一下什么是冒泡排序。
冒泡排序通过重复地走访待排序列,发现相邻的两项顺序颠倒,就交换两项,不断循环重复,直到没有元素交换的时候(每次循环都能确定一个元素的固定位置,循环n次就能排序完成),循...
import edu.princeton.cs.algs4.StdOut;public class E1_3_48 <Item>{public static void main(String[]args){E1_3_48<Integer> twoStackWithDeque=new E1_3_48<>();for (int i=0;i<5;i++)//将0-4压入左栈twoStackWithDeque.pushLeftStack(i);for (int i=5;i<10;i++)//将5-9压入右栈twoStackWithDeque.pushRightStack(i);for (int i:twoStackWithDeque.deque)//遍历两个栈,结果应该为4,3,2,1,0,5,6,7,8,9StdOut.print(i+" ");StdO...
简单的例子,网络中有10个节点,我们用整数数组int[] a = new int[10]代表这些节点,其中数组元素下标代表节点ID。假设初始时这些节点两两独立,相互之间没有连接。我们先连接网络,然后判断两个点是否相连。
1,普通方法
我们用数组元素值代表每个网络的ID号,如果a[i] == a[j],则节点i和节点j在同一个网络上。
首先对数组a进行初始化,假定每个数组元素初始值为节点的编号,即a[i]=i,则会得到
0 1 2 3 4 5 6 7 8 9
a = 0...