運用學生 考試分數 與 志願排名 來進行配對
這個方法算是簡易的配對方法
如果學校有設定科目加權、要求分數需於均標、高標等
則需改寫配對方法
配對方法:
尋找學生第一志願
學校是否額滿
是,配對
改變最低錄取分
檢查額滿狀態
否,找尋學校中最低錄取分數 比較
分數較高 取代
重新計算最低錄取分
並為被取代的重新尋找配對
分數較低 找下一志願
==============================================
配對部分程式碼(Java)
public void match(){
int i;
for( i=0 ; i <= schAmt ; i++ ){ //清空額滿狀態
schFull[i]=false;
}
for( i=1; i <= stdAmt ; i++){ //為每位學生配對
stableByGrade(i);
}
}
private void stableByGrade(int std){
int pstd,psch,i;
boolean s;
s = false;
i=1;
while(!s){
psch = student.getWsr(std,i); //尋找std 志願
if (schFull[psch]==false){ //學校未額滿 直接配對
stdSch[std] = psch;
schStdAmt[psch]++;
school.setEnrollList(psch,schStdAmt[psch], std);
//若比最低錄取分低 改變最低分數 登記為最低分數學生
if(school.getLastGrade(psch) > student.getGrade(std)){
school.setLastGrade(psch,student.getGrade(std));
schStdLast[psch]=std;
schStdLastSeat[psch]=schStdAmt[psch];
}
//如果總數已達到錄取名額 改變為錄取額滿
if(schStdAmt[psch] >= school.getEnrollLimit(psch)){
schFull[psch] = true;
}
s = true; //配對成功
}
else{ //學校錄取額滿 先比較
//讀取最低分數 比較分數
//分數較高 取代 並為學生重新配對
if(school.getLastGrade(psch) < student.getGrade(std))
{
pstd = schStdLast[psch];
stdSch[std] = psch;
school.setEnrollList(psch,schStdLastSeat[psch],std);
//重新尋找最低分數
int scSeat, lscLim, lgrd, lstd;
lscLim = school.getEnrollLimit(psch);
lstd = 0;
lgrd = 100;
for(scSeat = 1; scSeat <= lscLim ; scSeat++ )
{
lstd = school.getEnrollList(psch,scSeat);
if(lgrd > student.getGrade(lstd)){
lgrd = student.getGrade(lstd);
schStdLast[psch]=lstd;
schStdLastSeat[psch]=scSeat;
}
}
school.setLastGrade(psch,lgrd);
s=true; //配對成功
stableByGrade(pstd); //pstd重新配對
}
else{
i++; //找下一個志願
}
}
}
}
沒有留言:
張貼留言