假设我想在N机器之间分配强力任务。
我有所有字母数字字符集[a-zA-Z0-9],假设长度为1到8。
希望将我的工作人员之间的密码范围分配给蛮力。
如何实现此算法切片范围?
答案 0 :(得分:0)
让我们从一个稍微简单的问题开始吧。所有键都是8位数字,你有10台机器。
足够简单 - 一台机器检查0???????
,另一台机器检查1???????
,依此类推。请注意,此切片并不关心您正在进行多处理 - 它只是通过修复其中一个数字来分配范围。
您的版本只涉及更多。每个切片都有第一个数字的范围(也许是第二个数字,可能更多,具体取决于您需要切片大小的相等程度)。
假设你想要两个字符的前缀。预先检查单字符密码,这样您就不必再担心这些 - 他们没有足够的时间来担心多处理。
然后(从概念上讲,至少)你列出了两个字符的前缀,并将该列表分开。
“概念上”是什么意思?有62个有效字符(26个大写,26个小写,10个数字)。所以有62*62 = 3844
个可能的双字符前缀。但是您不需要全部列出它们来确定哪个前缀发生在哪个位置。如果有五个处理器,我希望前缀列表为5.所以切片之间有6个边界......
Bound 0 1 2 3 4 5
| | | | | |
Slice | 1 | 2 | 3 | 4 | 5 |
这些3844前缀中的界限位置是......
|-------+------------+--------|
| Bound | Calc | Result |
|-------+------------+--------|
| 0 | (3844*0)/5 | 0 |
| 1 | (3844*1)/5 | 768 |
| 2 | (3844*2)/5 | 1537 |
| 3 | (3844*3)/5 | 2306 |
| 4 | (3844*4)/5 | 3075 |
| 5 | (3844*5)/5 | 3844 |
|-------+------------+--------|
所以切片是......
|-------+------------------|
| Slice | Indexes |
|-------+------------------|
| 1 | 0 <= i < 768 |
| 2 | 768 <= i < 1537 |
| 3 | 1537 <= i < 2306 |
| 4 | 2306 <= i < 3075 |
| 5 | 3075 <= i < 3844 |
|-------+------------------|
对于每个处理器来跟踪它到目前为止处理了多少前缀并不是真正的问题,但它需要知道从哪里开始,所以我们需要将索引转换为双字符前缀。假设你使用代码0到61(62个不同的代码)为小写,然后是大写,然后是数字,这里是你如何转换为绑定1 ...
a
)为m
y
所以你的第一片来自“aa”,但不包括“my”。处理它的处理器只需要尝试每个可能的后缀,包括空后缀。