Php 需要算法和实现帮助-比较2个文件
我的项目目的:有4个文件。它们每个都有不同的行数。每行由一个或几个单词组成。现在,对于这些文件中的每一个,我想计算另一个文件中有最多的常用词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:最
- 例如(“,”是新行\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.忘记添加,将使用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()结合使用
您已经完成了一半,使用了一个非常简单的代码,效果非常好。:)感谢您在完整逻辑方面的帮助:-)感谢您告诉我应该对其进行排序。我明白,从长远来看,这可能会节省时间