PHP maksimum frekans eleman bulmak için hızlı yolu

2 Cevap

Ben bilinmemektedir (aralığı) ... 127415157,31323794 gibi kimlikleri bir dizi var. PHP maksimum frekans kimliğini bulmak için en hızlı yolu nedir?

$array_ids = array()

2 Cevap

// 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);

Kullanarak öneri array_search() Bu tamamen sıralama dizi gerekmez beri max(), ancak bu daha hızlı olabilir ve böylece [(2) {çalışacaktır ile kombine ]} zaman yerine O(n log n).

Aynı frekansta birden elemanlarının sorunu ele:

$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 ";

Bu çıktıya olacak

En sık değer / 5,3 olmasıdır

Ayrıca, bu array_search ve max üçlüsünü kullanarak biraz daha hızlıdır ...