搜尋

首頁  >  問答  >  主體

python - php查找演算法

一個檔案有30w條資料!每行一個資料

同行詞!例如post stop tops這樣的是同行詞
你用什麼辦法把裡面的所有這樣數據找出來

求個思想

phpcn_u1582phpcn_u15822800 天前472

全部回覆(3)我來回復

  • phpcn_u1582

    phpcn_u15822017-05-16 13:04:53

    使用linux指令來完成需求。例

    统计文件夹下包含Action( 数量
    grep Action\( ~/www/pms/app/app/controllers/*.php | wc -l

    回覆
    0
  • PHPz

    PHPz2017-05-16 13:04:53

    我的建議是寫一個特別的排序演算法,然後用usort來排序,這樣同儕詞都排在一起了,然後依序輸出

    排序演算法大致的邏輯是

    int cmp($left, $right) {
       //如果长度都不一致,直接放弃
       if(strlen($left) != strlen($right))
           return strcmp($left, $right);
       //长度一致的,按照字符切分,统计,判断是否一致
       $arrleft = str_split($left);
       $arrright = str_split($right);
       $leftstat = array();
       $rightstat = array();
       foreach($arrleft as $char) {
            if(array_key_exists($char, $leftstat))
                $leftstat[$char]++;
            else
                $leftstat[$char]=0;
       }
       foreach($arrright as $char) {
            //逻辑类似
       }
       //比较两个数组的统计是否一致
       if(count(array_diff_assoc($leftstat, $rightstat)) == 0)
           return 0;
       else
           return strcmp($left, $right);
    }

    1、排序30w行的數據,使用usort + 上面cmp函數

    2、從第2行到尾遍歷排序的數據,判斷本行和上一行是否一致,是:輸出,不是,向下走。

    大概吧。隨手寫的

    回覆
    0
  • PHP中文网

    PHP中文网2017-05-16 13:04:53

    雷雷

    回覆
    0
  • 取消回覆