| | |
| | | * 结束位置 |
| | | * @return |
| | | */ |
| | | public static Double[][] merge(Double[][] orig, Double start, Double end) { |
| | | public static int[][] merge(int[][] orig, int start, int end) { |
| | | |
| | | // 中间合并结果 |
| | | Double[][] result = new Double[orig.length + 1][2]; |
| | | int[][] result = new int[orig.length + 1][2]; |
| | | |
| | | int j = 0; |
| | | int i = 0; |
| | |
| | | |
| | | switch (action) { |
| | | case ACTION_INSERT: { |
| | | result[j++] = new Double[] { start, end }; |
| | | result[j++] = new int[] { start, end }; |
| | | result[j++] = orig[i]; |
| | | breakFlag = true; |
| | | break; |
| | | } |
| | | case ACTION_MERGE_01: { |
| | | result[j++] = new Double[] { start, orig[i][1] }; |
| | | result[j++] = new int[] { start, orig[i][1] }; |
| | | breakFlag = true; |
| | | break; |
| | | } |
| | |
| | | } |
| | | |
| | | // 如果本次学习终止位置超出以往所有学习进度,则添加到最后 |
| | | if (orig.length == 0 ) { |
| | | result[j++] = new Double[] { start, end }; |
| | | }else if(pos(end, orig[orig.length - 1]) == POS_AFTER){ |
| | | result[j++] = new Double[] { start, end }; |
| | | if (orig.length == 0 || pos(end, orig[orig.length - 1]) == POS_AFTER) { |
| | | result[j++] = new int[] { start, end }; |
| | | } |
| | | |
| | | // 最终合并结果,去掉中间合并结果的多出为空的元素 |
| | | Double[][] finalResult = new Double[j][2]; |
| | | int[][] finalResult = new int[j][2]; |
| | | |
| | | for (int k = 0; k < result.length; k++) { |
| | | if (result[k][0] == 0 && result[k][1] == 0 && k>0) { |
| | |
| | | * 全部学习进度 |
| | | * @return |
| | | */ |
| | | public static Double sum(Double[][] orig) { |
| | | public static int sum(int[][] orig) { |
| | | |
| | | Double sum = 0.0; |
| | | int sum = 0; |
| | | |
| | | for (Double[] item : orig) { |
| | | for (int[] item : orig) { |
| | | sum += (item[1] - item[0] + 1); |
| | | } |
| | | return sum; |
| | | |
| | | } |
| | | |
| | | private static int action(Double[] segment, Double start, Double end) { |
| | | private static int action(int[] segment, int start, int end) { |
| | | int startPos = pos(start, segment); |
| | | int endPos = pos(end, segment); |
| | | |
| | |
| | | |
| | | } |
| | | |
| | | private static int pos(Double index, Double[] range) { |
| | | private static int pos(int index, int[] range) { |
| | | if (index < range[0]) { |
| | | return POS_BEFORE; |
| | | } |