在剛剛結束的第43屆ACM國際大學生程序設計競賽亞洲區總決賽(Asia-East Continent Final)中,由中山大學數據科學與計算機學院的三名本科生組成的隊伍,在郭嵩山老師的帶領下,獲得了學校亞軍,同時獲得了2019年參加第43屆在葡萄牙舉行的國際大學生程序設計競賽全球總決賽資格。
據悉,該賽事吸引了全國380餘支隊伍,180多所高校計算機領域的頂尖選手參加,是國內大學生計算機學科的最高賽事,獲獎選手得到了各大著名IT企業的青睞。
圖1:比賽頒獎現場,左二至五為中山大學教練張子臻,選手王凱祺、範儉豪、黃鎮。
ACM/ICPC是由美國計算機協會(Association for Computing Machinery)於1970年發起組織的國際大學生程序設計競賽(International Collegiate Programming Contest, 簡稱ACM-ICPC),是一項旨在展示大學生創新能力、團隊精神和在壓力下編寫程序、分析和解決問題能力的年度競賽。
經過近40多年的發展,ACM國際大學生程序設計競賽已經發展成為最具影響力的大學生計算機競賽,被譽為計算機軟體領域的奧林匹克競賽,到2018年底為止已經舉辦了43屆。賽事由各大洲區域預賽(regional)和全球總決賽(world final)兩個主要階段組成。
根據各賽區規則,每站前若干名的學校自動獲得參加全球總決賽的資格,決賽安排在每年的3-4月舉行,而區域預賽一般安排在上一年的9-12月舉行。一個大學可以有多支隊伍參加區域預賽,但只能有一支隊伍參加全球總決賽。
ACM/ICPC以團隊的形式代表各學校參賽,每隊最多由3名隊員組成,每位隊員必須是在校學生,取得學士學位超過兩年或進行研究生學習超過兩年的學生不符合參賽隊員的資格,並且最多可以參加2次全球總決賽和5次區域選拔賽。
區域賽一般分別按10%,20%,30%的比例頒發金,銀,銅獎。各預賽區第一名自動獲得參加全球總決賽的資格,其餘總決賽名額按一定規則進行分配。
ACM/ICPC競賽是計算機學科的盛宴,其歷史悠久,影響力大。我們何不把歷年的比賽情況數據拿來分析一番?
我們收集了2010年至2018年間中國大陸各高校機構參加ACM/ICPC的情況。(數據來源於網際網路,歷年香港賽區數據沒有納入統計,2018年部分賽區沒有採集到數據,數據統計可能稍有偏差)
部分高校機構歷年參加ACM-ICPC中國各區域賽區的獲獎情況如下所示(年平均獲獎牌數):
我們整理了各高校機構歷年參加中國各賽區區域賽的數據如下表:
其中特徵含義為:
特徵
含義(包含2010-2018年的統計)
gold_sum
金牌總數
silver_sum
銀牌總數
Bronze_sum
銅牌總數
Final_sum
進入全球總決賽次數
Sponsor_sum
擔任比賽承辦方次數
Team_sum
參加比賽總場次
Solved_avg
每場次平均解題數
Time_avg
每場次平均罰時
Rank_avg
每場次平均排名
Solved_best
歷場比賽最多解題數
Rank_best
歷場比賽最好排名
在執行主成分分析之前,我們需要假設變量之間存在線性相關關係。為此,用KMO檢驗和Bartlett's檢驗分析選擇的變量是否適合做主成分分析。KMO檢驗主要用於主成分提取的數據情況。一般來說,KMO檢驗係數分布在0到1之間,如果係數值大於0.6,則認為樣本符合數據結構合理的要求。
Bartlett's檢驗的原假設是研究數據之間的相關矩陣是一個完美矩陣,即所有對角線上的係數為1,非對角線上的係數均為0。在這種完美矩陣的情況下,各變量之間沒有相關關係,即不能將多個變量簡化為少數的成分,沒有進行主成分提取的必要。因此,我們希望拒絕Bartlett's檢驗的零假設。
計算結果顯示KMO檢驗係數為0.742,我們認為我們使用的研究數據結構是一般的;Bartlett's檢驗的顯著性小於0.01,拒絕零假設,即認為研究數據可以進行主成分提取。
該輸出結果顯示了通過主成分分析提取的因子數量為3,提取的因子對所有變量的累積方差貢獻率達到81.413%,說明因子對變量的解釋能力較好。
為了使因子更具有可解釋性,我們進行因子旋轉,旋轉方法採用最大方差法。旋轉的目的在於調整變量在各因子負荷量的大小,旋轉後變量在每個因子的負荷量不是變大(接近1)就是變得更小(接近0),這就使對公因子的解釋變得更容易。
上圖為旋轉後的成分矩陣,第一個因子上載荷量絕對值較大的為’solved_avg』、’time_avg』和』rank_avg』,其中』rank_avg』與第一個因子呈負相關,因此第一個因子主要反映的是一所學校學生程序設計能力的平均水平。
第二個因子載荷較大的變量為’silver_sum』、』bronze_sum』和’team_sum』,主要反映學生參賽的積極性。
第三個因子載荷較大的變量為』gold_sum』和』final_sum』,反映的是競賽成績的拔尖程度。
圖5:基於3個因子的散點圖分布
由於該三維圖不易於觀察,我們將其投影至二維。
圖7:因子2和因子3得分的散點圖分布
我們得到的3個因子分別從不同方面反映了各個高校機構參加ACM/ICPC的總體水平,單獨使用某一公因子很難做出綜合評價,因此考慮以各公因子對應的方差貢獻率比例為權重計算綜合得分情況。計算綜合得分的公式為:
綜合得分 = (因子1的貢獻率/總貢獻率)*因子1上的得分+(因子2的貢獻率/總貢獻率)*因子2上的得分+(因子3的貢獻率/總貢獻率)*因子3上的得分
即FAC_sum= (30.936/81.413)*FAC1_1 + (29.213/81.413)*FAC2_1 + (21.264/81.413)*FAC3_1
得到部分綜合得分及綜合排名結果如下:
注意該排名不是實力排名,而是基於選取特徵下的綜合排名。
我們根據3個因子的得分,對各個高校機構進行了K-means聚類分析,將495個高校機構分為5類(K=5),得到每個聚類中的案例數和最終聚類中心如下圖:
通過5個類的最終聚類中心情況,我們可以看到聚類第3類高校機構的學生程序設計能力是比較強的,同時參加ACM/ICPC取得的成績是非常拔尖的,這類高校機構綜合排名也是最高的,第3類高校機構如下圖:
同時,可以看到聚類第2類高校機構的程序設計能力平均水平也是較強的,但是他們的參賽積極性很低,可以判斷該類是以一些非高校為主的組織機構,第2類高校機構部分如下圖:
感謝您,
支持學生們的原創熱情!
鄭重承諾
打賞是對工作的認可
所有打賞所得
都將作為酬勞支付給辛勤工作的學生
指導老師不取一文
文案 :鄭光柱(中山大學數據科學與計算機學院本科四年級, 1030477833@qq.com)
編輯 && 排版:鄧發珩(華中科技大學管理學院本科二年級:2638512393@qq.com)
校對 :鄧發珩(華中科技大學管理學院本科二年級:2638512393@qq.com)
指導老師: 張子瑧(中山大學數據科學與計算機學院副教授,zhangzzh7@mail.sysu.edu.cn)