我有两个C++算法的实现,给他们打电话A和B.A和之间的唯一区别B是A使用std::unordered_map<int, int> hashmap;但B使用google::dense_hash_map<int, int> hashmap;.
我找到了一个A比较慢的输入,B我无法理解为什么.
对于相同的输入,我运行 sudo perf record -e instructions ./A input.txt
然后我得到这个结果:
Overhead Command Shared Object Symbol
65.90% A libc-2.23.so [.] __memset_sse2
6.63% A libc-2.23.so [.] _int_malloc
3.44% A libc-2.23.so [.] malloc
2.61% A libc-2.23.so [.] _int_free
Run Code Online (Sandbox Code Playgroud)
当我做同样B更快的时候,我得到以下内容:
Overhead Command Shared Object Symbol
15.17% B libc-2.23.so [.] _int_malloc
14.94% B B [.] B::func1()
5.72% B …Run Code Online (Sandbox Code Playgroud) 我只是在阅读以下问题: 基数排序最高有效还是最低有效,哪个更快?
接受答案的作者暗示,MSD基数排序确实更快。我不明白为什么。
我已经实现了LSD和MSD(通过执行移位操作来实现二进制),LSD是迭代的,只需要一个存储桶数组,而MSD是递归的,并且每个递归调用都需要一个单独的存储桶数组。
如果您创建一个由1000万个整数组成的随机数组,那么我将看不到MSD会比LSD快多少,因为每次您重新输入函数时都会分配额外的存储桶数组,并且您还必须面对递归调用的开销他们自己。
我可以看到MSD和LSD的组合如何带来整体提升(对前几位运行MSD,对其余位运行LSD以减少高速缓存未命中),但是单独的MSD有望比LSD更有效考虑到它的递归特性以及每个递归调用都需要一个新的存储桶数组这一事实,与LSD不同,LSD既是迭代的,又只需要一个存储桶数组来完成整个排序过程?
要置换一维数组,A我知道您可以运行以下代码:
import numpy as np
A = np.random.permutation(A)
Run Code Online (Sandbox Code Playgroud)
我有一个2D数组,并希望对数组的每一行应用完全相同的排列.你有什么办法可以指定numpy为你做那个吗?
我不明白为什么我必须使用std::vector::swap()来释放内存vector当我想减小 a 的大小时。
为什么有人想要减小 a 的大小,vector同时保留分配的其余未使用内存?
c++ ×3
algorithm ×2
arrays ×1
numpy ×1
performance ×1
python ×1
radix ×1
radix-sort ×1
resize ×1
vector ×1