Example usage for org.apache.commons.lang3.math NumberUtils min

List of usage examples for org.apache.commons.lang3.math NumberUtils min

Introduction

In this page you can find the example usage for org.apache.commons.lang3.math NumberUtils min.

Prototype

public static float min(final float a, final float b, final float c) 

Source Link

Document

Gets the minimum of three float values.

If any value is NaN, NaN is returned.

Usage

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()];
}