誰能把這個程式的效能提公升一倍? 並行排序演算法

2021-05-07 09:02:44 字數 1535 閱讀 2712

如下,一組4元向量的排序,如何把排序時間縮減一半?可以用並行演算法。

using

system;

using

system.collections.generic;

using

system.diagnostics;

namespace

vector4test

internal

class

vectorcomparer : icomparer

<

vector

>

}internal

class

vectorcomparer2 : icomparer

<

vector

>

}internal

class

program

private

static

vector getvectors()

return

vectors;

}private

static

void

a(vector vectors)

private

static

void

b(vector vectors) 

array.sort(vectors,

newvectorcomparer2());

}private

static

void

c(vector vectors) 

array.sort(vectors, 

newvectorcomparer2());}}

} 我暈,剛開始我用的演算法a,後來又寫了個演算法b,我還沒用並行演算法呢,一看b方法比a方法時間縮短了差不多兩個數量級,如下

a sort time: 00:00:00.5346475

b sort time: 00:00:00.0169736

太奇怪了也,難道我的

b演算法二級快取命中率比較高?誰能再把我的

b方法消耗時間再降低一半,可以用任何語言,

vector

類等也可以用自己的資料型別,比如結構啦,四維陣列啥的,隨意,只要是四元的向量,每個分量是隨機生成的,然後每個向量的長度是根號下每個分量的平方和,滿足這個條件就行。

modify by wawa at 2009-04-22 06:42

應大家回帖要求,

1、把隨機數種子初始的語句放到了迴圈外面

2、每次執行排序重新獲取新的亂序vector

3、把b方法直接對計算出來的double排序換成了對對vector的排序,因為之前的**實際上沒有對vector排序

4、把vector類增加了值t,用來儲存該vector的長度。

我這裡結果如下

a sort time: 00:00:00.6661531

b sort time: 00:00:00.0423115

c sort time: 00:00:00.0302426

如何提公升程式設計師的「效能」

程式設計師經常痴迷於優化程式的效能,我們始終會圍繞一些讓人絞盡腦汁的優化建議,比如 如何簡化 如何提公升軟體執行速度 如何提高軟體穩定性等等。本文來討論一下程式設計師優化自身 效能 的一些建議。1 提高文件編寫能力 缺乏文件,對軟體開發是致命的,一方面是軟體無追溯能力,無法找到軟體開發的起源,思想 ...

談一談迴圈的效能提公升

迴圈在任何程式語言中都會大量的使用,在js中也不例外。對於js來說,迴圈也有其特殊之處,這邊筆記主要寫的是js中效能提公升。首先要來和大家統一一下概念,下面是for迴圈的基本概念 for迴圈按照如下順序執行 所以大家可以看到 迴圈初始化語句只執行一次,而其他三步每次迴圈都執行。接下來可以從四方面入手...

用一下泛型快取 提公升程式效能

最近看到一些文章,都說程式不能光完成功能,還是要精益求精的 先來一把利刃 泛型快取 找度娘看了看,覺得有乙個概括的不錯,如下 泛型快取是jit產生全新的類,記憶體直接分配,由cpu查詢記憶體位址 我的理解,泛型快取是利用泛型和靜態變數特徵,在執行時根據不同的型別生成不同的類,由於資料是靜態的,每個類...