【问题标题】:Algorithm for data alignment of float arrays in JavaJava中浮点数组的数据对齐算法
【发布时间】:2010-11-08 22:28:22
【问题描述】:

我在折线图中有两个表示 y 值的浮点数组。现在我想对齐这两个图表。有没有现有的两个数组对齐的算法?

一个非常简单的例子

a:
2.5 1.3 1.6 4.2 3.6

b:
3.3 1.4 2.5 1.3 1.6

现在对齐后应该是:

        2.5 1.3 1.6 4.2 3.6
3.3 1.4 2.5 1.3 1.6

实际上它要复杂得多,每个数组的大小约为 30 000 并且浮动类似于 -6.94709206

【问题讨论】:

    标签: java algorithm alignment


    【解决方案1】:

    原则上,这很容易:

    for (an=0;an<a.length;++an)
    {
      for (bn=0;bn<b.length;++bn)
      {
        if (a[an]==b[bn])
        {
          boolean run=true;
          for (offset=1;offset<a.length-an && offset<b.length-bn;++offset)
          {
            if (a[an+offset]!=b[bn+offset])
            {
              run=false;
              break;
            }
          }
          if (run)
            ... match at a[an], etc matching b[bn], etc
        }
      }
    }
    ... no match ...
    

    使用浮点数时,如果数据中存在任何不精确的可能性,您可能会遇到一个问题,即它们可能不必完全相等才能被视为匹配项。而不是 a[an]==b[bn] 你可能想说 abs(a[an]-b[bn])

    免责声明:代码不在我的脑海中并且未经测试。没有任何明示或暗示的保证。你的旅费可能会改变。禁止的地方无效。如果出现皮疹,请咨询您的医生。

    【讨论】:

      【解决方案2】:

      这基本上是正常的模式匹配,你应该可以使用大多数适合字符匹配的简单算法。

      简单搜索的最坏情况通常是 n*m(假设 n 和 m 是浮点序列的长度),也许您可​​以使用类似于 Boyer-Moore 的算法减少运行时间,如果其中一个是线性的序列保持不变。

      【讨论】:

      • 你应该可以得到 O(n+m)。
      【解决方案3】:

      假设两个数组在某个部分匹配。

      1. 使用二分法查找ab中的第一个元素的位置
      2. 如果不存在这样的位置,则在a 中查找b 的第一个元素的位置
      3. 如果仍然没有匹配,则将a 放在b 后面,如果first a > last b -- ba 后面,否则

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-06-05
        • 1970-01-01
        • 1970-01-01
        • 2013-06-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-17
        相关资源
        最近更新 更多