【IT专家】优化方法,利用c++在NxN数组中找到M最大的元素。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本文由我司收集整编,推荐下载,如有疑问,请与我司联系优化方法,利用c++在NxN 数组中找到M 最大的元素。
I need a blazing fast way to find the 2D positions and values of the M largest elements in an NxN array.
我需要一种快速的方法来找到NxN 数组中M 个最大元素的二维位置和值。
right now I’m doing this:
现在我正在做:
struct SourcePoint { Point point; float value;SourcePoint* maxValues = new SourcePoint[ M ];maxCoefficients = new SourcePoint*[for (int j = 0; j rows; j++) { for (int
i = 0; i cols; i++) { float sample = arr[i][j]; if (sample maxValues[0].value) { int q = 1; while ( sample maxValues[q].value q M ) { maxValues[q-1] = maxValues[q]; // shuffle the values back q++; maxValues[q-1].value = sample; maxValues[q-1].point = Point(i,j); A Point struct is just two ints - x and y.
点结构就是两个ints - x 和y。
This code basically does an insertion sort of the values coming in. maxValues[0] always contains the SourcePoint with the lowest value that still keeps it within the top M values encoutered so far. This gives us a quick and easy bailout if sample = maxValues,
we don’t do anything. The issue I’m having is the shuffling every time a new better value is found. It works its way all the way down maxValues until it finds it’s spot, shuffling all the elements in maxValues to make room for itself.
这段代码基本上是在插入某种类型的值。maxValues[0]始终包含具有最低值的源
点,该源点仍然保持在到目前为止附带的前M 值中。如果样本= maxValues,我们
什么都不做,这就给了我们一个快速而简单的援助。我遇到的问题是每次找到一个
新的更好的值时都要进行洗牌。它沿着maxValues 一直向下移动,直到找到它的位
置,将maxValues 中的所有元素都拖放到一起,为自己腾出空间。
I’m getting to the point where I’m ready to look into SIMD solutions, or cache optimisations, since it looks like there’s a fair bit of cache thrashing happening. Cutting the