经过昨天的笔试,发现自己算法还是蛮弱的,以后有空还是要多看看算法。下面是《算法导论》第十五章第一道习题代码:
package introductionToAlgorithms;
//动态规划求装配线调度最短路线
public class Scheduling {
static int[] f1 = new int[6];
static int[] f2 = new int[6];
static int[] l1 = new int[6];
static int[] l2 = new int[6];
static int[][] a = {{7,9,3,4,8,4},{8,5,6,4,5,7}};
static int last;//l*
static int e1 = 2, e2 = 4,x1 = 3, x2 = 2;
static int[][] t = {{2,3,1,3,4},{2,1,2,2,1}};
static int n = 6;
static int result;
static int[] sequence = new int[6];
static void fastestWay() {
f1[0] = e1 + a[0][0];
f2[0] = e2 + a[1][0];
for(int j=1; j<n; j++) {
//更新1号装配线上的f1[i]和l1[i]
if(f1[j-1] + a[0][j-1] < f2[j-1] + t[1][j-1] + a[0][j] ||
f1[j-1] + a[0][j-1] == f2[j-1] + t[1][j-1] + a[0][j]) {
//若从1号装配线花费时间更少
f1[j] = f1[j-1] + a[0][j];
l1[j] = 1;
}
else {
f1[j] = f2[j-1] + t[1][j-1] + a[0][j];
l1[j] = 2;
}
//更新2号装配线上的f2[i]和l2[i]
if(f2[j-1] + a[1][j-1] < f1[j-1] + t[0][j-1] + a[1][j] ||
f2[j-1] + a[1][j-1] == f1[j-1] + t[0][j-1] + a[1][j]) {
//若从2号装配线花费时间更少
f2[j] = f2[j-1] + a[1][j];
l2[j] = 2;
}
else {
f2[j] = f1[j-1] + t[0][j-1] + a[1][j];
l2[j] = 1;
}
}
if( f1[n-1] + x1 < f2[n-1] + x2 ||
f1[n-1] + x1 == f2[n-1] + x2) {
result = f1[n-1] + x1;
last = 1;
} else {
result = f2[n-1] + x2;
last = 2;
}
}
static void printStations() { //逆序打印通过工厂的最快路线
int i = last;
System.out.println("line " + i + ", station " + n);
for(int j = n-1; j>0; j--) {
if(i == 0)
i = l1[j];
else i = l2[j];
System.out.println("line " + i + ", station " + j);
}
}
static int findSequence(int k) {
if(k == n-2) {
if(last == 1)
sequence[k] = l1[n-1];
else
sequence[k] = l2[n-1];
}
else {
if(findSequence(k+1) == 1)
sequence[k] = l1[k+1];
else
sequence[k]= l2[k+1];
}
return sequence[k];
}
static void printStations2() { //顺序打印通过工厂的最快路线
int i = last;
sequence[n-1] = last;
int k = 0;
findSequence(k);
for(int j=0; j<n; j++)
System.out.println("line " + sequence[j] + ", station" + (j+1));
}
public static void main(String[] args) {
fastestWay(); //先求出最快路线
printStations2();
}
}
分享到:
相关推荐
第十五章通常涉及图算法,包括最短路径、最小生成树、网络流等核心概念。在这个压缩包中,我们可能会找到一系列与这些主题相关的习题解答。 在图算法中,Dijkstra算法是一种广泛应用的寻找图中单源最短路径的方法。...
《算法导论》是计算机科学领域的一本经典教材,涵盖了广泛的算法理论与实践知识。针对16至20章的内容,我们将深入探讨以下几个关键知识点: 第16章:图算法 这一章主要介绍图的基本概念,包括有向图、无向图、树...
总之,《算法导论》中文第三版的习题答案是一个宝贵的资源,它能够帮助读者更有效地学习和巩固书中的知识。对于那些希望深入理解算法、提高编程技能的人来说,这是一个不可多得的工具。通过仔细研读和实践,读者将...
《算法导论》是计算机科学领域的一本经典教材,涵盖了广泛的算法分析和设计技术。这本书的第31至35章包含了许多关键的算法概念,这些章节深入探讨了不同的算法主题,对于理解和掌握算法有着至关重要的作用。以下是这...
《算法导论》第二十三章主要探讨的是图算法,包括图的基本概念、图的表示方法、图的遍历以及各种图的特殊结构如最小生成树、最短路径等。本章习题解答涵盖了这些核心知识点,旨在帮助读者深入理解和应用所学理论。 ...
**第十五章:贪心算法** - **主要内容**:介绍了贪心算法的基本思想和应用场景。 - **关键概念**: - **贪心算法**:每次做出局部最优选择,试图得到全局最优解。 - **证明正确性**:通过数学方法证明贪心策略...
《算法导论》第二十五章习题解答涵盖了丰富的算法理论与实践知识,主要涉及图算法、最优化问题以及动态规划等核心概念。本章节的习题旨在帮助读者深入理解和掌握这些算法的应用,提升解决实际问题的能力。以下是部分...
从给定的文件信息来看,这是一份关于《算法导论》一书的习题解答文档,涵盖了书中多个章节的练习题答案。《算法导论》是计算机科学领域内的一本经典教材,由Thomas H.Cormen、Charles E.Leiserson、Ronald L.Rivest...
11. **第十五章:概率与信息论** - 虽然这不是典型的编程主题,但可能会涉及到计算概率或信息熵的Java实现。 12. **第十六章:近似算法** - 当问题无法得到精确解时,近似算法可以找到接近最优的解,如旅行商问题的...
总之,《算法导论第三版总结与练习思考题答案》为学习算法的学生和教师提供了宝贵的资源,它不仅包含了教材的主要知识点,还有详细的解答和练习题,有助于巩固对算法的理解和应用能力。无论是初学者还是有一定基础的...
《算法导论》第二十二章主要探讨了图算法,包括图的基本概念、图的表示方法、最短路径问题、最小生成树以及网络流等问题。这一章的习题解答涵盖了这些核心知识点,旨在帮助读者深入理解和应用这些理论。 一、图的...
通过以上分析可以看出,《算法导论》第13章的习题涵盖了二叉搜索树、红黑树的基本概念及其性质,同时还涉及到了红黑树的构建过程以及红黑树中路径长度的相关证明。这些问题不仅帮助学生巩固了理论知识,也提高了他们...
- **多做练习题**:通过大量的习题练习来巩固所学知识,提高解决实际问题的能力。 - **参与讨论和合作**:与其他学习者一起讨论和解决难题,可以加深对知识点的理解。 - **实践应用**:尝试将所学算法应用到实际项目...
4 算法导论第二版最清晰的英文版 文字和伪代码可以拷出来 书籍介绍: 《算法导论》(Introduction to Algorithms)原书第二版 Thomas H Cormen(科曼) Charles E Leiserson Ronald L Rivest Clifford Stein著 ...
《算法导论》是计算机科学领域的一本经典著作,它深入浅出地介绍了算法的设计、分析和实现。这本书覆盖了广泛的算法主题,包括排序、搜索、图算法、动态规划等,是许多大学计算机科学课程的核心教材。提供的资源包含...
第二版相比第一版进行了大量的修订和完善,包括增加了新的章节、更新了部分算法的最新研究成果、改进了解释方式以及添加了大量的练习题和示例。这些改进不仅增强了教材的实用性和教学效果,也为学生和自学者提供了...
1. **Ch1.pdf** - 第一章通常介绍算法的基础,包括算法的概念、问题的规模表示(如大O符号)、复杂度分析和基本的数据结构(如数组和链表)。 2. **Ch5.pdf** - 第五章通常讨论排序算法,如冒泡排序、选择排序、...