私が言っていることの例を挙げておきましょう。 N=3
アイテムが{ A, B, C }
で、K
グループ(0 < K < N
)に統合したいとします。例えば、K=2
グループにそれらを統合することは、結果項目{a_0、..、a_N}をKグループに統合すると、どのようにして統合プロセスが最もコストがかかりませんか?
{ {A, B}, {C} }
私はアイテムY
に項目X
を統合するコストを返す関数Cost(X, Y) >= 0
を持っているが生じる可能性があります。例えば、Cost(A, B) = 10
とCost(B, C) = 15
ならば、
{ {A, B}, {C} }
が
10
コスト生産と生産
{ {A}, {B, C} }
は15
かかります。
コスト関数は可換ではありません(必ずしもCost(X, Y) = Cost(Y, X)
であるとは限りません)。
私がしたいことは、K
グループへの最もコストのかからない統合アルゴリズムを見つけることです。
たとえば、のは、コストが
Cost(A, B) = 12
Cost(B, A) = 4
Cost(A, C) = 5
Cost(C, A) = 11
Cost(B, C) = 3
Cost(C, B) = 20
をしていると私は
K=1
のグループに統合したいとしましょう。最も安価なものは、
8
のコストで
B -> C
A -> C
である。
私はこれを決定する方法の一般化を理解しようとしています。私はそれが出始めるべきだと思いますどのように
は、すべてのコスト注文することです:常に統合プロセスにおける移動の1
Cost(B, C) = 3
Cost(B, A) = 4
Cost(A, C) = 5
Cost(C, A) = 11
Cost(A, B) = 12
Cost(C, B) = 20
項目上記のリストの中に次のようになります。
B -> C
ここで、私が起こる必要があるのは、リストの残りの部分を繰り返して、各連結を確認することです。
リストの次の項目はB -> A
です。 B
は既にC
に移動していますので、これをスキップしてください。
次の項目はA -> C
です。 A
はまだグループに統合されていないため、これは有効な連結です。
K=1
グループ{ {A, B, C} }
があるので、これで完了です。
私はこのアルゴリズムを書く方法が不思議です。より具体的には
、ここではC#のセットアップです:
FYIusing System;
using System.Collections.Generic;
using System.Linq;
public class Widget
{
public int Distance { get; set; }
public int Weight { get; set; }
public static int Cost(Widget w1, Widget w2)
{
// returns the cost of consolidating w1 into w2
return Math.Abs(w1.Distance - w2.Distance) * w1.Weight;
}
}
public class Program
{
public static void Main()
{
var widgets = new List<Widget>()
{
new Widget() { Distance = 10, Weight = 1 },
new Widget() { Distance = 20, Weight = 1 },
new Widget() { Distance = 30, Weight = 1 },
};
var tuples = from x in widgets
from y in widgets
where !x.Equals(y)
select Tuple.Create(x,y);
var ordered = from t in tuples
orderby Widget.Cost(t.Item1, t.Item2)
select t;
int K = 2;
int sum = 0;
// ... What to do here???
Console.WriteLine(sum); // should write 10
}
}
、これは宿題の問題か何かではありません。私は楽しみのためにやっています。
なぜあなたはB-> Aを考慮しておらず、A-> Cと考えていますか?理由は明らかではありません。詳しく教えてください。 –
@PrakharAsthanaそのコストは '9'で、これは' B - > C、A - > C 'のコストよりも大きい。 –
私が意味していたのは、B-> Cを選択した後でした。なぜあなたはB-> Aを考慮せず、A-> Cと考えるのですか? B-> Aを選択した場合と同様に、合計費用は7になります。 –