志願匹配演算法開發記錄(四) 小優化

2021-10-07 13:14:03 字數 1549 閱讀 4893

由於跟學校的匹配結果相比,我的演算法得到的分配結果還有比較大的差距,所以進行了一些小小的優化,但是效果並不是很明顯。

public

static

int[

]allocatetherest

(int

studata,

int[

] projectdata)}if

(allocated==

false)}

}}}return studata;

}

之前是直接把剩餘學生分配到還有名額的專案中,但是分配過程中志願內的專案有可能出現新的空缺,所以先看一下志願內的專案還有沒有名額,沒有再分配到其他空缺專案中

public

static

int[

]allocate2

(int

studata,

int[

] projectdata)

for(

int j =

0; j <

5; j++

) studata[k][5

]=i;

projectdata[i][1

]++;}

}}} studata=

allocatetherest

(studata,projectdata)

;return studata;

}

這種方法比較簡單,跟原來的思路相反,是按照志願從高到低的順序每個專案先去找學生,也沒有用到隨機的方法,找到了匹配學生且人沒滿就直接分配到專案中,但是效果並沒有之前的好,僅當作備用

原方法:

備用方法:

學校的匹配結果:

匹配程度的計算就是簡單的按照志願先後分配權值,第一志願為5,第二志願為4,再去乘以人數

總結

從資料可以明顯看出演算法的結果跟學校相比有比較大的差距,這讓我想了很久演算法的不足和可以改進的地方,奈何水平有限想了很久還是沒想到什麼好的優化方法。最後想來想去,發現不管怎麼優化,第一志願的人數都是不可能再多了的,帶著疑問去看了看學校的分配結果,才知道學校在分配是僅僅是把人數限制當成是乙個參考,並不是乙個死限制,是可以適當突破的,把專案最大人數+4之後,我的分配方法也得到了可以接受的結果,也總算達到了開始設定的不比學校分配演算法差的目標。

志願匹配演算法開發記錄(三) 實現

思路 首先將所有學生全都分配到第一志願中 找出超員專案中人數最多的專案,按照優先順序隨機抽取該專案中超過專案最大人數的學生分配到下一志願中 為了盡可能平均先從高志願開始下調 如果本來就是第五志願且被抽中下調就將分配的志願設為 1 迴圈進行2,3兩步,直到所有專案人數達標 最後將分配專案為 1的學生按...

小程式開發學習記錄(四)

這節,我們來講一下小程式的開發語言 wxml。用過vue等開發框架或者使用過雙花括號的同學對於本節的內容應該會比較熟悉。wxml跟vue語法十分的相似,有類似於vue的資料繫結,v for v if 模板 template 的結構。1.資料繫結 wxml view view page.js page...

四大字串匹配演算法總結

首先簡單介紹一下字串匹配問題,字串匹配問題裡面包含乙個文字串和乙個模式串。我們的目標是找到文字串中與模式串相同的子字串,該問題就稱之為字串匹配問題。樸素字串匹配演算法其實就是暴力對比的原理,因為模式字串所有可能的開頭只有文字串中每乙個字元的位置,所以我們只需要判斷以文字串中每乙個字元打頭時,模式串是...