㈠ 高手請進,數據結構問題,尋找最優最全的演算法
把你這些數據全部導入一個資料庫,幾個SQL幾下就得出結果了。
㈡ 從100萬數據中找出最大10條的最優演算法
我面試的時候有問到過,因為數據量很大,所以要同時考慮空間問題。標准答案是採用堆排序。
具體做法是:
構建一個只有10個元素的min-heap,那麼根結點就是這10個數中最小的數,然後開始遍歷數組,如果遇到的數比min-heap的根結點還小,直接跳過,遇到比min-heap根結點大的數,就替代根結點,然後對這個min-heap進行維護(也就是排序,保證heap的特徵)。那麼遍歷完數組後,這個min-heap的10個元素就是最大的10個數。
關於堆排序的代碼應該不難找
㈢ cplex求最優解和演算法求解,哪個更好二者有什麼區別嗎
需要根據你的問題特性,演算法求解還涉及到你用的具體演算法,可以用現在已有的演算法,也可以自己寫演算法,這些都會影響到求解的效果,不能簡單一句cplex和演算法比較哪個優劣。
而且根據規劃的不同,使用的軟體以及方法也會有差別。
cplex可以求導最優解,但大規模的話可能時間會長。
㈣ 尋求最優最快的演算法,快速找出某一數組中符合條件的子集(如最大的100個)
我記得這個再演算法分析裡面我學過,多種排序方法裡面,時空效率最高的應該是堆排序
堆排序的最壞時間復雜度為O(nlgn)。堆排序的平均性能較接近於最壞性能。
由於建初始堆所需的比較次數較多,所以堆排序不適宜於記錄數較少的文件。
堆排序是就地排序,輔助空間為O(1),
堆排序的演算法:
void HeapSort(SeqIAst R)
{ //對R[1..n]進行堆排序,不妨用R[0]做暫存單元
int i;
BuildHeap(R); //將R[1-n]建成初始堆
for(i=n;i>1;i--){ //對當前無序區R[1..i]進行堆排序,共做n-1趟。
R[0]=R[1];R[1]=R[i];R[i]=R[0]; //將堆頂和堆中最後一個記錄交換
Heapify(R,1,i-1); //將R[1..i-1]重新調整為堆,僅有R[1]可能違反堆性質
} //endfor
} //HeapSort
㈤ 請問數錢的貪婪演算法怎樣確保得到最優解
貪婪演算法:總是作出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,它所做出的僅是在某種意義上的局部最優解。
(註:貪婪演算法不是對所有問題都能得到整體最優解,但對范圍相當廣泛的許多問題它能產生整體最優解。但其解必然是最優解的很好近似解。
基本思路:——從問題的某一個初始解出發逐步逼近給定的目標,以盡可能快的地求得更好的解。當達到某演算法中的某一步不能再繼續前進時,演算法停止
實現該演算法的過程:
從問題的某一初始解出發;
while 能朝給定總目標前進一步 do
求出可行解的一個解元素;
由所有解元素組合成問題的一個可行解;
基本要素:
1、 貪婪選擇性質:所求問題的整體最優解可以通過一系列局部最優的選擇,即貪婪選擇來達到。(與動態規劃的主要區別)
採用自頂向下,以迭代的方式作出相繼的貪婪選擇,每作一次貪婪選擇就將所求問題簡化為一個規模更小的子問題。
對於一個具體問題,要確定它是否具有貪婪選擇的性質,我們必須證明每一步所作的貪婪選擇最終導致問題的最優解。通常可以首先證明問題的一個整體最優解,是從貪婪選擇開始的,而且作了貪婪選擇後,原問題簡化為一個規模更小的類似子問題。然後,用數學歸納法證明,通過每一步作貪婪選擇,最終可得到問題的一個整體最優解。
2、最優子結構性質:包含子問題的最優解
1、 設有n個活動的安排,其中每個活動都要求使用同一資源,如演講會場,而在同一時間只允許一個活動使用這一資源。每個活動都有使用的起始時間和結束時間。問:如何安排可以使這間會場的使用率最高。
活動 起始時間 結束時間
1 1 4
2 3 5
3 0 6
4 5 7
5 3 8
6 5 9
7 6 10
8 8 11
9 8 12
10 2 13
11 12 14
演算法:一開始選擇活動1,然後依次檢查活動一i是否與當前已選擇的所有活動相容,若相容則活動加入到已選擇的活動集合中,否則不選擇活動i,而繼續檢查下一活動的相容性。即:活動i的開始時間不早於最近加入的活動j的結束時間。
Prodere plan;
Begin
n:=length[e];
a {1};
j:=1;
for i:=2 to n do
if s[i]>=f[j] then
begin a a∪{i};
j:=i;
end
end;
例1 [找零錢] 一個小孩買了價值少於1美元的糖,並將1美元的錢交給售貨員。售貨員希望用數目最少的硬幣找給小孩。假設提供了數目不限的面值為2 5美分、1 0美分、5美分、及1美分的硬幣。售貨員分步驟組成要找的零錢數,每次加入一個硬幣。選擇硬幣時所採用的貪婪准則如下:每一次選擇應使零錢數盡量增大。為保證解法的可行性(即:所給的零錢等於要找的零錢數),所選擇的硬幣不應使零錢總數超過最終所需的數目。
假設需要找給小孩6 7美分,首先入選的是兩枚2 5美分的硬幣,第三枚入選的不能是2 5美分的硬幣,否則硬幣的選擇將不可行(零錢總數超過6 7美分),第三枚應選擇1 0美分的硬幣,然後是5美分的,最後加入兩個1美分的硬幣。
貪婪演算法有種直覺的傾向,在找零錢時,直覺告訴我們應使找出的硬幣數目最少(至少是接近最少的數目)。可以證明採用上述貪婪演算法找零錢時所用的硬幣數目的確最少(見練習1)。
㈥ 用什麼演算法解決最優演算法比較合適
問題是線性的,還是非線性的。線性的,分枝定界、分枝割平面、分枝定價、列生成等演算法都可以求解;非線性的,還要分是否凸,凸的話,廣義Benders分解、外部近似、分枝定界、擴展割平面演算法等,非凸的話,可採用全局最優演算法。判斷一下是否是凸規劃,是的話,用上面的演算法可以求到全局最優;否則,可能得到局部最優解。
㈦ 找一種可以幫人從幾種方案裡面選擇最優的演算法
如果找一種可以幫人充幾種方案,裡面選擇最悠閑的演算法是我覺得是很困難的
㈧ 請高手:求最優解演算法!!!題目如下:
個人的理解,程序可能會花點時間寫。
定義數組 a(m,n)
該問題的數學模型應該如下
z=min(a(1,1)+a(1,2)+……+a(m,n))即所用的機器人最少
約束條件是:
a(i,j)=0或者1(當等於0時表明此格不安放機器人,1則表示安裝i=1,2…m j=1,2…n)
a(i-1,j)+a(i+1,j)+a(i,j-1)+a(i,j+1)>=1 前後左右至少有一個機器人,i=1,2…m j=1,2…n)。當然,當i-1=0,j-1=0 ,i+1>m,j+1>n 四情況下a(i-1,j) =0 a(i+1,j)=0 a(i,j-1)=0 a(i,j+1) =0 此時即邊角陳列室的情況,因為處於邊上的陳列室,其前後左右一邊或2邊沒有其他陳列室,因此不可能設置
監視。
該問題的求解,我覺得可以用運籌學的0,1規劃,具體你可以查查資料看看。
祝你成功!
㈨ 類似01背包問題。銀行有1、2、3、4、5、6元共六種貨幣,兩個搶匪搶銀行共搶到了N張,判斷二人是否能平分
不知道N的范圍,一種很暴力的方法。
問題可以轉化成能不能分別用x和y張貨幣構成sum/2.
dp[money][cnt]表示能否用cnt張構成總額為money的錢。
dp[money][cnt]|=dp[money-i][cnt-1] (1<=i<=6)
dp[0][0]=1;
最後判斷dp[sum/2][x]和dp[sum/2][y]都為1就可以了。當然sum本身是奇數就一定不可以,不用跑DP了。
㈩ 強盜劫匪電影,如搶銀行電影或小說
《新警察的故事》這個有點誇張但絕對精彩。
《偷天換日》《雌雄大盜》《邦妮和克萊德》等