競賽對於研究也不全然是令人分心的一項旁騖。以演算法研究來説,比過競賽的人對於細節的掌握程度與能否實作的快速評估能力,還是快一些的。
我的第一個研究成果,是一個圖上面的資料結構問題。這道問題是這樣的:在一個很普通的無向無權圖上面,時常會增加一些邊、或刪除一些邊。你可以把它想像成,在區域網路中時常可能在兩台機器間新增連線,或是刪除連線。這樣的情境設定我們通常把它稱之為動態圖 (dynamic graph)。這些網路線不一定要是實體的,它們也可以是被軟體定義的 (比方說,在實務上被稱為 software defined network,不過那邊有更多更實際的應用與設定)。
在動態圖的模型中,我們討論的是增加或刪除邊的時候,如果我們現在想查詢某兩台電腦之間,是否能夠透過現存的邊進行聯繫,這個資料結構必須要能夠正確地回答『是』或『否』。這樣的問題被稱為 Dynamic Connectivity。2000 年的時候,有一篇演算法論文,提出了解決這個問題的一種資料結構,這個資料結構會用到一點點隨機數、而分析的方法也是均攤的 (amortized)。我研究生涯剛入門的時候,指導老師建議我看這篇文章,我與同學前前後後看了快兩個月,還是無法摸清楚論文上提及的資料結構細節。這篇文章使用了許多競賽中常見的動態平衡樹上的操作技巧,所以分析的時候需要考量的變數較多。最後在某一天,我們成功地看出一點點端倪,利用了均攤的小技巧,好像可以將資料結構大幅簡化。
從那個看出端倪的當下,到真的把整個問題解決,又經過了整整半年。然後到把它完全寫下來又是好幾個月。途中學到了很多以前比競賽的時候沒有想過的事物:比方說,向眾人介紹一個演算法的呈現方式,以及寫作方式。也因為這一個小小的研究成果,我算是得以正式一窺理論演算法這個領域。