Java算法与数据结构规范

2019-11-29  本文已影响0人  王侦

0.算法与数据结构编程时应遵守的一般性规范

1.定义清楚方法的前置条件、后置条件和副作用

1)前置条件——在方法执行前必须为真。除非前置条件满足,否则不应该使用方法,也不能期待方法能正确执行。(表示函数对其参数的期望和/或函数可能使用的对象的状态。)

2)后置条件——个后置条件是,应当在举行谓词从退出的功能。它表达了条件,一个函数应确保为返回值和/或可以由函数中使用的对象的状态。

2.清晰定义状态变量,并维护状态变量含义不变

3.for循环、while循环的处理

循环语句三要素:

1)要特别定义清楚循环各变量含义
2)定义清楚循环不变量含义,并保证循环不变量在循环中始终成立;特别注意在循环内部处理数组索引相关时,不要忘了范围检查
3)控制变量的正确更新,不要漏掉相关变量的更新

            for (Index<K,V> prev = head; prev != null; prev = prev.down) {
                // 这一句不能放在for循环更新语句中,只能放在这里,因为prev可能为null,所以只有检查完之后才能赋值
                Index<K,V>  right = prev.right;

4.复杂方法和数据结构的处理方式

5.正确编写递归方法

参考数学归纳法:

两个核心要素:

递归调用,注意状态的维护

    private void dfs(int v) {
        marked[v] = true;
        onStack[v] = true;
        for (int w : G.adj(v)) {
            if (hasCycle()) {
                return;
            }
            if (!marked[w]) {
                edgeTo[w] = v;
                dfs(w);
            } else if (onStack[w]) {
                cycle = new ArrayDeque<>();
                cycle.push(w);
                for (int u = v; u != w; u = edgeTo[u]) {
                    cycle.push(u);
                }
                cycle.push(w);
            }
        }
        // 特别注意,不要忘了这个,递归代码必须遵守的规则
        onStack[v] = false;
    }

6.特殊情况、边界处理

7.其他细节知识点

 Arrays.fill(distTo, Double.POSITIVE_INFINITY);
private static final Object[] EMPTY_ELEMENTDATA = {};
上一篇 下一篇

猜你喜欢

热点阅读