arts week11

arts

Posted by Woncz on October 28, 2019

Algorithm

LeetCode算法题

46. Permutations

Java 程序实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
    public List<List<Integer>> permute(int[] nums) {
        List<List<Integer>> ans = new ArrayList<>();
        backtrace(ans, new ArrayList(), nums);
        return ans;
    }

    private void backtrace(List<List<Integer>> ans, List<Integer> list, int[] nums) {
        if (list.size() == nums.length) {
            ans.add(new ArrayList<>(list));
        } else {
            for (int i = 0; i < nums.length; i++) {
                if (list.contains(nums[i])) continue; // already contains current data
                list.add(nums[i]);
                backtrace(ans, list, nums);
                list.remove(list.size() - 1);
            }
        }
    }
}

Review

霸道算法

  • 所有的分布式系统都需要处理一致性问题,一般分为两种策略:1、确保软件在错误发生和修复过程中,能够连续不间断且正确地执行任务;2、临时性的阻止正常任务执行并花费一些时间进行系统重组。
  • Bully算法采用的第二种策略,其中系统重组时的核心角色是coordinator,一个单节点。并不是第二种策略优于第一种,而是需要根据自身业务场景进行实际判断。脱离业务场景谈架构,就是耍流氓。
  • 为了提供不间断服务,系统重组过程需要高效快速。
  • coordinator的选举,与并行处理任务的同步问题类似。
  • Bully算法的假定条件:1、所有的节点使用同一套选举算法 2、所有节点依赖的操作系统和消息处理器,没有BUG 3、消息的产生是有据可查,而非无故生成 4、可靠的存储单元,可以通过合适的硬件提供保障 5、一旦节点失效,将立即停止所有工作 6、没有传输错误 7、消息的产生和接收需要顺序性 8、通讯子系统不会失效,通过超时机制检测接收节点是否存活 9、节点不会暂停并且及时响应处理收到的消息,换言之,如果节点超过规定时间T来响应消息的话,需自动失效,停止所有任务处理。
  • S(i).s表示节点i的状态,S(i).c表示节点i的coordinator,S(i).d表示节点i正在执行的任务定义,S(i).g表示节点i的群组编号

Tip

  • 术道器,学习技巧,知识理论,学习工具,三位一体,共同提高。

Share

少即是多