貪心演算法,過載問題

2023-01-19 03:15:04 字數 1834 閱讀 2566

《演算法設計與分析》

上機實驗報告

1. 上機題目及實驗環境

1.1上機題目:貪心演算法,過載問題

1.2實驗環境:

cpu:英特爾第二代酷睿i3-2330m @2.2ghz 雙核

記憶體:4g

作業系統:window s 7

軟體平台:ubuntu

2. 演算法設計與分析

1. 用快速排序把隨機生成的一組數排序放到陣列中。

2.將排好的數從第乙個開始與總的裝載重量相比較,如過小於總重量則小標加一,並記錄該數,並且將總重量減去第乙個數的重量,以此迴圈。

3.將下標輸出和該數輸出,即裝載的個數和裝的那些數。

3. 核心**

//快速排序遞迴,a代表陣列,low代表陣列的第乙個數的下標,high代標陣列最後乙個數的下標

int partition(int a,int low,int high)

a[low]=x;

return low;

}//開速排序

void quicksort(int a,int low,int high) }

//找出最多可以儲存的數,a代表陣列,low代表陣列開始小標 high代表陣列最大下標

void maxnumber(int a,int low,int high)

else將結果寫入檔案

printf("\");

fp1=fopen("","rt");//讀檔案

if(fp1==null)

printf("connot open file!");

exit(0);

i=0;

while(fscanf(fp1,"%d",&a[i])!=eof)

printf("%d\n",a[i]);

i++;

fclose(fp1);

}4. 執行與除錯

圖一.當沒有眾數的錯誤情況

圖二.沒有眾數的正確情況

圖三.輸出含有兩個眾數錯誤情況

5. 結果分析和小結

(1)如圖一,是因為在輸出下標時我把讀檔案寫到else裡面去了,所以不對,經過除錯輸出正確結果如圖二,三。

如圖二,第一行第乙個數代表陣列的個數,第二個數代表總重量。第二行數代表陣列的裡面的數。第三行資料代表:要裝入的那些數。第四行數代表裝入的個數。

如圖三,是另一組測試資料。

(2)讓我了解貪心演算法,對快速排序有了更深的理解,使我在讀寫檔案時更加得心應手。感覺自己還需要學習很多東西,只有上機編寫才能發現自己真正的問題,除此之外感覺程式設計也很有趣。

附錄(c/c++源**)

#include<>

#include<>

#include<>

#include<>

#include<>

#define n 20

//快速排序遞迴,a代表陣列,low代表陣列的第乙個數的下標,high代標陣列最後乙個數的下標

int partition(int a,int low,int high)

a[low]=x;

return low;

}//開速排序

void quicksort(int a,int low,int high) }

//找出最多可以儲存的數,a代表陣列,low代表陣列開始小標 high代表陣列最大下標

void maxnumber(int a,int low,int high)

else將結果寫入檔案

printf("\");

fp1=fopen("","rt");//讀檔案

if(fp1==null)

printf("connot open file!");

exit(0);

貪心演算法經典例題

所謂貪心演算法指的是為了解決在不回溯的前提之下,找出整體最優或者接近最優解的這樣一種型別的問題而設計出來的演算法。貪心演算法的基本思想是找出整體當中每個小的區域性的最優解,並且將所有的這些區域性最優解合起來形成整體上的乙個最優解。因此能夠使用貪心演算法的問題必須滿足下面的兩個性質 1.整體的最優解可...

貪心演算法 實驗報告

1 設計分析 問題描述 鍵盤輸入乙個高精度的正整數n n不超過240位 去掉其中任意s個數字後剩下的數字按原左右次序將組成乙個新的正整數。程式設計對給定的n和s,尋找一種方案使得剩下的數字組成的新數最小。設計思路 在位數固定的前提下,讓高位的數字盡量小其值就較小,依據此貪心策略解決此問題。刪除高位較...

基於貪心演算法學生宿舍分配系統設計與實現

摘要 隨著數位化校園程序的快速推進,科研和教學都進入了數字資訊化管理時代,研究如何利用數字資訊化的優勢來高效管理高校後勤具有重要意義。本文設計了基於改進的貪心演算法的智慧型宿舍分配系統,把選定的分配條件如作息時間 愛好 專業 個性等作為特徵項,為每個特徵項根據其在匹配中的重要程度賦予一定的權重,通過...