有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java中浮点数组的数据对齐算法

在折线图中有两个代表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

事实上,每个阵列的大小约为30000,浮动范围为-6.94709206,因此更为复杂


共 (3) 个答案

  1. # 1 楼答案

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

    1. 使用二进制搜索查找ab的第一个元素的位置
    2. 如果不存在这样的位置,请在a内查找b的第一个元素的位置
    3. 如果仍然没有匹配项,则将a放在b后面,如果first a>last b{}后面{}否则
  2. # 2 楼答案

    原则上,这很简单:

    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 ...
    

    对于浮动,您会遇到一个问题,即如果您的数据中存在任何不精确的可能性,那么它们可能并不一定要完全相等才能被视为匹配项。您可能想说abs(a[an]-b[bn]),而不是a[an]==b[bn]<;等等

    免责声明:代码是我的头顶和未经测试。没有明示或暗示的保证。您的里程可能会有所不同。禁止的地方无效。如果出现皮疹,请咨询医生

  3. # 3 楼答案

    这基本上是正常的模式匹配,您应该能够使用最简单的算法适合字符匹配

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