2012-02-17 8 views
-1
val compare : bool array array -> 'a list -> 'a list -> int 

比較mは、リスト上の辞書順を生成する。私はこれは私がintのリストにすることによって行うようにしようとしていた機能がある???は2つの同値類を比較する(続き)

let rec compare m c c' = 
    match c with 
    | [] -> (match c' with 
      | [] -> 0 
      | _ :: _ -> -1) 
    | hd1 :: tl1 -> (match c' with 
        | [] -> 1 
        | hd2 :: tl2 -> ??? 

記入する方法がわかりません。この機能は満足できませんでしたが、まだリストの残りの部分をチェックするためには欠けています。

let cmp_classes m c c' = 
    match c, c' with 
    | i :: _, j :: _ -> 
     begin 
     match m.(i).(j), m.(j).(i) with 
     (* same class: there is a path between i and j, and between j and i *) 
      | true, true -> 0 
     (* there is a path between i and j *) 
      | true, false -> 1 
     (* there is a path between j and i *) 
      | false, true -> -1 
     (* i and j are not compareable *) 
      | false, false -> 0 
     end 
    | _ -> assert false 

私を助けてください。私はint型

let cmp_classes m i j = 
    match m.(i).(j), m.(j).(i) with 
     (* same class: there is a path between i and j, and between j and i *) 
      | true, true -> 0 
     (* there is a path between i and j *) 
      | true, false -> 1 
     (* there is a path between j and i *) 
      | false, true -> -1 
     (* i and j are not compareable *) 
      | false, false -> 0 

でこの機能をしようとしたとき、それはまだデータI試験で正しい順序を返さないので。 私はこの機能を何度もやっていますが、何度も何度も試してみる必要がありますが、何が間違っているのか分かりません。私はあなたの助けが必要です。あなたの要素のトポロジー並べ替えをしようとしている場合、これは完全に間違っているあなた

答えて

3
(* i and j are not compareable *) 
     | false, false -> 0 

をありがとうございます。あなたは、比類のない要素は完全なナンセンスであり、ソートアルゴリズムを混乱させることになると言っています。

あなたは本当のトポロジカル順序を持っているしたい場合は、以下の手順に従ってください。

  • クラスごとに1つだけrepresentantを含むリストとして入力リストを構築します。入力リストが空になるまで、出力リストには、
  • 空である:
    • は、すべての要素を入力リストに(無入力エッジに)ランダムルートを選択し、(任意の順序で)リスト
    • 追記から削除します出力リスト
  • リターンを使用しているデータ構造に応じて、出力リスト

のルート代表、は、このアルゴリズムは、多かれ少なかれ効率的にすることができますが、あなたの質問では十分ではありません正確に私にあなたにもっと話してください。

関連する問題