如何讓效能提公升10萬倍以上

2021-07-15 21:51:25 字數 1793 閱讀 8679

從100萬個數字中找最大的10個數(提前是元素都是int)?

思路演化闡述:

1、從10個數中找出最大的數?

思路1:先排序啊。

這也是我的第一思路,用冒泡呢?還是 直接插入   還希爾呢?我在腦子轉了一圈,在比較那個排序更優。

其實你做了之後發現,這些排序都的迴圈套迴圈,時間複雜度o(nxn)。下面給的氣泡排序

package bubblesort;

/* * 氣泡排序 從小到大排序

* 2023年7月22日15:00:46

* 唐凌峰

*/public class bubblesort2 ;

for(int i=0;ibubble[j]);

} };

//列印出排序好的陣列

for(int i=0;i

思路2: 假設第乙個元素就是最大。

再遍歷以後的9個元素,跟第乙個比,比第一大就互動。這樣的時間複雜度就是o(n)。

請看下面**:

package maxandmin;

/* * 查詢最大值

*/public class findmax ;

//假設第乙個是最大的或最小的

int minvalue=arraytest1[0];

for(int i=1;iminvalue)

};system.out.print(minvalue); }

public static void main(string args)

}

這樣不用排序也能找出最大的,而且效能提高了,是不是能妙。

2、如何從100萬個元素中找出10最大的元素?

思路1:還先排序,不用了吧,我們模仿從10元素個中找最大的。那個中不用排序的思路。

假設這100萬個無序序列的前10個元素是最大 。

從i=10開始遍歷這100萬個元素,跟前面的10個元素比較,只要比這個10個元素中的任何乙個大就交換

請看下面**實現:

package maxandmin;

/* * 從100萬無序數中,找出最大的10個 int取值範圍: -2147483648~2147483647

* 唐凌峰

* 2023年7月30日17:03:43

* 這個時間複雜度雖然是o(nxn) 其實比排序快多了 排序是100萬x 100萬 這個只有 10x100萬。一下效能提高了10萬倍!

*/public class findtenmax ;

//假定前10個數是最大的,然後拿後面的元素更這10個元素一一對比,只要比其中任何乙個大就換進去

int arrayassume=;

for(int i=10;iarrayassume[j])

} }

for(int k=0;k<10;k++) }

public static void main(string args)

}

這樣表面上看時間複雜度還是o() 其實你指向看這樣做的計算機值最壞的時候了 就:10x100萬步

如果你先排序,就是:100萬x100萬步。

效能一下提公升了 10萬倍,如果只找最大的5個,效能提高的可不是10萬倍

思路決定出路,現在對這話,理解的更有感悟。

這裡面思路妙在:假設  假設。

其實想想我們的直接插入排序,類似用的這個思路。

記得以前在鐵科院給動車做的乙個專案,每張表的資料至少100萬以上。現在看來有些地方可以深度優化的。



如何提公升Eclipse效能

eclipse作為開發人員強力推崇的開發工具之一,其與jbuilder相比,很多同盟都認為使用eclipse比使用jbuilder省記憶體,而且eclipse屬於免費開源專案,而像jbuilder和idea等均屬於商業非免費工具,當然還有其他一些說法。個人選擇eclipse作為主要開發工具的原因主要...

如何提公升Eclipse效能

eclipse作為開發人員強力推崇的開發工具之一,其與jbuilder相比,很多同盟都認為使用eclipse比使用jbuilder省記憶體,而且eclipse屬於免費開源專案,而像jbuilder和idea等均屬於商業非免費工具,當然還有其他一些說法。個人選擇eclipse作為主要開發工具的原因主要...

讓IIS支援10萬併發

適用的iis版本 iis 7.0,iis 7.5,iis 8.0 適用的windows版本 windows server 2008,windows server 2008 r2,windows server 2012 2 net framework相關設定 a 在machine.config中將 改...