3

私のプロジェクトの目的:4つのファイルがあります。それぞれの行数は異なります。各行は、1つまたはいくつかの単語で構成されています。さて、これらのファイルのそれぞれについて、他のどのファイルが最大の共通語を持っているかを数えたいと思います。

  • 例えば。('、'は改行です\ 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. 始める
  2. ファイルから各行を読み取り、それを1次元配列としてメモリに保存します(例:array1 [0] = "A"、array1 [1]="B"など。
  3. 4つのファイルがあるので、4つの配列=array1からarray4を作成します。それぞれに、対応するファイルの内容が含まれます。
  4. 次に、最初の配列の最初の単語を2番目の配列の最初の単語と比較します。
  5. 次に、最初の配列の最初の単語を2番目の配列の2番目の単語と比較し、以下同様に2番目の配列の最後まで比較します。
  6. 最後の配列の最後の単語までこれを続けます。
  7. 何かが一致していることがわかったら、1をインクリメントして変数に書き留めます。

これがこの問題に取り組む権利であるかどうかを知りたい。

それとも、この問題について考えるより良い方法はありますか?

編集:1。追加するのを忘れた、phpを使用します。

4

3 に答える 3

2

私はこのような興味深い状況から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)
} 
*/
于 2012-10-14T12:11:54.190 に答える
1

array_intersectを使用して簡単に実行する必要があります。

于 2012-10-14T10:20:21.980 に答える
1

最初に配列をソートする必要があります。次に、との間の共通線の数を数えるためにarray1array22つのカウンターi1i2

擬似コード:

while(i1 < array.length && i2 < array2.length)
  if array1[i1] == array2[i2]
    ++i1; ++i2
    ++result
  else if array1[i1] < array2[i2]
    ++i1
  else
    ++i2
于 2012-10-14T10:29:24.607 に答える