亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

php計算漢明距離總和的實例講解

瀏覽:6日期:2022-09-06 17:06:21

兩個整數的漢明距離指的是這兩個數字的二進制數對應位不同的數量。

計算一個數組中,任意兩個數之間漢明距離的總和。

實例

輸入: 4, 14, 2輸出: 6解釋:在二進制表示中,4表示為0100,14表示為1110,2表示為0010。(這樣表示是為了體現后四位之間關系)所以答案為:HammingDistance(4, 14) + HammingDistance(4, 2) + HammingDistance(14, 2) = 2 + 2 + 2 = 6.

注意:

數組中元素的范圍為從 0到 10^9。數組的長度不超過 10^4。

解題思路

窮舉兩兩組合的數量,然后累加漢明距離,這個是最簡單直白的方案。

結果是大量數據的時候會超時,階乘的數量太多。

class Solution { /** * @param Integer[] $nums * @return Integer */ function totalHammingDistance($nums) {$count = count($nums);$sum = 0;for ($i = 0; $i < $count - 1; $i++) { for ($j = $i+1; $j < $count; $j++) {$sum += $this->hm($nums[$i], $nums[$j]); }}return $sum; } // 漢明距離方法 function hm($x, $y) {return substr_count(decbin($x ^ $y), ’1’); }}

思路擴展:

解題思路擴展

咱們常常會這樣分析問題:最簡單的狀況 -> 通常的、復雜的狀況。以前咱們是:遍歷全部可能的兩兩組合。

如今咱們換一個角度看:若是int只有1位-> int有32位。leetcode

首先,若是 int 只有 1 位,即數組 nums 中的元素只有兩種狀況,0 或者 1,此時求漢明距離總和的步驟以下:get

首先將數組分紅兩組,全 0 位一組,全 1 位一組

將兩組數兩兩組合,記一個為a,一個為b

若是 a、b 均來自 0 那一組,或者均來自 1 那一組,此時不會有漢明距離產生。可是若是 a、b 一個來自 0 那一組,另一個來自1那一組,這時將會產生漢明距離

假設 nums 數組元素個數為 n,其中 0 元素個數為 k,則 1 元素的個數為 n-k,則上一步可以產生漢明距離的總和就是k*(n-k)

k*(n-k) 就是 int 只有 1 位的狀況下的漢明距離總和

若是將 int 的位數從 1 位擴展到 32 位,那么就是將遍歷每一位,而后求出在這一位上的漢明距離和,累加到一塊兒,這樣能夠將算法復雜度從 $O(N^2)$ 下降到 $O(32times N)$,即為 $O(N)$。

能夠看下面這個例子:

十進制 二進制

4: 0 1 0 0

14: 1 1 1 0

2: 0 0 1 0

1: 0 0 0 1

先看最后一列,有三個 0 和一個 1,那么它們之間相互的漢明距離就是 3,即 1 和其余三個 0 分別的距離累加,而后在看第三列,累加漢明距離為 4,由于每一個 1 都會跟兩個 0 產生兩個漢明距離,同理第二列也是 4,第一列是 3。各列相互之間兩兩組合的漢明距離總和就是各列 0 的個數與 1 的個數之和,把各列漢明距離總和再累加就是題目所求的數組 nums 元素兩兩之間的漢明距離總和。

代碼

class Solution {/*** @param Integer[] $nums* @return Integer*/function totalHammingDistance($nums) {$count = count($nums);$sum = 0;for($i = 0; $i < 32; $i++){$tmpCount = 0;for($j = 0; $j < $count; $j++)$tmpCount += ($nums[$j] >> $i) & 1;}$sum += $tmpCount * ($count - $tmpCount);}return $sum;}}

到此這篇關于php計算漢明距離總和的實例講解的文章就介紹到這了,更多相關php計算漢明距離總和的方法內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: PHP
相關文章:
主站蜘蛛池模板: 黄网久久 | 午夜国产精品久久久久 | 国产精品久久不卡日韩美女 | 就去色综合 | 9191国语精品高清在线最新 | 久久精品在现线观看免费15 | 亚洲最新视频在线观看 | 99re最新地址精品视频 | 成年人在线播放视频 | 免费二级c片在线观看a | 欧美精品久久久久久久免费观看 | 午夜精品一区二区三区在线视 | 国产真实搭讪系列 | 国产小视频网站 | 色xxxx| 精品视频在线观看一区二区三区 | 男人的天堂久久精品激情 | 国产欧美精品午夜在线播放 | 成人午夜网站 | 91正在播放极品白嫩在线观看 | 国产精品视频一区二区三区经 | 99色在线播放 | 碰碰97| 日韩在线黄色 | 精品专区 | 就要干就要操 | 久久亚洲日本不卡一区二区 | 亚洲理论片中文字幕电影 | 国产美女自拍 | 最新avtom永久地址免费 | 福利一区二区三区视频午夜观看 | xvideos最新亚洲入口 | 欧美成人手机在线 | 国产免费一区2区3区4区 | 国产成人91高清精品免费 | 久久精品国产网红主播图片 | 九九九九在线精品免费视频 | 国产精品第一区亚洲精品 | 国产91网站在线观看 | 大陆国语自产精品视频在 | 一级毛片免费播放视频 |