Почему я получаю такое большое число в этом подразделении на java ?
Я работаю над проектом Java, где использую мин-хэширование для вычисления сходства Jaccard между двумя документами.Оба документа представляют собой тексты, которые задаются в виде несортированных целочисленных массивов ex. arr[0] = first word(как int ) ... Я вычисляю минимальное сходство хэширования между двумя наборами, а затем использую его для вычисления коэффициента джаккарда .
Проблема в том что когда я делю минимальное сходство хэширования с количеством элементов в объединении 2 массивов я получаю число не точное к делению
например, arr1={4,5,6,7} arr2={6,7}
минимальное сходство хэширования : 0,5
union array = {0,1,2,3,6,7} length = 6
коэффициент джаккарда = min-сходство хеширования / длина = 0.5/6 = 0.08333333333333
но я получаю 0,096, когда вычисляю коэффициент джаккарда
У меня есть код внизу .
Спасибо, что уделили мне время .
Что я уже пробовал:
@SuppressWarnings("static-access") public double jaccard(Document doc) // returns similarity/number of elems in union array { return this.minhash(doc)/(double(this.unionArrays(a,b,a.length,b.length)); } public static int unionArrays(int[] a ,int[] b ,int m , int n) { int counter=0; //number of elems in union array if (m > n) //make sure first array is smaller { int tempp[] = a; a = b; b = tempp; int temp = m; m = n; n = temp; } Arrays.sort(a); //sort first array for (int i = 0; i < m; i++) { counter++; //number of elems of first array } for (int i = 0; i < n; i++) { if (binarySearch(a, 1, m-1 , b[i]) == -1) { counter++; //if elem of second array doesn't exist in first array increase counter } } return counter; } private static int binarySearch(int[] arr, int l, int r, int x) { if (r >= l) { int mid = l + (r - l) / 2; // If the element is present at the middle itself if (arr[mid] == x) return mid; // If element is smaller than mid, then it can only // be present in left subarray if (arr[mid] > x) return binarySearch(arr, l, mid - 1, x); // Else the element can only be present in right subarray return binarySearch(arr, mid + 1, r, x); } // We reach here when element is not present in array return -1; }
0x01AA
Здесь return this.minhash(doc)/(double(this.unionArrays(a,b,a.length,b.length));
скобки не совпадают. Действительно ли ваш пример компилируется?
Richard MacCutchan
Поместите несколько операторов печати в свой код, чтобы вы могли видеть все вычисляемые значения. Это поможет выяснить, где расчет неверен.