> 데이터 베이스 > MySQL 튜토리얼 > PHP 애플리케이션과 MySQL 데이터베이스 간의 Levenshtein 거리 계산을 어떻게 최적화할 수 있습니까?

PHP 애플리케이션과 MySQL 데이터베이스 간의 Levenshtein 거리 계산을 어떻게 최적화할 수 있습니까?

Patricia Arquette
풀어 주다: 2024-12-05 15:34:10
원래의
486명이 탐색했습니다.

How can I optimize Levenshtein distance calculations between a PHP application and a MySQL database?

MySQL 및 PHP의 Levenshtein: 최적화된 접근 방식

원본 코드 조각에서 Levenshtein 거리는 주어진 단어와 각 단어 사이에서 계산됩니다. PHP의 levenshtein 함수를 사용하여 데이터베이스에서 가져온 용어입니다. 그러나 이 접근 방식에는 여러 데이터베이스 쿼리가 포함되므로 대규모 데이터 세트에는 비효율적일 수 있습니다. 보다 효율적인 솔루션은 데이터베이스 쿼리 자체 내에서 Levenshtein 거리를 필터로 활용하는 것입니다.

이를 달성하려면 MySQL에 구현된 Levenshtein 함수가 필요합니다. 예를 들어, 다음과 같은 사용자 정의 함수를 고려할 수 있습니다.

DELIMITER $$
CREATE FUNCTION levenshtein(s1 VARCHAR(255), s2 VARCHAR(255)) RETURNS INT
BEGIN
DECLARE len1 INT DEFAULT LENGTH(s1);
DECLARE len2 INT DEFAULT LENGTH(s2);
DECLARE i, j, cost, d INT DEFAULT 0;

DECLARE sp VARCHAR(255);

IF len1 = 0 THEN
    RETURN len2;
ELSEIF len2 = 0 THEN
    RETURN len1;
ELSE
    SET sp = REPEAT(' ', len1);
    FOR i = 1 TO len1 DO
        SET sp = CONCAT(sp, i);
    END FOR;
    SET sp = CONCAT(sp, CHAR(10));
    FOR j = 1 TO len2 DO
        SET sp = CONCAT(sp, j, CHAR(10));
        SET cost = j;
        FOR i = 1 TO len1 DO
            IF s1 SUBSTRING(i, 1) = s2 SUBSTRING(j, 1) THEN
                SET d = 0;
            ELSE
                SET d = 1;
            END IF;
            SET cost = LEAST(
                cost + 1,
                i + 1 + 1,
                j + d + 1
            );
            SET sp = CONCAT(sp, cost);
        END FOR;
    END FOR;
    SET sp = CONCAT(sp, CHAR(10));
    RETURN SUBSTRING_INDEX(sp, CHAR(10), -1) - len1 - 1;
END IF;
END$$
DELIMITER ;
로그인 후 복사

Levenshtein 함수가 MySQL에 정의되면 쿼리를 다음과 같이 수정할 수 있습니다.

$word = mysql_real_escape_string($word);
mysql_qery("SELECT `term` FROM `words` WHERE levenshtein('$word', `term`) BETWEEN 0 AND 4");
로그인 후 복사

이 쿼리는 다음을 반환합니다. 지정된 단어에 대해 0에서 4 사이의 Levenshtein 거리를 갖는 단어 테이블의 모든 용어. 여러 PHP 루프를 피하고 데이터베이스의 내장 기능을 사용하면 특히 대규모 데이터 세트의 경우 상당한 성능 향상을 얻을 수 있습니다.

위 내용은 PHP 애플리케이션과 MySQL 데이터베이스 간의 Levenshtein 거리 계산을 어떻게 최적화할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿