首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

关于组合有关问题

2012-03-13 
紧急求助关于组合问题大家好,第一次注册发帖,请多关照。现有一个问题求助大家,请各位大侠帮忙解决一下,着急

紧急求助关于组合问题
大家好,第一次注册发帖,请多关照。
现有一个问题求助大家,请各位大侠帮忙解决一下,着急,非常感谢!

有一个需求R,已知其输入RI,需要在已知组件{S1,S2,S3,S4,S5...Sn}中对这些组件进行排列组合,最终产生需求R的期望结果RO。注:每个S都有各自的输入与输出。
例如,S1+S2--〉RO,表示S1与S2组合可以产生RO,但S1与S2的输入必须在RI范围内,也即S1的输入包含于RI,S2的输入包含于RI。如果S1+S2可以产生RO,但S1或S2的输入不在RI范围内,此时,允许其他S3、S4等服务组合产生S1或S2,而S1的输入必须包含于S3或S4的输出,依次类推,形成一棵从上至下的树,直至叶子节点的输入包含于RI。
还有,组合过程中,假如S1能够单独产生RO,则S1一定不会再与其它S进行组合;假如S1+S2组合能产生RO(S1+S2——〉RO),则一定不会再有其他同时包含S1与S2的组合,依此类推。

不知道说清楚了没有,问题可能有点复杂,这里好像贴不上图,其实贴上一个图的话,就能很容易的表达我说的意思。

麻烦大家帮出出主意,怎么进行组合呢,怎么设计算法?设计算法时可以暂时不考虑时间复杂度什么的,只要能组合出来就可以。非常感谢!!




[解决办法]
不是很明白你的意思,感觉要用递归.
[解决办法]
组合可以用递归...

题没看明白
[解决办法]
<html>
<head> </head>
<body> </body>
<script language= "javascript ">
var conditions = new Array();

function add_condition()
{
var obj = new Object();
obj.result = arguments[0];
obj.conditions = new Array();
obj.is_used = 0;
for ( var i = 1; i < arguments.length; ++i ) {
obj.conditions[i-1] = arguments[i];
}
conditions.push(obj);
}

function is_leaf(s)
{
if (s == "RO ") return 0;
if (s.substr(0, 1) == "R ") return 1;
return 0;
}

function combinate(r)
{
if (is_leaf(r)) return r;
for ( var i = 0; i < conditions.length; ++i ) {
if (conditions[i].is_used) continue;
if (r != conditions[i].result) continue;
var succeeded = 1;
var path = " ";
conditions[i].is_used = 1;
for ( var j = 0; j < conditions[i].conditions.length; ++j ) {
var s = combinate(conditions[i].conditions[j]);
if (s == " ") {
succeeded = 0;
break;
}
if (path != " ") path += "+ ";
path += s;
}
conditions[i].is_used = 0;
if (succeeded) return r + "( " + path + ") ";
}
return " ";
}

add_condition( "RO ", "S1 ", "S2 ", "S3 ");
add_condition( "S1 ", "R1 ", "R2 ");
add_condition( "S2 ", "R3 ", "R4 ");
add_condition( "S2 ", "S1 ", "S3 ");
add_condition( "S3 ", "R4 ", "S4 ");
add_condition( "S4 ", "R5 ", "R6 ");

alert(combinate( "RO "));
</script>
</html>

热点排行