c - Strassen 奇数矩阵的优化静态填充

标签 c algorithm strassen

我正在尝试解决 Strassen 算法的奇数矩阵问题。我的实现在某个点截断递归,称之为 Q,然后切换到标准实现。因此,在进行静态填充时,我实际上不需要填充到 2 的下一个幂。我只需要填充到至少大于输入矩阵维数的 m*2^k,使得 m < Q。

我在实现这个时遇到了一些麻烦 - 主要是因为我不确定什么是最有效的。我需要遍历所有可能的 m 值,还是从每个给定的输入递增,测试它们是否满足条件?

最佳答案

你是对的。填充到 m * 2^k 应该比填充到下一个 2 的幂更好。

我认为你应该填充这个函数计算的值:

int get_best_pud_up_value(int actual_size, int Q) {
    int cnt = 0;
    int n = actual_size;
    while(n > Q) {
        cnt++;
        n /= 2;
    }

    // result should be smallest value such that:
    // result >= actual_size AND
    // result % (1<<cnt) == 0

    if (actual_size % (1<<cnt) == 0) {
        return actual_size;
    } else {
        return actual_size + (1<<cnt) - actual_size % (1<<cnt);
    }
}

关于c - Strassen 奇数矩阵的优化静态填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9908917/

相关文章:

c# - 为什么 double 精度在 C 和 C# 之间不同?

android - 与 android NativeActivity 一起使用的方法列表

c - 直到程序结束,文件才写入磁盘

algorithm - 复杂度等级 P 的性质

algorithm - 子集和 - 恢复解决方案

c++ - "Splitting"常数时间内的矩阵

c - 如何使用 C 系统调用 mkdir 创建隐藏文件夹?

algorithm - 离散优化算法

algorithm - Strassen 计算矩阵平方的方法有什么问题?