![]() |
1
1
我认为您可以通过重新使用一个更大的数组来节省一些时间,而不是每次分配新的数组都会导致额外的内存流量和垃圾收集。 这将需要自定义排序实现,该实现知道即使数组可以有1000个项,但对于当前运行,只需要对前80个项进行排序(对于散列也是如此)。在ids的子范围上运行quicksort应该可以正常工作。想法的快速示例(尚未进行详细测试)
|
![]() |
2
3
因此,数组最多可以包含140个项,所有值都在0到175之间。数组中的所有值都是唯一的,顺序无关紧要。也就是说,数组
因此,可以将单个数组表示为175位的集合。更好的方法是,无需对输入数组排序就可以创建集合。 你在c中表示一个集合 BitArray 是的。要计算数组的哈希代码,需要创建集合,然后遍历集合以获取哈希代码。看起来像这样:
它消除了排序以及
我看到你的解决方案的一个问题是你如何使用
该代码错误地假设,如果两个数组的哈希代码相等,则数组相等。您正在为175位数量生成32位哈希代码。肯定会有散列冲突。你最终会说你的两个数组是相同的,而不是相同的。 如果这是你关心的问题,让我知道,我可以编辑我的答案,以提供解决方案。 允许比较
如果希望能够比较项的相等性,而不是只检查它们的哈希代码是否相同,则需要创建一个具有
你的想法是
你的
上面的方法行得通,但这是一个很大的记忆猪。您可以通过创建一个只包含三个
这个班看起来像这样。明白,我还没有测试过代码,但这个想法应该是正确的。
正如我在代码中所评论的,那里的散列函数不太好。它会起作用的,但你可以做得更好一点研究。
这种方法的优点是使用的内存比
|
![]() |
3
1
此版本的
我不知道怎么做
通过消除或减少分支,您还可以获得一些改进
|
![]() |
4
0
把这个放在这里,因为把它放在评论里是没有意义的 到目前为止,我所做的是创建一个布尔数组,并将项的索引设置为true(当存在时),然后用替换calchash;
这样做时,我完全删除了toArray()和array.sort(),这个解决方案是根据dlxeon/jim/joel答案构建的 我把运行时间减少了20-25%,这很好 |
|
Robert King · Unity C#语法问题-转换位置 1 年前 |
![]() |
JBryanB · 如何从基本抽象类访问类属性 1 年前 |
|
law · 检查答案按钮的输入字符串格式不正确 2 年前 |
![]() |
i_sniff_ket · 在unity之外使用unity类 2 年前 |