Как я могу найти Самую большую Общую Подстроку между двумя строками в PHP?

Здесь нет ошибки здесь. Это явление известно как целочисленное переполнение .

x = np.arange(1,100000001)
print(x.sum())  # 987459712
print(x.dtype)  # dtype('int32')

32-битный целочисленный тип, используемый в arange для данного входа, просто не может содержать 5000000050000000. В лучшем случае это может занять 2147483647 .

Если вы явно используете тип данных с большим целым или с плавающей точкой, вы получите ожидаемый результат.

a = np.arange(1, 100000001, dtype='int64').sum()
print(a)  # 5000000050000000

a = np.arange(1.0, 100000001.0).sum()
print(a)  # 5000000050000000.0

19
задан Hash 26 September 2016 в 12:40
поделиться

4 ответа

Я с тех пор нашел соответствующая статья Википедии. Это не NP полная проблема, это может быть сделано в O (млн) время с помощью алгоритма динамического программирования.

В PHP я нашел функция similar_text очень полезный. Вот пример кода, чтобы получить ряд текстовых электронных писем и цикла через них и найти, которые на 90% подобны друг другу. Примечание: Что-то вроде этого не масштабируемо :

<?php
// Gather all messages by a user into two identical associative arrays
$getMsgsRes = mysql_query(SELECT * FROM email_messages WHERE from = '$someUserID');
while($msgInfo = mysql_fetch_assoc($getMsgsRes))
{
    $msgsInfo1[] = $msgInfo;
    $msgsInfo2[] = $msgInfo;
}

// Loop over msgs and compare each one to every other
foreach ($msgsInfo1 as $msg1)
    foreach ($msgsInfo2 as $msg2)
        similar_text($msg1['msgTxt'],$msg2['msgTxt'],$similarity_pst);
        if ($similarity_pst > 90)
            echo "{$msg1['msgID']} is ${similarity_pst}% to {$msg2['msgID']}\n";
?>
3
ответ дан 30 November 2019 в 04:08
поделиться

функция similar_text может быть тем, что Вы хотите.

Это вычисляет подобие между двумя строками. Возвращает количество соответствия символам в обеих строках

, можно также хотеть посмотреть levenshtein

10
ответ дан 30 November 2019 в 04:08
поделиться

Тем более, что мое приложение этого должно искать базу данных электронной почты и искать спам (т.е. подобные электронные письма, посланные тем же человеком).

я думаю, что необходимо смотреть на Байесовские алгоритмы вывода спама, не обязательно самую длинную общую подстроку.

http://www.devshed.com/c/a/PHP/Implement-Bayesian-inference-using-PHP-Part-1/

7
ответ дан 30 November 2019 в 04:08
поделиться

Взгляните на реализация/Строки/Самая длинная Алгоритма общая подстрока на Викиучебнике. Я не протестировал реализацию PHP, но это, кажется, соответствует общему алгоритму на странице Wikipedia.

1
ответ дан 30 November 2019 в 04:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: