posts - 403, comments - 310, trackbacks - 0, articles - 7
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          求n個32位無符號整數中異或后值最大的兩個數

          Posted on 2008-04-10 00:33 ZelluX 閱讀(4665) 評論(5)  編輯  收藏 所屬分類: Algorithm

          問題:
          給定n個32位無符號整數,求出其中異或結果最大的兩個整數。

          例如
          給定1, 2, 3, 4, 0xFFFFFFFE
          1 XOR 0xFFFFFFFE的結果最大

          這題網上討論還不少,O(n logn)的方法很容易想,按二進制值從高到低劃分就行了。
          這里有一個思路很清晰的O(n)的做法,用了字典樹
          http://discuss.joelonsoftware.com/default.asp?interview.11.614716

          首先建立一棵深度為32的二叉樹,結點值為0/1,每個整數對應其中的一個葉子結點,這樣一共有n個葉子。

          接下來,對于任一個整數x,先取反,m = ~x
          在二叉樹中找到和x異或后值最大的數(根據二進制值的各位從樹根往下跑就行了,不過給出的代碼有點問題)
          找這個值在O(1)內就能完成,然后求出最大的

          O(n)


          評論

          # re: 求n個32位無符號整數中異或后值最大的兩個數  回復  更多評論   

          2008-04-12 10:51 by 豆抓搜索
          學習..http://www.douzhua.com

          # re: 求n個32位無符號整數中異或后值最大的兩個數  回復  更多評論   

          2008-05-04 10:42 by ZelluX
          發(fā)現這個復雜度其實有問題,因為32位無符號整數最多也就2^32次個,樹的深度自然是個常數級別的,囧

          # re: 求n個32位無符號整數中異或后值最大的兩個數[未登錄]  回復  更多評論   

          2008-10-28 14:09 by dave
          ZelluX,請你重新解釋下O(n logn)和Trie的解法,或者提供相關鏈接。給出的鏈接已經失效。非常感謝。

          # re: 求n個32位無符號整數中異或后值最大的兩個數[未登錄]  回復  更多評論   

          2008-10-28 20:09 by dave
          已經明白Trie的解法,請博主說說O(n logn)的方法吧。

          # re: 求n個32位無符號整數中異或后值最大的兩個數  回復  更多評論   

          2008-12-05 17:00 by wzcsoft
          字典樹的方法實際上是O(n*k) k=32

          實際上不一定比O(nlgn)好,lgn往往小于32
          主站蜘蛛池模板: 盱眙县| 嵊州市| 寿光市| 伊通| 齐河县| 顺平县| 德格县| 安丘市| 金堂县| 甘孜县| 炉霍县| 碌曲县| 崇礼县| 山东省| 普宁市| 南康市| 霞浦县| 来凤县| 祁东县| 神农架林区| 获嘉县| 辰溪县| 东兰县| 阿鲁科尔沁旗| 克山县| 花莲市| 巴中市| 襄城县| 淳安县| 华安县| 门头沟区| 浦北县| 娱乐| 浠水县| 威宁| 镶黄旗| 扶沟县| 凤冈县| 保亭| 平利县| 迁安市|