開始說下,寫**的時候難免會遇到演算法的問題,所以無論是做什麼職位,只要跟code有關,最好多多少少會一些演算法,不會演算法有時是很痛苦的,比如我。。。囧。
需求很簡單,就是檢測在一堆無序的,有向區間內的連通性,比如:
假設有如下的序列:
1-49-12
2-69-10
6-91-8
其中,已知有1-8這個區間,那麼如果有6-9的區間進入時,就可以確定1-9是聯通的,因為6-9的起點在1-8的區間內。
這裡最低的起點是1,最高點是12,那麼用什麼辦法可以快速的得到這隊序列是否是聯通的。
經過思考,本打算用a*來解決這個問題,但發現需要維護兩個佇列,並且由於區間序列是無序的,還要用二叉樹堆來維護排序,也是增加很多成本,最後就決定使用首先構建出區間矩陣,並通過不停的拓展區間的起點和終點,然後通過遍歷來解決這個問題,思路如下:
建立乙個map,用來維護矩陣(map用紅黑樹,查詢效率很不錯。)。
while(插入乙個區間): #設插入節點為p, p.x為區間起點, p.y 為區間終點
map是否為空。直接放入map,繼續迴圈。
是否有以p.x為起點的節點。檢查p.y所能達到的是否比當前區間的終點要遠。更新當前區間的終點。
是否有以p.y為起點的節點。檢查p.x所能達到的是否比當前區間的起點要近。更新當前區間的起點。
遍歷map,查詢p能插入的區間,並修改區間的起點和終點。
從最低起點深度遍歷(此時矩陣基本是已經是一條線了)到最高頂點,成功就聯通。
經過程式實現,測試後驗證想法是正確的,用時0.06m測試通過了97個無序的區間佇列的連通性,當然還可以算出最短路徑,那就直接上dijkstra就行了。
由於本人並未系統的學習過演算法,也非數學專業的科班出身,所以很多地方還是可以繼續優化的,也可以用其他更好更優的辦法來做,還希望各位科班出身的人不吝賜教哈。
測試Lync連通性的工具
操作如下 如果你想手動指定邊緣伺服器,就請指定第二項 我現在想測試自動發現服務並登入,所以選擇第一項,並選擇next 2.輸入完整的資訊,以下是虛擬的,請按實際輸入資訊。如果你覺得在別人的 上輸入密碼不安全,那就請你建立個測試帳號吧。如果你的邊緣伺服器證書不是公共可信任的證書 如自己ad的證書 請選...
RDMA 出現背景 如何實現?如何測試連通性?
二 rdma 1 傳統的 網路通訊 傳統的網路通訊,資料需要通過使用者空間傳送到遠端機器的使用者空間。傳送方從使用者的應用空間buffer複製到核心空間的socket buffer 套接字快取 中,還需要新增資料報頭 資料封裝等等 通過一系列的多層網路資料報處理工作 tcp udp ip icmp等...
linux測試機器埠連通性的幾種常用方法介紹
下面一一介紹 1 telnet方法 2 wget方法 3 ssh方法 4 curl方法 用法 telnet ip port 1 telnet連線不存在的埠 telnet 1.1.1.1 8 trying 1.1.1.1.telnet connect to address 1.1.1.1 connec...