List of usage examples for org.apache.commons.lang3.math NumberUtils min
public static float min(final float a, final float b, final float c)
Gets the minimum of three float
values.
If any value is NaN
, NaN
is returned.
From source file:com.naver.divideandconquer.levenshtein.Levenshtein.java
private static int calculateDistance(String str1, String str2, int distance) { if (StringUtils.isBlank(str1) && StringUtils.isBlank(str2)) { return distance; }//ww w. j a v a 2 s . c om if (StringUtils.isBlank(str1)) { return distance + str2.length(); } if (StringUtils.isBlank(str2)) { return distance + str1.length(); } boolean isEqualEndChar = str1.charAt(str1.length() - 1) == str2.charAt(str2.length() - 1); if (isEqualEndChar) { return calculateDistance(str1.substring(0, str1.length() - 1), str2.substring(0, str2.length() - 1), distance); } else { int case1 = calculateDistance(str1.substring(0, str1.length() - 1), str2.substring(0, str2.length() - 1), distance + 1); int case2 = calculateDistance(str1, str2.substring(0, str2.length() - 1), distance + 1); int case3 = calculateDistance(str1.substring(0, str1.length() - 1), str2, distance + 1); return NumberUtils.min(case1, case2, case3); } }
From source file:com.naver.dynamicprogramming.levenshtein.Levenshtein.java
private static int calculateDistanceRecursive(String str1, String str2, int distance) { if (StringUtils.isBlank(str1) && StringUtils.isBlank(str2)) { return distance; }/*ww w . j ava 2 s.c om*/ if (StringUtils.isBlank(str1)) { return distance + str2.length(); } if (StringUtils.isBlank(str2)) { return distance + str1.length(); } boolean isEqualEndChar = str1.charAt(str1.length() - 1) == str2.charAt(str2.length() - 1); if (isEqualEndChar) { return calculateDistanceRecursive(str1.substring(0, str1.length() - 1), str2.substring(0, str2.length() - 1), distance); } else { int case1 = calculateDistanceRecursive(str1.substring(0, str1.length() - 1), str2.substring(0, str2.length() - 1), distance + 1); int case2 = calculateDistanceRecursive(str1, str2.substring(0, str2.length() - 1), distance + 1); int case3 = calculateDistanceRecursive(str1.substring(0, str1.length() - 1), str2, distance + 1); return NumberUtils.min(case1, case2, case3); } }
From source file:com.naver.dynamicprogramming.levenshtein.Levenshtein.java
public static int calculateDistance(String str1, String str2) { int[][] distanceArr = new int[str1.length()][str2.length()]; for (int row = 0; row < distanceArr.length; row++) { for (int column = 0; column < distanceArr[row].length; column++) { distanceArr[row][column] = 0; }/*from w w w . j a v a 2 s . com*/ } for (int row = 0; row < distanceArr.length; row++) { for (int column = 0; column < distanceArr[row].length; column++) { boolean isEqualEndCahr = str1.charAt(row) == str2.charAt(column); //ArrayOutOfIndexException? row, column? 0? . if (row == 0 && column == 0) { if (isEqualEndCahr) { distanceArr[row][column] = 0; } else { distanceArr[row][column] = 1; } } else if (row == 0) { if (isEqualEndCahr) { distanceArr[row][column] = distanceArr[row][column - 1]; } else { distanceArr[row][column] = distanceArr[row][column - 1] + 1; } } else if (column == 0) { if (isEqualEndCahr) { distanceArr[row][column] = distanceArr[row - 1][column]; } else { distanceArr[row][column] = distanceArr[row - 1][column] + 1; } } else { if (isEqualEndCahr) { distanceArr[row][column] = NumberUtils.min(distanceArr[row - 1][column - 1], distanceArr[row][column - 1], distanceArr[row - 1][column]); } else { distanceArr[row][column] = NumberUtils.min(distanceArr[row - 1][column - 1], distanceArr[row][column - 1], distanceArr[row - 1][column]) + 1; } } } } return distanceArr[str1.length() - 1][str2.length() - 1]; }
From source file:com.naver.wordladder.WordLadder.java
private int calculateEditDistance(String startString, String endString) { if (startString.equals(endString)) { return 0; }// w w w.j ava 2 s . c om int[][] distanceArray = createDistanceArray(startString, endString); for (int i = 1; i < distanceArray.length; i++) { for (int j = 1; j < distanceArray[0].length; j++) { if (startString.charAt(i - 1) == endString.charAt(j - 1)) { distanceArray[i][j] = distanceArray[i - 1][j - 1]; } else { distanceArray[i][j] = NumberUtils.min(distanceArray[i - 1][j], distanceArray[i][j - 1], distanceArray[i - 1][j - 1]) + 1; } } } return distanceArray[startString.length()][endString.length()]; }
From source file:com.tealcube.minecraft.bukkit.TextUtils.java
/** * Returns the Levenshtein Distance between the two given Strings. * * @param str1//from ww w . j av a2 s.co m * First String * @param str2 * Second String * @return Levenshtein Distance */ public static int levenshteinDistance(String str1, String str2) { Validate.notNull(str1, "str1 cannot be null"); Validate.notNull(str2, "str2 cannot be null"); int[][] distance = new int[str1.length() + 1][str2.length() + 1]; for (int i = 0; i <= str1.length(); i++) { distance[i][0] = i; } for (int j = 1; j <= str2.length(); j++) { distance[0][j] = j; } for (int i = 1; i <= str1.length(); i++) { for (int j = 1; j <= str2.length(); j++) { distance[i][j] = NumberUtils.min(distance[i - 1][j] + 1, distance[i][j - 1] + 1, distance[i - 1][j - 1] + ((str1.charAt(i - 1) == str2.charAt(j - 1)) ? 0 : 1)); } } return distance[str1.length()][str2.length()]; }