Skip to content

Commit 3f80d12

Browse files
committed
commit
1 parent 04f4202 commit 3f80d12

File tree

23 files changed

+193
-3
lines changed

23 files changed

+193
-3
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package dynamicProgramming;
2+
3+
public class TestDynamicProgramming {
4+
/**
5+
* 测试动态规划的java类
6+
* int[] p 长度对应的价格数组
7+
* n 钢条长度,这个长度和真正的类中的长度不相同,因为java数组的角标从0开始等。
8+
* @param args
9+
*/
10+
public static void main(String[] args) {
11+
int[] p={0,1,5,8,9,10,17,17,20,24,30};
12+
int n=9; //输入的n,实际为n-1 ; 因为java角标是从0开始的
13+
DynamicProgramming dp=new DynamicProgramming();
14+
// int maxProce=dp.memoizedCutRod(p, n+1);
15+
// int maxPrice=dp.bottomUpCutRod(p, n+2); //两个for循环嵌套
16+
// System.out.println(maxPrice);
17+
dp.printCutRodSolution(p, n+2);
18+
}
19+
}
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
package redBlackTree;
2+
3+
public class RedBlackTree <T extends Comparable<T>>{
4+
public static final boolean RED=true;
5+
public static final boolean BLACK=false;
6+
public RBTreeNode NIL;
7+
public RBTreeNode root;
8+
public class RBTreeNode<T extends Comparable<T>>{
9+
RBTreeNode leftChild;
10+
RBTreeNode rightChild;
11+
RBTreeNode parent;
12+
T key;
13+
boolean color;
14+
}
15+
public void print() {
16+
// TODO Auto-generated method stub
17+
System.out.println(root.leftChild.key);
18+
System.out.println(root.rightChild.key);
19+
}
20+
public void insert(T key){
21+
RBTreeNode newRBTreeNode=new RBTreeNode<>();
22+
newRBTreeNode.key=key;
23+
RBTreeNode y=NIL;
24+
RBTreeNode x=root;
25+
while(x!=NIL){
26+
y=x;
27+
if(newRBTreeNode.key.compareTo(x.key)<0){
28+
x=x.leftChild;
29+
}else{
30+
x=x.rightChild;
31+
}
32+
}
33+
newRBTreeNode.parent=y;
34+
if(y==NIL){
35+
root=newRBTreeNode;
36+
}else if(newRBTreeNode.key.compareTo(y.key)<0){
37+
y.leftChild=newRBTreeNode;
38+
}else{
39+
y.rightChild=newRBTreeNode;
40+
}
41+
newRBTreeNode.leftChild=NIL;
42+
newRBTreeNode.rightChild=NIL;
43+
newRBTreeNode.color=RED;
44+
insertFixUp(newRBTreeNode);
45+
}
46+
private void insertFixUp(RBTreeNode newRBTreeNode) {
47+
// TODO Auto-generated method stub
48+
if(newRBTreeNode.parent!=null){
49+
while(newRBTreeNode.parent.color==RED){
50+
if(newRBTreeNode.parent==newRBTreeNode.parent.parent.leftChild){
51+
RBTreeNode y=newRBTreeNode.parent.parent.rightChild;
52+
if(y.color==RED){
53+
newRBTreeNode.parent.color=BLACK;
54+
y.color=BLACK;
55+
newRBTreeNode.parent.parent.color=RED;
56+
newRBTreeNode=newRBTreeNode.parent.parent;
57+
}else if(newRBTreeNode==newRBTreeNode.parent.rightChild){
58+
newRBTreeNode=newRBTreeNode.parent;
59+
leftRotate(newRBTreeNode);
60+
}else{
61+
newRBTreeNode.parent.color=BLACK;
62+
newRBTreeNode.parent.parent.color=RED;
63+
rightRotate(newRBTreeNode);
64+
}
65+
}else{
66+
//same as then clause with "right" and "left" changted
67+
}
68+
}
69+
}
70+
71+
root.color=BLACK;
72+
}
73+
private void rightRotate(RBTreeNode newRBTreeNode) {
74+
// TODO Auto-generated method stub
75+
RBTreeNode x=newRBTreeNode.leftChild;
76+
newRBTreeNode.leftChild=x.rightChild;
77+
if(x.rightChild!=NIL){
78+
x.rightChild.parent=newRBTreeNode;
79+
}
80+
x.parent=newRBTreeNode.parent;
81+
if(newRBTreeNode==NIL){
82+
root=x;
83+
}else if(newRBTreeNode==newRBTreeNode.parent.leftChild){
84+
newRBTreeNode.parent.leftChild=x;
85+
}else{
86+
newRBTreeNode.parent.rightChild=x;
87+
}
88+
x.rightChild=newRBTreeNode;
89+
newRBTreeNode.parent=x;
90+
}
91+
private void leftRotate(RBTreeNode newRBTreeNode) {
92+
// TODO Auto-generated method stub
93+
RBTreeNode y=newRBTreeNode.rightChild;
94+
newRBTreeNode.rightChild=y.leftChild;
95+
if(y.leftChild!=null){
96+
y.leftChild.parent=newRBTreeNode;
97+
}
98+
y.parent=newRBTreeNode.parent;
99+
if(newRBTreeNode.parent==NIL){
100+
root=y;
101+
}else if(newRBTreeNode==newRBTreeNode.parent.leftChild){
102+
newRBTreeNode.parent.leftChild=y;
103+
}else{
104+
newRBTreeNode.parent.rightChild=y;
105+
}
106+
y.leftChild=newRBTreeNode;
107+
newRBTreeNode.parent=y;
108+
}
109+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package dynamicProgramming;
2+
3+
public class TestDynamicProgramming {
4+
public static void main(String[] args) {
5+
int[] p={0,1,5,8,9,10,17,17,20,24,30};
6+
int n=9; //输入的n,实际为n-1 ; 因为java角标是从0开始的
7+
DynamicProgramming dp=new DynamicProgramming();
8+
// int maxProce=dp.memoizedCutRod(p, n+1);
9+
// int maxPrice=dp.bottomUpCutRod(p, n+2); //两个for循环嵌套
10+
// System.out.println(maxPrice);
11+
dp.printCutRodSolution(p, n+2);
12+
}
13+
}
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

0 commit comments

Comments
 (0)