Skip to content

Implement CFL all-paths path-finding#9

Open
DanyaLitva wants to merge 27 commits intoSparseLinearAlgebra:stablefrom
DanyaLitva:stable
Open

Implement CFL all-paths path-finding#9
DanyaLitva wants to merge 27 commits intoSparseLinearAlgebra:stablefrom
DanyaLitva:stable

Conversation

@DanyaLitva
Copy link

@DanyaLitva DanyaLitva commented Mar 4, 2026

This PR adds an implementation algorithm for finding all paths based on the implementation of Rustam Azimov's algorithm for finding a single path and all paths in a graph with context-free constraints using matrix multiplication. Based on CFPQ-Core from #8

@DanyaLitva
Copy link
Author

Тесты ещё не готовы, сейчас они просто выводят матрицы, которые получились

@DanyaLitva
Copy link
Author

DanyaLitva commented Mar 4, 2026

Так же в CFPQ_Core внёс одно изменение, так как для алгоритма нужно два разных сложения

    // Rule [Variable -> eps]
    for (int64_t i = 0; i < eps_rules_count; i++)
    {
        LAGraph_rule_WCNF eps_rule = rules[eps_rules[i]];
        GrB_BinaryOp acc_op = t_empty_flags[eps_rule.nonterm] ? GrB_NULL : semiring->add_eps;
        GxB_eWiseUnion(
            T[eps_rule.nonterm], GrB_NULL, acc_op, semiring->init_path,
            T[eps_rule.nonterm], semiring->bottom_scalar, identity_matrix, false_scalar, GrB_NULL);

        t_empty_flags[eps_rule.nonterm] = false;
    }

В semiring добавлена вторая операция сложения add_eps для Rule [Variable -> eps]

upd добавил функцию get_nvals, так как в матрице могут изменяться внутренние векторы и обычного GrB_Matrix_nvals недостаточно

@DanyaLitva
Copy link
Author

DanyaLitva commented Mar 4, 2026

Проверил алгоритм на примере из статьи Рустама Азимова

Из статьи:
image

Из программы:
*матрице S соответствует output 0
image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant