假设我有一组对象,我想要实现的函数接收更新值列表以更新我的对象。更新值可用于更新至多一个对象,但可以单独更新。
所以,例如,
我想要的是我的对象(a,b,c)的更新与参数值的所有组合,其中顺序无关紧要(例如,[abce]和[eabc]中只有一个需要和应该发生)。一些可能的结果:
最简单的例子是两个列表的大小都是1(例如,[a]和[d]):
预先不知道对象的数量和更新值的数量。
我将如何实施此功能?谢谢!
编辑: 根据Jurgen在下面的回答,我实现了这样:
static LinkedList<String> update(List<String> trackLst, List<String> eventLst) {
LinkedList<String> newTracks = new LinkedList<String>();
for ( int e = 0; e < eventLst.size(); e++ )
{
String evt = eventLst.get( e );
for ( int i = 0; i < trackLst.size(); i++ )
{
String trk = trackLst.get( i );
if ( trk == null ) trk = new String("");
trk = trk.concat( evt );
newTracks.add(trk);
}
// No update
newTracks.add( eventLst.get(e) );
}
return newTracks;
}
在效果问题上进行一些扩展:实际上,在将其包含在最终假设列表中之前,我们会以性能或一致性度量的形式测试每个关联的有用性。它仍然是一个很大的数字,但是当物体经常重叠并且传感器分辨率很低时,需要进行耗尽的测试,以便我们可以延迟关联,直到稍后有更多有意义的数据可用。
答案 0 :(得分:0)
这可以使用递归来完成。每个参数都有n + 1个选项可供选择。要么它可以与任何n个对象相关联,要么它可以独立存在。
因此,如果初始的“剩余列表对象”是对象列表[a,b,c,...],剩下的参数列表是[d,e,...],
可能的伪代码:
void recur( list<pair> soFar, list remainingObjects, list remainingParam ) {
if ( remainingParam is empty ) {
add remainingObjects to soFar;
print soFar;
return;
}
for parameter in remainingParam: {
for object in remainingObject: {
(remove object and parameter from remaining lists and add pair to soFar)
recur(...);
}
(remove only parameter from remainingParam list and add it to soFar as sole object)
recur(...);
}
}
答案 1 :(得分:0)
这样的事可能吗?
List<Tracks> trackLst = ....;
List<SensorEvent> eventLst = ....;
// Make the 2 lists equal in length
while ( trackLst.size() > eventLst.size() ) eventLst.add( null );
while ( eventLst.size() > trackLst.size() ) trackLst.add( null );
for ( int e = 0; e < eventLst.size(); e++ )
{
for ( int i = 0; i < trackLst.size(); i++ )
{
SensorEvent evt = eventLst.get( i );
if ( evt != null )
{
Track trk = trackLst.get( i );
if ( trk == null ) trk = new Track();
trk.update( evt );
}
}
eventLst.add( eventLst.remove(0) );
}
答案 2 :(得分:0)
当我背景正确时,你错过了,每个输入事件都可能是对任何其他输入事件的更新。
此外,我假设每个输入对象可以是对最近一个现有对象的更新。因此列出所有选项将是性能问题。当找到匹配时,任何算法都会中断。
因此,将问题分解为单个输入事件,即匹配为更新或创建新轨道。请注意,在这种情况下,根据匹配逻辑,输入顺序很重要!
回答你的问题:
你有N个曲目和M个输入。然后每个输入可以属于N + 1(噪声)+ 1(空轨道)选项。因此,您有(n+2)^m
种不同的方式来分配选项上的输入。
M和N的顺序为10和1000,这已经是O(N^M)
假设所有事件都位于同一地点且可能属于一个或是噪声,问题将减少到O(N*2^M)