4

次の関係スコアを持つ 3 つのオブジェクト (A、B、C) を含むデータ フレームがあります。

relationships<-data.frame(object.1=c("A","A","B"),object.2=c("B","C","C"),relationship=1:3)

relationships

  object.1 object.2 relationship
1        A        B            1
2        A        C            2
3        B        C            3

A、B、C のすべての可能な順列と、隣接するオブジェクト間の関係スコアを考慮してください。

A   1   B   3   C   = 4
A   2   C   3   B   = 5
C   2   A   1   B   = 3
B   1   A   2   C   = 3
B   3   C   2   A   = 5
C   3   B   1   A   = 4

隣接するオブジェクトの関係が左から右に可能な限り高くなるように、オブジェクトを並べ替えるオブジェクトの順序を特定する必要があります。つまり、上記の例では、選択します

B   3   C   2   A   = 5

これについてどうすればいいですか?ありがとう。

4

2 に答える 2

1

これはあなたが探しているものに近いですか?

library(data.table)
relationships<-data.table(object.1=c("A","A","B"),object.2=c("B","C","C"),relationship=1:3)
relationships<-rbindlist(list(relationships,relationships[,list(object.1=object.2, object.2=object.1, relationship)]))
setkey(relationships,object.1,object.2)

perm<-CJ(C1=LETTERS[1:3],C2=LETTERS[1:3],C3=LETTERS[1:3])[!C1==C2 & !C1==C3 & !C2==C3]
setkey(perm,C1,C2)
perm[relationships,rel.1:=relationship]
setkey(perm,C2,C3)
perm[relationships,rel.2:=relationship]
perm[order(-rel.1,-rel.2)]

このままではあまり拡張性がありませんが、拡張される可能性があります...

于 2013-02-26T04:16:40.527 に答える
0

グラフの問題では最短経路のようです(つまり、最長ですが、これは問題ではありません)-igraph入力を実際のグラフとして扱うために使用してshortest.pathsから、最適な接続を見つけるために使用し、最終的にこれを選択して、減少する関係を実現します基準ベスト。(これは最適なソリューションではありませんが、最適な方法では、これを C などで記述する必要がある可能性があります)。

于 2012-09-17T13:52:21.540 に答える