Matlab和python详解数独谜题问题

🔗 运行环境:Matlab、Python

🚩 撰写作者:左手の明天

🥇 精选专栏:《python》

🔥  推荐专栏:《算法研究》

🔐#### 防伪水印——左手の明天 ####🔐

💗 大家好🤗🤗🤗,我是左手の明天!好久不见💗

💗今天分享算法——数独谜题问题💗

📆  最近更新:2023 年 12 月 04 日,左手の明天的第 299 篇原创博客

📚 更新于专栏:matlab

🔐#### 防伪水印——左手の明天 ####🔐


目录

一、数独谜题

二、整数规划求解数独

1.1 理解问题

1.2 建立数学模型

1.3 定义变量和约束条件

1.4 使用整数规划求解

三、决策变量的取值

四、MATLAB整数规划求解数独问题

五、MATLAB回溯法求解数独问题

六、Python求解数独问题

七、提高数独求解程序的效率

八、优化算法提高数独求解效率措施

回溯法的优化:

数对法和唯余法的优化:

并行计算:

机器学习算法的应用:

代码优化:

预处理和后处理:

算法集成:

动态规划的应用:

数学定理的应用:

人工智能技术的应用:


一、数独谜题

数独是一种流行的逻辑推理游戏,玩家需要将数字填入一个9x9的网格,使得每行、每列和每个3x3的子网格中都包含1-9的数字,且每个数字只出现一次。数独谜题的目标是填充缺失的数字,使得满足上述条件。整数规划是一种求解数学问题的方法,可以将数独问题转化为整数规划问题,从而通过数学模型求解。

第一行 B(1,2,2) 表示第 1 行第 2 列的整数提示为 2。第二行 B(1,5,3) 表示第 1 行第 5 列的整数提示为 3。以下是整个矩阵 B

B = [1,2,2;
    1,5,3;
    1,8,4;
    2,1,6;
    2,9,3;
    3,3,4;
    3,7,5;
    4,4,8;
    4,6,6;
    5,1,8;
    5,5,1;
    5,9,6;
    6,4,7;
    6,6,5;
    7,3,7;
    7,7,6;
    8,1,4;
    8,9,8;
    9,2,3;
    9,5,4;
    9,8,2];

drawSudoku(B) % For the listing of this program, see the end of this example.


二、整数规划求解数独

整数规划求解数独问题是一个复杂而有趣的领域,需要理解问题的本质,定义合适的变量,建立数学模型,并使用有效的求解方法进行求解。以下是求解数独谜题的步骤:

1.1 理解问题

数独是一种基于逻辑的填数字游戏,目的是在9x9的网格中填充数字1-9,使得每行、每列和每个3x3的子网格中都包含1-9的数字,且每个数字只出现一次。数独谜题通常由一组已填充的数字和一组空白格子组成,我们需要通过推理和逻辑判断来填充缺失的数字。

1.2 建立数学模型

整数规划的基本形式是:最小化一个线性函数(目标函数),使得一组线性不等式(约束条件)成立,且某些决策变量取整数值。在数独问题中,可以将每个数字看作一个决策变量,如果某个数字在某个位置上非负,则该变量的取值为1,否则为0。同时,可以定义一组线性不等式来描述数独的约束条件。

1.3 定义变量和约束条件

假设X是一个9x9的矩阵,其中X[i][j]表示第i行第j列的数字。定义变量x[i][j],如果X[i][j]非负,则x[i][j]=1,否则x[i][j]=0。同时,定义变量y[i][j]表示第i行第j列的格子是否已经被填入数字(如果填入数字则y[i][j]=1,否则y[i][j]=0)。另外,定义z[i][j][k]表示第i行第j列的格子是否被填入数字k(如果填入数字k则z[i][j][k]=1,否则z[i][j][k]=0)。在这个模型中,我们需要在所有y[i][j]=0的位置填入合适的数字,使得所有z[i][j][k]=1的位置都满足k=1-9。

约束条件包括:

  • 所有z[i][j][k]的总和等于1(每个格子只能填入一个数字)
  • 所有z[i][j][1-9]的总和等于X[i][j](每个格子填入的数字等于其左上角标出的数字)
  • 所有z[i][j][k]的总和小于等于y[i][j](每个格子填入的数字只能是整数)
  • 所有y[i][j]的总和小于等于80(每行最多只能填入8个数字)
  • 所有y[i][j]的总和等于81(每行必须填入9个数字)
  • 所有X[i][j]的总和等于81(每行必须填入9个数字)
  • 所有X[i][j]的总小于等于80(每行最多只能填入8个数字)

目标函数:最小化所有决策变量的和,即最小化所有填充数字的数量。 约束条件:每行、每列和每个3x3的子网格中都包含1-9的数字,且每个数字只出现一次。这可以通过以下不等式表示:

z[i][j][k] + z[i][j][k'] <= 1, 对于所有i, j, k, k'

z[i][j][k] + z[i][j][k'] <= 1, 对于所有i, j, k, k'

z[i][j][k] + z[i-1][j][k'] <= 1, 对于所有i, j, k, k'

z[i][j][k] + z[i+1][j][k'] <= 1, 对于所有i, j, k, k'

z[i][j][k] + z[i][j-1][k'] <= 1, 对于所有i, j, k, k'

z[i][j][k] + z[i][j+1][k'] <= 1, 对于所有i, j, k, k'

z[i][j][k] + z[i-1][j-1][k'] <= 1, 对于所有i, j, k, k'

z[i][j][k] + z[i-1][j+1][k'] <= 1, 对于所有i, j, k, k'

z[i][j][k] + z[i+1][j-1][k'] <= 1, 对于所有i, j, k, k'

z[i][j][k] + z[i+1][j+1][k'] <= 1, 对于所有i, j, k, k'

其中,z[i][j][k]表示第i行第j列填入数字k的格子的决策变量。以上不等式表示每个格子只能填入一个数字,且每个数字只能填入一次。 决策变量:对于每个数字1-9,我们定义一个决策变量z[i][j][k],表示第i行第j列填入数字k的格子的决策变量。决策变量的取值为0或1。

1.4 使用整数规划求解

使用整数规划求解数独问题可以通过以下步骤实现:

(1)初始化决策变量:将所有决策变量初始化为0。

(2)设置目标函数:将目标函数设置为所有决策变量的和,即最小化填充数字的数量。

(3)添加约束条件:将上述建立的约束条件添加到模型中。

(4)使用整数规划求解器进行求解:使用常见的整数规划求解器(如CPLEX、Gurobi等)进行求解。在求解过程中,需要将数独问题转化为标准的整数规划问题,并使用合适的求解算法进行求解。

(5)解码和解谜:在得到解后,需要将解解码成对应的数独答案,并进行验证和解谜。解码的过程需要将决策变量转换为具体的数字填充结果,并检查是否满足数独的规则和要求。如果得到的结果符合要求,则解谜成功;否则需要进行进一步的推理和判断。


三、决策变量的取值

在整数规划求解数独问题时,决策变量的取值确定是通过以下步骤实现的:

  1. 初始化决策变量:将所有决策变量初始化为0,表示初始状态下所有格子都是空的。
  2. 填充决策变量:通过推理和逻辑判断,确定每个格子的数字填充结果,即决策变量的取值。在填充决策变量时,需要满足数独的规则和要求,即每行、每列和每个3x3的子网格中都包含1-9的数字,且每个数字只出现一次。
  3. 验证和解码:在得到解后,需要将解解码成对应的数独答案,并进行验证和解谜。解码的过程需要将决策变量转换为具体的数字填充结果,并检查是否满足数独的规则和要求。如果得到的结果符合要求,则解谜成功;否则需要进行进一步的推理和判断。

需要注意的是,整数规划求解数独问题时,得到的解可能不是唯一的,因此需要进行充分的验证和解码,以得到所有符合要求的解。同时,整数规划求解数独问题的方法也有一定的局限性,可能存在某些特殊情况无法通过此方法得到解。


四、MATLAB整数规划求解数独问题

以下是一个使用MATLAB整数规划求解数独问题的示例代码:

% 创建数独矩阵
X = zeros(9,9); % 初始为全零矩阵
% 填充已知数字
X(1,5) = 1; X(2,3) = 2; X(2,4) = 4; X(3,1) = 3; X(3,2) = 5; X(3,6) = 6; X(4,1) = 7; X(4,2) = 8; X(4,3) = 9;
X(5,4) = 7; X(6,2) = 6; X(6,3) = 8; X(7,1) = 5; X(7,2) = 9; X(7,4) = 4; X(7,6) = 2; X(8,1) = 3; X(8,3) = 1; X(8,5) = 9; X(8,7) = 8;
X(9,4) = 5; X(9,5) = 7; X(9,6) = 9; X(9,7) = 3; X(9,8) = 6);
 
% 定义决策变量
z = zeros(9,9); % 初始为全零矩阵
for i=1:9
    for j=1:9
        if X(i,j)==0 % 如果格子为空,定义决策变量为0
            z(i,j)=0;
        else % 如果格子不为空,定义决策变量为1-9之间的数字
            z(i,j)=X(i,j);
        end
    end
end
 
% 设置目标函数和约束条件
Aeq=[]; beq=[]; Aineq=[]; bineq=[]; lb=0; ub=0; varnames=[]; obj=0;
for i=1:9
    for j=1:9
        if z(i,j)==0 % 如果格子为空,设置目标函数和约束条件为最小化填充数字的数量
            obj=obj+1; % 目标函数为最小化填充数字的数量
            Aineq=[Aineq -3*ones(1,9)]; % 每行最多只能填充8个数字的约束条件
            bineq=[bineq -8]; % 每列最多只能填充8个数字的约束条件
            Aineq=[Aineq -3*ones(9,1)]; % 每列最多只能填充8个数字的约束条件
            bineq=[bineq -8]; % 每行最多只能填充8个数字的约束条件
            Aineq=[Aineq -3*ones(3,3)]; % 每3x3子网格最多只能填充8个数字的约束条件
            bineq=[bineq -8]; % 每行最多只能填充8个数字的约束条件
        else % 如果格子不为空,设置目标函数和约束条件为最小化填充数字的数量,并设置格子中填入的数字为已知量
            obj=obj+0; % 目标函数为最小化填充数字的数量
            Aineq=[Aineq -3*ones(1,9)*z(i,j)]; % 每行最多只能填充8个数字的约束条件
            bineq=[bineq -8*z(i,j)]; % 每列最多只能填充8个数字的约束条件
            Aineq=[Aineq -3*ones(9,1)*z(i,j)]; % 每列最多只能填充8个数字的约束条件
            bineq=[bineq -8*z(i,j)]; % 每行最多只能填充8个数字的约束条件
            Aineq=[Aineq -3*ones(3,3)*z(i,j)]; % 每3x3子网格最多只能填充8个数字的约束条件
            bineq=[bineq -8*z(i,j)]; % 每行最多只能填充8个数字的约束条件
        end  
    end  
end

五、MATLAB回溯法求解数独问题

在MATLAB中求解数独,可以使用回溯法,这是一种试错的方法,它尝试分步解决问题。如果当前的解决方案不能被接受,就会“回溯”并寻找下一个可能的解决方案。

以下是一个MATLAB求解数独的示例代码:

	function solve_sudoku(board)
    % board: 9x9 矩阵,其中0表示空格,其他数字表示填入的数字
    % 返回值: 填充完成的数独矩阵
 
    % 检查输入矩阵是否有效
    if board(1,1) == 0 || board(9,9) == 0 || board(1,9) == 0 || board(9,1) == 0
        error('输入的数独矩阵无效。');
    end
 
    % 填充函数,返回填充的数字或0(如果无法填充)
    function num = fill_cell(row, col)
        % 检查该位置是否已填或超出范围
        if row < 1 || row > 9 || col < 1 || col > 9 || board(row, col) ~= 0
            error('无效的行或列。');
        end
        
        % 从1-9中查找可能的数字
        for num = 1:9
            if all(board(row, :) == num) || all(board(:, col) == num) || all(board(1:3:end, 1:3:end) == num)
                % 在该位置填充数字并返回
                board(row, col) = num;
                return;
            end
        end
        % 如果无法找到数字,返回0表示无法填充
        board(row, col) = 0;
        return;
    end
 
    % 从第一行开始,依次填充每个空格
    for col = 1:9
        for row = 1:9
            if board(row, col) == 0 % 如果当前位置是空格,则尝试填充数字
                fill_cell(row, col);
            end
        end
    end
    % 检查是否所有空格都已填充,如果是则返回完成的数独矩阵,否则返回错误信息
    if any(board(:) == 0) % 如果还有空格未填充,则返回错误信息
        error('无法解决该数独。');
    end
end

 这段代码首先检查输入的数独矩阵是否有效(即没有空格出现在第一行、第一列、第一宫或者最后一行、最后一列、最后一宫),然后使用嵌套循环遍历每一个空格,并调用fill_cell函数尝试填充数字。如果某个空格无法填充数字(即该位置所在的行、列、宫中已经包含了相同的数字),则将该空格标记为0表示无法填充。最后,检查是否所有的空格都已经被填充,如果有未被填充的空格,则返回错误信息表示该数独无解。如果所有的空格都被成功填充,则返回完成的数独矩阵。


六、Python求解数独问题

在Python中求解数独问题可以使用多种方法,其中一种简单的方法是基于回溯算法的实现。下面是一个使用Python实现的基于回溯算法的数独求解示例代码:

def solve_sudoku(board):
    """
    求解数独问题的函数,使用回溯算法实现
    :param board: 9x9的数独矩阵,其中0表示空格,其他数字表示填入的数字
    :return: 填充完成的数独矩阵
    """
    if board[0][0] == 0:  # 如果第一个空格存在,则无法求解该数独
        return None
    solve_cell(board, 0, 0)  # 从第一个空格开始求解
    if board[0][0] == 0:  # 检查是否所有空格都已填充,否则返回错误信息
        return None
    return board
 
def solve_cell(board, row, col):
    """
    填充单个空格的函数,使用回溯算法实现
    :param board: 9x9的数独矩阵,其中0表示空格,其他数字表示填入的数字
    :param row: 要填充的空格所在行号(从0开始)
    :param col: 要填充的空格所在列号(从0开始)
    """
    if board[row][col] != 0:  # 如果该空格已填充,则返回
        return None
    for num in range(1, 10):  # 尝试从1-9中查找可能的数字
        if is_valid(board, row, col, num):  # 检查该数字是否合法
            board[row][col] = num  # 在该位置填充数字并返回
            if solve_cell(board, row - 1, col) is None:  # 检查下一行同一列的空格是否可填充
                board[row][col] = 0  # 如果不可填充,则回溯并将该空格置为0
            else:
                return board  # 如果可填充,则返回完成的数独矩阵
        board[row][col] = 0  # 如果当前数字不可填充,则回溯并将该空格置为0
    return None  # 如果无法填充任何数字,则返回错误信息
 
def is_valid(board, row, col, num):
    """
    检查某个数字是否合法,即是否在同一行、同一列或同一宫中出现过
    :param board: 9x9的数独矩阵,其中0表示空格,其他数字表示填入的数字
    :param row: 要检查的数字所在行号(从0开始)
    :param col: 要检查的数字所在列号(从0开始)
    :param num: 要检查的数字(从1开始)
    :return: True表示该数字合法,False表示该数字不合法
    """
    for i in range(9):  # 检查同一行中是否有相同的数字出现
        if board[row][i] == num:
            return False
    for i in range(9):  # 检查同一列中是否有相同的数字出现
        if board[i][col] == num:
            return False
    for i in range(3):  # 检查同一宫中是否有相同的数字出现
        for j in range(3):  # 宫的行列偏移量为(3n-2,3n-2)(n为宫编号)
            if board[i + row // 3 * 3 - 2][j + col // 3 * 3 - 2] == num:
                return False
    return True  # 如果以上条件均不满足,则该数字合法,返回True

七、提高数独求解程序的效率

提高数独求解程序的效率可以从以下几个方面入手:

  1. 优化算法:选择合适的算法是提高数独求解程序效率的关键。对于回溯法,可以通过剪枝、分支限界等技术来减少搜索树的大小,提高搜索效率。对于数对法和唯余法,可以通过优化查找和验证候选数字的过程来提高效率。
  2. 使用数据结构:使用适当的数据结构可以加快程序的运行速度。例如,使用哈希表可以快速查找和验证候选数字,使用位图可以快速标记单元格的值。
  3. 并行计算:如果程序支持并行计算,可以尝试使用多线程或分布式计算来加速求解过程。通过将数独题目划分为多个子问题,并使用多个计算资源同时解决这些子问题,可以显著缩短求解时间。
  4. 机器学习:可以使用机器学习算法来提高程序的效率。例如,通过训练一个预测模型来预测数独题目的难度等级,以便程序在解决较难题目时使用更复杂的算法和更多的计算资源。
  5. 代码优化:通过对程序进行代码优化,可以减少程序的运行时间和内存占用。例如,优化循环结构、减少不必要的计算、使用适当的数据类型等。
  6. 硬件升级:通过升级计算机硬件,可以提高程序的运行速度。例如,使用更快的CPU、更大的内存、更快的硬盘等。

综上所述,提高数独求解程序的效率需要综合考虑算法、数据结构、并行计算、机器学习、代码优化和硬件升级等多个方面。


八、优化算法提高数独求解效率措施

优化算法以提高数独求解程序的效率可以采取以下措施:

  1. 回溯法的优化:

    • 剪枝:在搜索树中,可以通过剪枝来排除一些不可能的分支,减少搜索范围。例如,如果某个分支中的某个单元格的候选数字只有唯一的一个,那么这个分支肯定不是正确答案,可以直接排除。
    • 分支限界:在搜索树中,可以设定一个界限来限制搜索深度,或者设定多个界限来平衡搜索深度和广度,从而提高搜索效率。
  2. 数对法和唯余法的优化:

    • 快速查找和验证候选数字:使用哈希表等数据结构来存储和查找候选数字,减少查找和验证的时间。
    • 优化冲突检测:在验证候选数字时,可以通过一些技巧来快速检测冲突,避免不必要的计算。
  3. 并行计算:

    • 将数独题目划分为多个子问题,每个子问题使用一个线程或进程进行求解。
    • 使用多线程或多进程可以同时处理多个子问题,从而提高求解效率。
  4. 机器学习算法的应用:

    • 使用机器学习算法对数独题目进行分类,根据题目类型选择合适的算法和参数。
    • 通过机器学习算法对历史解法进行分析和总结,从而优化搜索策略和算法参数。
  5. 代码优化:

    • 优化循环结构,减少冗余计算。
    • 使用适当的数据类型和内存管理技巧,提高程序的内存使用效率。
  6. 预处理和后处理:

    • 对输入的数独题目进行预处理,例如去除重复的数字、填充默认值等。
    • 对求解结果进行后处理,例如去除冗余的数字、检查答案的合理性等。
  7. 算法集成:

    • 将不同的算法进行集成,形成混合算法。例如将回溯法、数对法和唯余法进行集成,根据题目类型和难度自动选择合适的算法进行求解。
    • 通过算法集成可以实现各算法的优势互补,从而提高求解效率和准确性。
  8. 动态规划的应用:

    • 在数独求解中引入动态规划的思想,通过状态转移和状态压缩等技术减少冗余计算。
    • 使用动态规划可以避免重复计算相同的子问题,从而提高求解效率。
  9. 数学定理的应用:

    • 利用数学定理来推导数独题目的解法,从而减少不必要的计算。例如,通过应用数学定理来判断某个单元格的值是否唯一,从而排除一些不可能的候选数字。
  10. 人工智能技术的应用:

    • 使用人工智能技术中的启发式搜索算法来指导搜索过程,从而减少搜索范围和提高搜索效率。例如,使用A*算法来选择下一个要探索的分支。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/215067.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

爱德华|书客|飞利浦护眼台灯好不好用?多方位测评对比爆料!

说到护眼台灯相信大家都不陌生&#xff0c;很多办公族、学生党都会备上一台用于工作、学习。因为长时间的工作或者学习&#xff0c;会明显的感觉到眼睛疲劳和不适。而护眼台灯可以很好的解决这个难题&#xff0c;因为护眼台灯是经过科学的设计和研发的&#xff0c;护眼台灯可以…

苹果录屏功能在哪?提升你的使用体验

屏幕录制已成为人们日常生活中不可或缺的一部分&#xff0c;苹果设备内置了强大的录屏功能&#xff0c;允许用户捕捉屏幕上的活动&#xff0c;可是很多用户不知道苹果录屏功能在哪。本文将详细介绍如何使用苹果内置录屏功能&#xff0c;为用户提供全面的录屏解决方案。 苹果录屏…

ESP32 LVGL Gui-Guider的移植

使用参考&#xff1a; ESP32系列之LVGL&#xff08;三&#xff09;&#xff1a;Gui-Guider的使用_esp32 lvgl-CSDN博客 1、拷贝文件&#xff1a; 按照上面的文章&#xff0c;使用Gui-Guider软件生成C代码之后&#xff0c;custom和generated是我们要使用到的文件&#xff0c;…

36、红外遥控(外部中断)

红外遥控简介 红外遥控是利用红外光进行通信的设备&#xff0c;由红外LED将调制后的信号发出&#xff0c;由专用的红外接收头进行解调输出 通信方式&#xff1a;单工&#xff0c;异步 红外LED波长&#xff1a;940nm 通信协议标准&#xff1a;NEC标准 硬件电路 基本发送与接收…

海云安参与制定《信息安全技术 移动互联网应用程序(App)软件开发工具包(SDK)安全要求》标准正式发布

近日&#xff0c;由TC260&#xff08;全国信息安全标准化技术委员会&#xff09;归口 &#xff0c;主管部门为国家标准化管理委员会&#xff0c;深圳海云安网络安全技术有限公司&#xff08;以下简称“海云安”&#xff09;等多家相关企事业单位共同参与编制的GB/T 43435-2023《…

鸿蒙Watch 页面跳转

新建页面 config.json 回自动注册 添加跳转 <button type"capsule" onclick"toStatusMonitor">状态检测</button>写跳转方法 import router from system.router;export default {data: {},onInit() {},onShow() {},toStatusMonitor() {rou…

GraphPad Prism 9:最强大的数据分析软件,助您轻松解析复杂数据!

您是否正在寻找一个功能强大、易于使用的数据分析软件&#xff1f;GraphPad Prism 9是您的最佳选择&#xff01;作为全球领先的科学数据分析工具&#xff0c;Prism 9提供了广泛的功能和先进的统计分析方法&#xff0c;帮助您轻松解析和可视化复杂的数据。 Prism 9不仅具备直观…

linux作业管理_jobs

4.2 作业管理 是指控制当前正在运行的进程的行为&#xff0c;也称为进程控制。 是shell的一个特性&#xff0c;使用户能在多个独立进程间进行切换。 例如&#xff0c;用户可以挂起一个正在运行的进程&#xff0c;稍后再恢复其运行。当用户使用vim编辑一个文本文件&#xff0c…

Android把宽高均小于给定值的Bitmap放大到给定值,Kotlin

Android把宽高均小于给定值的Bitmap放大到给定值&#xff0c;Kotlin 假设拉伸放大到SIZE2048 fun scaleSize(image: Bitmap): Bitmap {val w image.widthval h image.heightvar newW: Intvar newH: Intif (w > h) {newW SIZEnewH (SIZE / w.toFloat()) * h} else {newW …

【Springboot+vue】如何运行springboot+vue项目

从github 或者 gitee 下载源码后&#xff0c;解压&#xff0c;再从idea打开项目 后端代码处理 这是我在gitee下载下来的源码 打开之后&#xff0c;先处理后端代码 该配置的配置&#xff0c;该部署的部署 比如将sql文件导入数据库 然后去配置文件更改配置 然后启动项目 确保…

极米Z系列双十一销量超10万台 极米Z7X成轻薄投影首选

近期&#xff0c;极米2023双十一战报公布&#xff0c;双十一全周期&#xff08;10月19日00:00-11月11日23:59&#xff09;极米夺得京东/天猫/抖音投影品类销量&GMV双第一&#xff0c;全网单品总销量超190,000台。按照产品系列来看&#xff0c;极米家用旗舰H系列全网销量超4…

在项目根目录未找到 app.json

这个问题就是我们在编译后的app.json文件找不到&#xff0c;路径出现了问题 首先看dist下我们该文件的路径 所以我们需要将该路径配置到我们project.config.json文件中去 在这里新加下面这行代码就可以了&#xff0c; "miniprogramRoot": "dist/dev/mp-weixi…

【蓝桥杯选拔赛真题73】Scratch烟花特效 少儿编程scratch图形化编程 蓝桥杯创意编程选拔赛真题解析

目录 scratch烟花特效 一、题目要求 编程实现 二、案例分析 1、角色分析

16种数据分解方法任意挑选,MATLAB代码,实现数据分解自由,一次性全部带走,速看!...

目录 16种常用的数据分解方法 EMD(经验模态分解) EEMD(集合经验模态分解) CEEMD(互补集合经验模态分解) FEEMD(快速EEMD分解) CEEMDAN(完全自适应噪声集合经验模态分解) ICEEMDAN(改进的自适应噪声完备EEMD) LMD(局域均值分解) RLMD(鲁棒性局部均值分解) EWT(经验小波分解) VMD…

Kubernetes(K8s) Ingress介绍-08

Ingress介绍 在前面课程中已经提到&#xff0c;Service对集群之外暴露服务的主要方式有两种&#xff1a;NotePort和LoadBalancer&#xff0c;但是这两种方式&#xff0c;都有一定的缺点&#xff1a; NodePort方式的缺点是会占用很多集群机器的端口&#xff0c;那么当集群服务…

docker、docker-component安装

1.docker安装 #安装c环境 yum -y install gcc-c yum install -y yum-utils device-mapper-persistent-data lvm2 #添加yum的镜像地址 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum makecache fast #下载docker yum -y…

打印机文档被挂起无法打印怎么办?分享5个常见解决方法!

“我需要打印一份比较紧急的文件&#xff0c;但是当我需要用到打印机时&#xff0c;却发现打印机显示文档被挂起&#xff0c;根本就无法打印。这是为什么呢&#xff1f;我怎么解决打印机文档被挂起的问题呢&#xff1f;” 在我们的工作和学习中&#xff0c;可能经常需要使用打印…

宝宝洗衣机哪个牌子质量好?婴儿专用洗衣机推荐

对于宝妈来说有一款小型可以自动杀菌的洗衣机真的非常重要。我们日常生活中一般会把一些贴身衣物和较特殊的面料的衣物用于手洗&#xff0c;而手洗的过程会相对来说比较麻烦&#xff0c;而且还可能洗不干净&#xff0c;而传统的洗衣机采用了双缸式容易滋生霉菌&#xff0c;容易…

帆软报表不能增加SAP连接方式 通过插件一致性检测 同步至本地解决

帆软报表开发人员需要增加一个SAP数据连接方式&#xff1a;SAP_ECC_600环境 在服务器端不能直接增加&#xff0c;而在帆软报表设计器切换到远程模式时&#xff0c;又不能显示SAP连接&#xff0c;导致不能增加。 解决&#xff1a;重新进入帆软报表报计器时报以下错误&#xff0c…

vue2+typescript使用高德地图2.0版本

高德地图 webjs api 2.0官网教程 AMap.Driving使用说明 <div class"mmp"><div id"map" ref"mapcontainer"></div></div><script lang"ts"> //安全密钥 window._AMapSecurityConfig{securityJsCode: &qu…