3
我有一個程序,解決加權interval scheduling problem using dynamic programming(並相信與否,它不是作業)。我已經介紹過它,而且我似乎花費了大部分時間用p填充M(...)。下面是功能:如何爲動態間隔調度優化這些ocaml函數?
let rec get_highest_nonconflicting prev count start =
match prev with
head :: tail ->
if head < start then
count
else
get_highest_nonconflicting tail (count - 1) start
| [] -> 0;;
let m_array = Array.make (num_genes + 1) 0;;
let rec fill_m_array ?(count=1) ?(prev=[]) gene_spans =
match gene_spans with
head :: tail -> m_array.(count) <-
get_highest_nonconflicting prev (count - 1) (get_start head);
fill_m_array tail ~prev:(get_stop (head) :: prev) ~count:(count+1);
| [] ->();;
我真的不能相信任何方法來優化這一點,基於我的這種算法的知識,這似乎是很可能會佔用時間最多的地方。但這也是我的第二個OCaml程序。那麼有什麼辦法可以優化這個嗎?
我實際上正在研究Facebook的工程難題之一。我很確定輸出是正確的,但它仍然失敗(我猜測,因爲它需要大約15秒的運行)。 – 2009-11-04 14:39:45