Php 需要算法和实现帮助-比较2个文件

Php 需要算法和实现帮助-比较2个文件,php,algorithm,implementation,Php,Algorithm,Implementation,我的项目目的:有4个文件。它们每个都有不同的行数。每行由一个或几个单词组成。现在,对于这些文件中的每一个,我想计算另一个文件中有最多的常用词 例如(“,”是新行\n) 输入: 文件1行:A、B、C、D 文件2行:C、D、E、F 文件3行:A、E、C、G 文件4行:C、E、F、A 输出: 文件1:最大常用词为2,它们位于文件2(C,D)、文件3(A,C)和文件4(C,A)中 文件2:最大常用词为3,它们位于文件4(C、E、F)中 文件3:最大常用词为3,它们位于文件4(C、E、A)中 文件4:最

我的项目目的:有4个文件。它们每个都有不同的行数。每行由一个或几个单词组成。现在,对于这些文件中的每一个,我想计算另一个文件中有最多的常用词

  • 例如(“,”是新行\n)
  • 输入:
  • 文件1行:A、B、C、D
  • 文件2行:C、D、E、F
  • 文件3行:A、E、C、G
  • 文件4行:C、E、F、A

  • 输出:

  • 文件1:最大常用词为2,它们位于文件2(C,D)、文件3(A,C)和文件4(C,A)中
  • 文件2:最大常用词为3,它们位于文件4(C、E、F)中
  • 文件3:最大常用词为3,它们位于文件4(C、E、A)中
  • 文件4:最大常用词为3,它们位于文件2(C、E、F)中
我的逻辑是:

  • 开始
  • 从文件中读取每一行,并将其作为1-D数组存储在内存中(例如,array1[0]=“a”,array1[1]=“B”等等)
  • 因为有4个文件,所以我创建了4个数组=array1到array4。每个数组都有相应文件的内容
  • 现在我将比较第一个数组中的第一个单词和第二个数组中的第一个单词
  • 现在我将比较第一个数组中的第一个单词和第二个数组中的第二个单词,依此类推,直到第二个数组结束
  • 我将继续此操作,直到最后一个数组中的最后一个单词
  • 当我找到匹配的东西时,我会在变量中记下递增1
  • 我想知道这是否是处理这个问题的权利

    还是有更好的方法来思考这个问题

    编辑:
    1.忘记添加,将使用php。

    应该很容易处理。

    您应该首先对数组进行排序。然后,要计算
    array1
    array2
    之间的公共行数,请使用两个计数器
    i1
    i2

    伪代码:

    while(i1 < array.length && i2 < array2.length)
      if array1[i1] == array2[i2]
        ++i1; ++i2
        ++result
      else if array1[i1] < array2[i2]
        ++i1
      else
        ++i2
    
    while(i1
    我从这样有趣的环境中学习PHP。继续学习

    // put all files in same directory as this script
    // put file names in this array
    $files = array('1.txt','2.txt','3.txt','4.txt');
    $words = array();
    $data = '';
    
    $delimiter = "\n";  // change this to \r if running windows OS
    // itterate through the files and create a word list  
    foreach($files as $file){
        $fh = fopen($file,'r');
        $data .= $delimiter.fread($fh,filesize($file));
        fclose($fh);
    }
    // assuming 1 match per line like your question example 
    $lines = explode($delimiter,$data);
    
    foreach($lines as $line){
        $line = trim($line);
        if(empty($line)) continue;
        @$words[$line] += 1;  // @ suppreses notices
    }
    
    var_dump($words);
    /* *
     * according to your example:
     *
    array(7) {
      ["A"]=>
      int(3)
      ["B"]=>
      int(1)
      ["C"]=>
      int(4)
      ["D"]=>
      int(2)
      ["E"]=>
      int(3)
      ["F"]=>
      int(2)
      ["G"]=>
      int(1)
    } 
    */
    

    我将把在文件中找到的单词保存在如下数组中:
    if(isset($found_words_of_file_a[$word]){$found_words_of_file_a[$word]++;}否则{$found_words_of_file_a[$word]=1;}
    。正如您所看到的,关键字是单词,值是单词在文件中的总次数。易于访问和与其他数组进行比较。我不知道使用命名索引会有什么性能问题。感谢您告诉我一个直接函数欢迎您,将它与
    count()结合使用
    您已经完成了一半,使用了一个非常简单的代码,效果非常好。:)感谢您在完整逻辑方面的帮助:-)感谢您告诉我应该对其进行排序。我明白,从长远来看,这可能会节省时间