2011-04-13 39 views
2

有人可以教我如何使用F#從給定數據製作樹?例如:數字列表或城市名稱列表等。我沒有任何線索,如何讓樹在F#中,需要幫助這裏:)如何使用F#給定數據製作一棵樹

例如: 輸入是從運行時間,假設它是從一個文本文件:城市列表名稱

輸出結果:圖

+1

的曲線是比樹更一般的數據結構,以便使得問題更爲複雜。無論如何,如果您沒有說出在結果圖/樹中應連接哪個節點(例如城市),則無法回答該問題。 – 2011-04-13 14:07:20

回答

2

一個可能的解決方案是使用Discriminated Unions來代表你的數據(在你的情況下城市或數字)。問題是,你還需要知道你想表達的城市之間的關係。

例如你可以表達你的城市或「最接近的鄰近城市」或「按公民人數排序」的「按字母排序」的關係。至於你說你的投入僅僅是城市的名單,我假設你想要的樹在這種情況下,命令由字母你的城市(即表達了「按字母順序」的關係)一個解決辦法是:

let cities = ["Munich"; "Rome"; "Florence"; "Berlin"; "Paris"; "Marseille"] 

type Tree<'A> = 
| Node of Tree<'A> * 'A * Tree<'A> 
| Leaf 

let rec insert tree element = 
    match element, tree with 
    | x, Leaf     -> Node(Leaf, x, Leaf) 
    | x, Node(l,y,r) when x <= y -> Node((insert l x), y, r) 
    | x, Node(l,y,r) when x > y -> Node(l, y, (insert r x)) 

let rec flatten = function 
| Leaf  -> [] 
| Node(l,x,r) -> flatten l @ [x] @ flatten r 

let sort xs = xs |> List.fold insert Leaf 
       |> flatten 


let cityTree  = List.fold insert Leaf cities 
let sortedCities = sort cities 
+0

扁平功能的功能是什麼? – 2011-04-18 17:20:13

+0

flatten將樹轉換回列表 – 2011-04-19 06:29:30

5

維基百科有一個list的常見方式圖表數據表示如果您嘗試從文件加載圖形數據,它應該可以幫助您。一旦你已經加載數據search堆棧溢出。有很多關於樹實現的問題。這裏有一些。