Как вычислить % сходства массивов? вот первый PHP: $ar1=Array( '011111110', '000000110', '000000110', '000001100', '000011100', '000011000', '000111000', '000110000', '001110000', '001100000', '000000000', ) вот второй PHP: $ar2=Array( '111111100', '000001100', '000001100', '000011000', '000111000', '000110000', '001110000', '001100000', '011100000', '011000000', '000000000', ); array_diff не подходит ((
я не помню, какие у вас там стандартные функции есть, но если процент сходства массивов это то, что я думаю, то сравнивай поэлементно и записывай количество совпадений. затем умножай это число на 100 и дели на количество элементов в массиве. ну что то вроде этого: PHP: $diff = 0; for($i = 0; $i < $array_size; ++$i) { if($arr1[$i] == $arr2[$i]) $diff++; } $result = ($diff * 100) / $array_size; print $result; расценивай это как всевдокод, ибо у меня языковой барьер
опять же смотря что тебе нужно. я привел пример для определения на сколько процентов 2 массива строк эквивалентны. ты можешь сравнить количество единиц в каждой строке, оно может совпасть, но их расположение может быть разное. типа 1010 и 0011 не одно и тоже. не знаю на сколько для тебя это имеет значение.
Почти сутки не сплю, вот такой вариант ) PHP: function array_compare($arr1, $arr2) { $result = 0; $pre = 0; if(count($arr1) != count($arr2)) return 'error'; foreach($arr1 as $index => $value) { if(isset($arr2[$index])) { $value2 = $arr2[$index]; if(strlen($value2) == strlen($value)) { if($value2 === $value) { $pre += 100; }else { $k = 0; $len = strlen($value); for($i = 0; $i < $len; $i++) { if($value[$i] == $value2[$i]) $k++; } $pre += round($k / $len * 100); } } } } $result = $pre / (count($arr1) * 100) * 100; return $result; } echo array_compare($ar1, $ar2);
Для скорости оба массива можно отсортировать. Потом идем по сортированным массивам и если текущий элемент из А меньше - то его пропускаем. Если текущий элемент В меньше - пропускаем его. Если они совпадают, то увеличиваем счетчик совпадений и пропускаем оба. Получится скорость O(n*log n), а без сортировки всего O(n^2)