Algorithm
LeetCode算法题
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
- 术道器,学习技巧,知识理论,学习工具,三位一体,共同提高。