blob: bb11fbbfbeed381ffc3c900d6dc58a8ca9376df2 [file] [log] [blame]
package com.android.nn.benchmark.util;
/** Utilities for operations on sequences. */
public final class SequenceUtils {
private SequenceUtils() {}
/**
* Calculates Levenshtein distance between 2 sequences.
*
* This is the minimum number of single-element edits (insertions, deletions or substitutions)
* required to change one sequence to another.
* See: https://en.wikipedia.org/wiki/Levenshtein_distance
*/
public static int calculateEditDistance(int[] seqA, int[] seqB) {
int m = seqA.length;
int n = seqB.length;
int[][] d = new int[m + 1][n + 1];
for (int i = 0; i <= m; ++i) {
d[i][0] = i;
}
for (int j = 1; j <= n; ++j) {
d[0][j] = j;
}
for (int i = 1; i <= m; ++i) {
for (int j = 1; j <= n; ++j) {
int substitutionCost = (seqA[i - 1] == seqB[j - 1]) ? 0 : 1;
d[i][j] = Math.min(
Math.min(d[i - 1][j] + 1, d[i][j - 1] + 1),
d[i - 1][j - 1] + substitutionCost);
}
}
return d[m][n];
}
public static int indexOfLargest(float[] items) {
int ret = -1;
float largest = -Float.MAX_VALUE;
for (int i = 0; i < items.length; ++i) {
if (items[i] > largest) {
ret = i;
largest = items[i];
}
}
return ret;
}
}