基数排序代码混淆

Posted

技术标签:

【中文标题】基数排序代码混淆【英文标题】:Radix sorting code confusion 【发布时间】:2013-08-26 22:11:33 【问题描述】:

我对此算法有疑问:

(幻灯片拍摄from here.)

int N = a.length;
int[] count = new int[R];
for (int i = 0; i < N; i++)
 count[a[i]+1]++;
for (int k = 1; k < 256; k++)
 count[k] += count[k-1];
for (int i = 0; i < N; i++)
 temp[count[a[i]++]] = a[i]
for (int i = 0; i < N; i++)
 a[i] = temp[i];

有人可以详细说明我们将记录从 a[] 移动到 temp[] 的第三个 for 循环吗?

我知道在我们累积计数后,它们应该是某种偏移量。所以我们可以在 temp[] 中的适当位置插入字母。

我只是不确定 a[i]++ 在那里做了什么。

感谢任何帮助。

【问题讨论】:

【参考方案1】:

它看起来像一个错字: 应该是:

temp[count[a[i]]++]

下一个元素应该进入下一个空白区域

在第 1 步准备将 type_i 添加到 cnt_i+1,这样为 type_i 元素腾出空间...

step2 是计数的前缀

step3 使用计数作为R 索引指针,并将a 中的所有元素发送到其最终目的地

在这一步保持不变:

count[ x ] 指向下一个可以放置type_x 元素的空白空间(或者输入中没有更多x 元素)

【讨论】:

自从我们在第一个 for 循环中计数 [a[i]+1]++ 时,我们增加了 type_i+1 的频率,对吧?在幻灯片上应该是 a=0、b=2、c=5... 对吧? 我认为原始幻灯片是动画的......并播放了整个算法......但在这个 pdf 中只显示了最终状态

以上是关于基数排序代码混淆的主要内容,如果未能解决你的问题,请参考以下文章

JS代码混淆了,怎么反混淆回去?

安卓编程 如何进行代码混淆

谁给推荐个c++代码混淆工具

这段JS代码用了混淆,有很多![]+,请帮忙还原。

混淆过的js代码如何还原?

如何用llvm-obfuscator混淆代码