127415157,31323794 ... (범위를 알 수 없음)와 같은 ID 배열이 있습니다. PHP에서 최대 빈도 ID를 찾는 가장 빠른 방법은 무엇입니까?PHP에서 최대 주파수 요소를 찾는 가장 빠른 방법
$array_ids = array()
127415157,31323794 ... (범위를 알 수 없음)와 같은 ID 배열이 있습니다. PHP에서 최대 빈도 ID를 찾는 가장 빠른 방법은 무엇입니까?PHP에서 최대 주파수 요소를 찾는 가장 빠른 방법
$array_ids = array()
$a = array(1, 2, 3, 4, 3, 3, 4, 4, 1, 3);
$r = array_count_values($a);
$k = array_search(max($r), $r);
echo "most frequent value is $k";
// Gives us an associative array of id=>count mappings,
$counts = array_count_values($array_ids);
// and sorts it from largest to smallest count
arsort($counts);
// Gets the first key after sorting, which is the id with the largest count
$max_freq_id = key($counts);
가 완전히 정렬 배열을 필요로하지 않기 때문에, 그러나 이것보다 더 빠를 수 있습니다 max()
과 함께 array_search()
을 사용하는 제안, 따라서 O(n log n)
대신 O(n)
시간이 실행됩니다.
맞아요, PHP의 정렬이 제자리에서 그렇게되는 것을 잊었습니다. 결정된. – Amber
동일 주파수로 복수의 요소의 문제 해결 : 5,3
또한/
$values = array(1, 1, 3, 3, 3, 3, 4, 5, 5, 5, 5, 6);
$freq = array_count_values($values);
arsort($freq);
$max = $val = key($freq);
while(next($freq) && current($freq) == $freq[$max]){
$val .= ','.key($freq);
}
echo " most frequent value is/are $val ";
이것이
가장 빈번한 값 OUPUT 것입니다되고 array_search와 max 콤보를 사용하는 것보다 조금 더 빠릅니다.
... 프로젝트 오일러? – medopal
@medopal : 아니지만 나는 그것을 봤다. 흥미 롭다. 언젠가는 그것을 시도해 보라. :) – Bruce