作为一种有趣的棋盘游戏,数独诞生100周年之后,它是如何成为计算研究的焦点之一的呢?探索如何使用人工智能或量子计算机从头开始创建一个智能数独求解器。

在深入探究之前,先来了解一下历史

马克•布洛赫说:“历史被称为学科之母。”那么,让我们来谈谈著名的数独游戏是如何诞生的吧。这个故事可以追溯到19世纪末,起源于法国。法国日报《世纪报》(Le Siecle)发布了一款9x9大小的猜谜游戏,它需要算术运算而不是逻辑运算,它的数字是两位数,而不是1- 9。它的游戏性质与数独游戏(Sudoku)类似,即把横排、列和对角线的数字相加,也会得到相同的数字。1979年,退休的建筑师和puzzler Howard Garns被认为是现代数独游戏的创造者,该游戏以数字地名的名义首次在戴尔杂志上发表。1986年,日本一家名为Nikoli的拼图公司首次以Sudoku的名字出版了这个拼图。

在解决数独游戏的问题框架

数独是一个约束满足问题(CSP)的真实例子,因为变量集、域集和约束集都是有限的。我们必须在一个9x9表中输入1-9之间的数字,这样每一行、每列和每3x3子表中的数字都只包含一个数字。 Sudoku也存在另一种变化,即Diagonal Sudoku,它在表对角线的每个对角线中都规定了一组额外的约束,每个数字必须准确地具有一次特征。 我们知道约束满足域,最优解必须满足所有约束,或更具体地说,它应该遵守游戏规则。 最优解将满足集合中的所有约束,从而解决难题。

计算上,可以用非确定性多项式时间(NP)解决求解数独的约束,因为可以使用一些非常特殊的蛮力算法来解决约束,并且也可以在多项式时间内测试解集的有效性,其中输入 该问题与多项式长度的一组解有关。 完全解决的数独就是拉丁方格的示例(如Euler所述,n x n数组填充有n个不同的符号)。 数独问题可以认为是图形着色问题,其中我们仅需要使用9种颜色对图形进行着色,而裸露的字母可以认为是部分颜色。

使用人工智能算法集满足约束

计算科学的基本原理是依靠逻辑来满足某些约束的能力。 在解决数独问题时,我们必须训练求解器以寻找除基本规则外的一些特定的获胜模式。 因此,问题在于系统不仅在盲目地遵循规则,而且在考虑其近期和长期影响的同时做出一些决策。 这些模式称为启发式。 类似于巧遇游戏知识和技巧的专家玩家,仅了解基本规则并不能使他们成为游戏专家。 因此,当我们开发算法并解决问题时,我们必须牢记有用的启发式方法,我们还应将其包含在程序中,以使其在获胜时变得更聪明,更有用。

对于我们的Sudoku Solver,我们将输入81个数字的序列作为字符串,并用’。’(句号)表示未解决的数字。 为了解决该问题,我们将“。”替换为可以放入该单元格的所有可能数字。

根据数独的限制,我们不能在任何单元格附近的行,列或3x3子正方形中多次使用一个数字。 在对角数独的情况下,我们还必须考虑相同的约束。 我们首先用所有可能的数字1到9替换句点。我们使用以下grid_values函数以编程方式进行此操作。

# For the sake of caluclation we take rows as alphaneumeric and columns as numeric. 
rows = 'ABCDEFGHI' 
columns = '123456789'
boxes = [r + c for r in rows for c in columns]  #every possible cell combination in the grid.def grid_values(grid):"""Take in the Unsolved Sudoku Sequence and replaces the unsolved boxes initially with allpossible values which can get into that cell. Lastly returns a dictionary containing the values at all cell positions along with cells. """values = []every_digits = '123456789'for n in grid:if c == '.':   # replacing every unsolved value with every possible value initially.values.append(every_digits)else:          # if already solved, causing it no change. values.append(c)assert len(values) == 81return dict(zip(boxes, values)) #returning the sudoku grid with all possible cell values. 

首先在所有未解决的单元格中分配所有可能的值。

现在,我们用1到9之间的所有可能数字替换了未解决的单元格,从数独的基本规则中我们知道,如果数字已经在该行,列和3x3子字段中使用过,我们就不能使用它两次。 因此,让我们消除它们,如果我们在未解决的网格中遇到它们时,我们最初已经用所有可能的数字填充了它们。 因此,让我们看一下如何使用消除python方法从未解决的单元中消除那些不相关的数字。

columns_reversed = columns[::-1] #reversing the columns for calculating the Diagonal Units.def make_combinations(m, n):"""Takes in input of generally iterables and creates all possible combintation out of them.args:a: string iterableb: string iterablereturn : list of all possible combination. """return [x + y for x in m for y in n]row_units = [make_combinations(r, columns) for r in rows]
column_units = [make_combinations(rows, c) for c in columns]
sub_square_units = [make_combinations(m, n) for m in ('ABC', 'DEF', 'GHI') for n in ('123','456','789')]
diagonal_1_units = [[rows[i]+columns[i] for i in range(len(rows))]]
diagonal_2_units = [[rows[i]+columns_reversed[i] for i in range(len(rows))]]
diagonal_units = diagonal_1_units + diagonal_2_units
all_units = row_units + column_units + square_units + diagonal_units
units = dict((b, [u for u in all_units if b in u]) for b in boxes)
peers = dict((b, set(sum(units[b], [])) - {b}) for b in boxes)def eliminate(values):"""Eliminate the redundant numbers from the unsolved cells if the number already appeared once in the peer of the current cell. What we do here is we erase that redundant number from the unsolved value cells if appeared once. """solved_cells = [box for box in values.keys() if len(values[box]) == 1] # cell is solved if there's only one digitfor box in solved_cells:value_at_cell = values[box]   # retrieve the current value at that cell.for peer in peers[box]:       # check for the cell's peers if the value appears again.values[peer] = values[peer].replace(value_at_cell, '')return values   # return the modified values dictionary.

因此,在满足这些约束的同时,有时我们会遇到一些只能放置一个数字的单元格,但除该数字外,其他数字对于该特定单元格都不再可行。 我们首先要填写这些内容。 有了适当的解决方案。 我们称此为“唯一选择”,它是解决数独网格单元的最简单的启发式方法。

def only_choice(values):"""If in order to satisfy the constraints of the Sudoku Puzzle there is only a single viable optionwe fill in the Cell with that option only and thereby obtain a solve for the cell. """for unit in all_units:     #searching across all the vicinity of the cell.for digit in '123456789':  to_be_filled = [cell for cell in unit if unit in values[unit]]if len(to_be_filled) == 1:  # if there exists only a single cell in the unit which is not solvedvalues[to_be_filled[0]] = digit  # We fill in the cell with its proper answer.    return values

在迄今为止围绕约束满足的过程中,可能会出现以下情况:一个单元中将有两个未解决的像元(考虑行,列和3x3子正方形),其中只能分配两个特定的剩余数。 因此,这两个数字可以有效地从同一单元中其他单元格上的可能数字中删除。 这种启发式方法称为裸双胞胎。 该算法的实现专门制作了网格值的深层副本,并检查了裸胎双胞胎的可行性,即是否存在两个仅能接受两个特定值的未解决像元,如果可行,它将继续进行并从其他两个值中删除这两个值 同一单元中的单元格。 我们使用如下所示的nude_twins函数以编程方式实现它:

def naked_twins(values):"""If there are two unsolved cells in a same unit exist such that it can only be filled by only two specific digits, then those two digits can be safely removed from all other cells in the same unit."""twins_possible = [unit for unit in values.keys() if len(values[unit]) == 2]  twins = [[unit1, unit2] for unit1 in twins_possible for unit2 in peers[unit1] if set(values[unit1]) == (set(values[unit2]))]    #confimed Naked Twinsfor twin in twins:unit1 = twin[0] unit2 = twin[2]peers1 = set(peers[unit1])  peers2 = set(peers[unit2])common_peers = peers1 & peers2  #finding the intersection between the peers of the two naked twin elementfor peer in common_peers:if len(values[peer]) >  1:for value in values[unit1]:values[peer] = values[peer].replace(val, ''))  # Erasing the values. return values

现在,我们尝试通过重复应用这三个约束满足算法并检查它是否卡住并且无法进一步减少,来尽可能地减少难题。 我们通过使用reduce_puzzle函数以编程方式执行此操作。 我们要做的是在for循环中调用前三个函数,并在网格值的输入和输出序列中的已解决单元数相同时终止该函数,这意味着不能再进一步减小它 仅约束满足算法。

def reduce_puzzle(values):"""Applying the 4 Constraint Satisfaction Algorithms until it is not further reducible. Checking if the Number of Solved Cells between the iteration."""solved_values = [unit for unit in values.keys() if len(values[unit]) == 1] # considering solved cellsstuck = False #boolean flag to determine the end of loopwhile not stuck:prev_solved_values = len([unit for unit in values.keys() if len(values[unit]) == 1]) #checkpoint 1values = eliminate(values) # applying Elimination CSPvalues = only_choice(values) # applying Only Choice CSPvalues = naked_twins(values)  # applying Naked Twins CSPafter_solved_values = len([unit for unit in values.keys() if len(values[unit]) == 1])stuck = after_solved_values == prev_solved_values  # Getting out of loop is the number of solved cell is still the same as the previous iteration.if len([unit for unit in values.keys() if len(values[unit]) == 0]):return False   # if there's problems in the internal representation of the sudoku grid return False. return values			# return the reduced grid values. 	

如果数独网格仍未通过约束满足问题解决,则部分解决方案将到达输出,其中一些单元格仍将分配给某些可能的值。 在这种情况下,我们要做的是使用搜索树搜索那些位置中的最佳数字集。 我们使用深度优先搜索(DFS)算法遍历搜索树。 因此,基本上,使用DFS,我们用相同的网格创建了几个实例,并为每个尚未解决的单元尝试了不同的可能分配。 我们递归地要求CSP算法根据搜索结果减少网格。 我们以编程方式实现它,如下所示:

def search(values):"""Recursive Depth-First Search: If the sudoku grid is not further reducible by constraint satisfactiona few of the cells will be left with different options and with DFS with search for the optimal values for those yet-unsolved cells.  """values = reduce_puzzle(values) # We call the Reduction Function to reduce the puzzle further based on the search results across iterations. if values is False:return Falseif all(len(values[b]) == 1 for b in boxes):print("Sudoku Problem Solved!")return valuesm, n = min((len(values[b]), b) for b in boxes if len(values[b]) > 1)for value in values[n]:new_sudoku = values.copy()new_sudoku[n] = valueattempted = search(new_sudoku)if attempted:return attempted		

我们使用display sudoku函数将输入的字符串序列显示为二维9x9 Sudoku网格:

def display(values):"""Display the values as a 2-D grid.Input: The sudoku in dictionary form"""width = 1 + max(len(values[b]) for b in boxes)line = '+'.join(['-' * (width * 3)] * 3)for r in rows:print(''.join(values[r + c].center(width) + ('|' if c in '36' else '')for c in cols))if r in 'CF':print(line)return

为了解决数独序列,我们将上述函数调用如下:

if __name__ == "__main__":diag_sudoku_grid = '2.............62....1....7...6..8...3...9...7...6..4...4....8....52.............3'values = grid_values(diag_sudoku_grid)values = reduce_puzzle(values)values = search(values)display(values)

输出如下所示,其中一组算法已成功计算出答案。

解决数独作为约束满足问题的量子方法

现在,我们将尝试使用“量子模拟退火”解决简单的Sudoku网格。 首先,什么是模拟退火? 对于这样的优化问题,我们的想法是使用一些次优启发式算法,并获得最优的启发式算法集以获得最优解。 我们在这里使用DWave AQC模型(糖尿病量子计算)来采样满足前面讨论的约束的最佳解决方案。…

使用DWave Kerberos混合采样器:

在本示例中,我们正在使用DWave随附的混合求解器。 它通过运行并行搜索来找出最佳的启发式方法。 它是一种混合求解器,因为它同时使用了量子计算和经典的计算特性。 它也是一个分解采样器,在处理时使用异步工作流。 它包含在DWave Systems的Ocean SDK软件包中。 要开始本地开发,请确保您的系统上安装了Python 3.5+,然后发出以下命令。

python -m pip install --upgrade pip
pip install dwave-ocean-sdk

使用二进制二次模型(BQM)进行计算

我们无法构造直接准备将其馈送到Quantum Computers的约束,我们需要一个中间表示来将其馈入。 这就是为什么我们将使用BQM的原因,幸运的是,DWave Ocean SDK已经提供了一种称为“组合”的工具,可用于将约束满足问题归结为BQM。 首先,顾名思义,二进制二次模型本身就是一个方程系统,它是二次的,用二进制表示。 由于计算的复杂性更高,Quantum计算机使用这些计算可以大大加快开发过程。 因此,在游戏中,我们决定使用dimod的组合工具,该工具将返回一个二进制二次模型,该模型对于其输入变量和内部变量的k个组合中的每一个均最小。

我们首先从dwave-ocean-sdk导入必要的软件包,并在实际读入Sudoku Grid之前进行一些完整性检查。

import dimod  
import math 
import sys
import dimod.generators.constraints import combinations
from hybrid.reference import KerberosSamplerdef prettify(row, col, digit):return "{row}, {col}_{digit}".format(row, col, digit)def read_matrix(filename):with open(filename, 'r') as f:all_lines = f.read()lines = []for line in all_lines:new_line = line.rstrip()if new_line:new_line = list(map(int, new_line.split(' ')))lines.append(new_line)return lines def sanity_check(matrix):n = len(matrix)m = int(math.sqrt(n))unique_digits = set(range(1, 1+n))for row in matrix:if set(row) != unique_digits:print("Error in row", row)return falsefor j in range(n):col = [matrix[i][j] for i in range(n)]if set(col) != unique_digits:print("Error in column", col)subsquare_idx = [(i, j) for i in range(m) for j in range(m)]for r_scalar in range(m):for c_scalar in range(m):subsquare = [matrix[i + r_scalar * m ][j + c_scalar * m] for i, j in subsquare_idx]if set(subsquare) != unique_digits:print('Error in sub-square', subsquare)return Truereturn True

现在,我们使用Sudoku Grid的行,列和子正方形索引的所有可用变量组合,使用组合工具来创建二进制二次模型。

def main():if len(sys.argv) > 1:filename = sys.argv[1]matrix = read_matrix(filename)n = len(matrix)m = int(math.sqrt(n))digits = range(1, n+1)bqm = dimod.BinaryQuadraticModel({}, {}, 0.0, dimod.SPIN)for row in range(n):for col in range(n):node_digits = [prettify(row, col, digit) for digit in digits]one_digit_bqm = combinations(node_digits, 1)bqm.update(one_digit_bqm)for row in range(n):for digit in digits:row_nodes = [prettify(row, col, digit) for col in range(n)]row_bqm = combinations(row_nodes, 1)bqm.update(row_bqm)for col in range(n):for digit in digits:col_nodes = [prettify(row, col, digit) for row in range(n)]col_bqm = combinations(col_nodes, 1)bqm.update(col_bqm)if __name__ == "__main__":main()

就是这样。 我们已经成功实现了两种智能解决方案,其中一种使用经典计算,并且使用了功能非常强大的人工智能启发式算法,甚至可以解决对角数独网格。 第二种方法使用异步混合启发式采样器,该采样器也恰好使用绝热量子计算模型的模拟退火来将约束满足问题转换为二进制二次模型以对其进行采样,从而获得最佳采样解。

作者:Swastik Nath

deephub翻译组

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 杭州焊接接头超声波无损探伤检测

    超声波探伤是利用材料及其缺陷的声学性能差异对超声波传播波形反射情况和穿透时间的能量变化来检验材料内部缺陷的无损检测方法。 脉冲反射法在垂直探伤时用纵波,在斜射探伤时用横波。脉冲反射法有纵波探伤和横波探伤。在超声波仪器示波屏上,以横坐标代表…...

    2024/4/27 13:50:21
  2. vmware esxi 找不到网卡驱动,硬盘的解决方法

    vmware esxi 找不到网卡驱动,硬盘的解决方法参考文章: (1)vmware esxi 找不到网卡驱动,硬盘的解决方法 (2)https://www.cnblogs.com/z-books/p/5610848.html 备忘一下。...

    2024/4/28 8:39:24
  3. 徐州金属无损探伤X射线拍片无损现场检测

    X射线探伤检查,主要应用于金属、非金属的无损检测。其作用不但要检测设备(构件)有无缺陷,而且要判断缺陷的性质、部位、分布及危害程度,还要对其寿命、使用性能、缺陷的发展趋势等进行预测、监控和评价,它为…...

    2024/4/27 9:56:00
  4. 城市地图, 军事地图, 矿山地图, 电力地理, 电子地图, 制图, 编辑, OCX控件, VC++源代码组件库2020!

    使用E-Form开发任何基于电子地图,军事模拟,电力地图以及电信地图方面的系统都是最佳选择,E-Form提供了为常用的地图操作,绘制,编辑,事件响应等提供了全面的支持。为您节省大量的开发时间。 下载此解决方案 …...

    2024/4/26 13:30:53
  5. LeetCode12

    LeetCode12整数转罗马数字 对于这种算法题: 一、如果题目要求所表示的数比较小的时候,我们可以采用硬编码处理也就是我们通常所说的暴力解法。 二、贪心算法,每次都需要找到最大的罗马数字来表示整数。一、贪心算法 先从罗马数到整数开始: …...

    2024/4/7 13:43:17
  6. LeetCode 不只是题解(2.两数相加[中等])

    LeetCode 不只是题解(2.两数相加[中等]) 题目 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。 如果,我们将这两个数相加起来&…...

    2024/4/26 13:33:08
  7. 服务API设计 之 API命名规范

    API命名规范 命名风格 面向资源 同RESTful命名风格 在大型系统中,常以"业务领域"视角进行模块划分,以达到业务"高内聚低耦合"的效果。 "业务领域"必有"数据对象"沉淀,从宏观抽象的角度看&#xff…...

    2024/4/7 13:43:15
  8. 经典C语言程序100例之六四

    【程序64】 题目:利用ellipse and rectangle 画图。 1.程序分析: 2.程序源代码: #include “stdio.h” #include “graphics.h” #include “conio.h” main() { int driverVGA,modeVGAHI; int i,num15,top50; int left20,right50; initgraph…...

    2024/4/28 10:10:40
  9. 网络安全(基础篇)【面试】

    网络安全 1 XSS 跨⽹站指令码(英语: Cross-site scripting ,通常简称为: XSS )是⼀ 种⽹站应⽤程式的安全漏洞攻击,是代码注⼊的⼀种。它允许恶意使⽤者将程 式码注⼊到⽹⻚上,其他使⽤者在观看…...

    2024/4/28 0:18:49
  10. 创意求职竞聘岗位竞选竞聘报告个人简历PPT动态模板_28847

    ppt模版【岗位竞聘】创意求职竞聘岗位竞选竞聘报告个人简历PPT动态模板_28847 简介如下: 百度云盘:https://pan.baidu.com/s/197xUuKjNu67MYe7fY80_sQ;提取码:abc1 PPT演讲模板的重要性,不用多说各位职场人士都应该知道…...

    2024/4/26 13:33:08
  11. windows 上网重新刷新IP

    具体操作步骤: 1、winR,输入"cmd"并按回车键。 2、在命令提示符窗口中,输入:ipconfig,并按回车,该命令将返回你当前的IP地址。 3、在命令提示符窗口中,输入:ipconfig /rel…...

    2024/5/2 19:05:43
  12. 服务API设计 之 API参数规范

    文章目录【强制】字段名称用小驼峰风格【强制】Service API返回值必须使用Response包装【强制】杜绝完全不规范的缩写,避免望文不知义。(国际通用缩写除外)【强制】禁止使用 Map 作为参数类型【强制】业务对象/查询条件用DTO封装,…...

    2024/4/28 7:51:20
  13. C++知识点33——使用C++标准库(无序关联容器unordered_(multi)map,unordered_(multi)set)

    C中,无序关联容器一共有4个,unordered_map,unordered_set,unordered_multimap,unordered_multiset 这四个和有序关联容器最大的区别就是无需关联容器没有根据key或者value进行排序,内部元素是无序的&#…...

    2024/4/27 20:37:46
  14. 关于Zabbix的mysql数据库定时删除的说明

    关于Zabbix的mysql数据库定时删除的说明 ** zabbix使用mysql作为后台数据库,使用过程中mysql数据库会随着时间的推移而逐渐增大,而磁盘不可能无限大,所以定时删除历史数据显得额外重要. ** 本文介绍如何使用mysql事件完成定时删除&#xff…...

    2024/4/27 3:56:23
  15. Go语言 以TDD思想实现快排

    Go语言 以TDD思想实现快排一、什么是TDD TDD是测试驱动开发(Test-Driven Development)的英文简称,是敏捷开发中的一项核心实践和技术,也是一种设计方法论。TDD的原理是在开发功能代码之前,先编写单元测试用例代码&…...

    2024/4/7 9:47:29
  16. Js中setTimeout和setInterval的区别

    settimeout(表达式,延迟时间); 单位:ms(毫秒);1s1000ms; setinterval(表达式,交互时间);  单位:ms(毫秒);1s1000ms;  window.settimeout() 在执行时,它从载入后延迟指定的时间去执行一个表达式或者是函数;仅执行一次;和window.cleartim…...

    2024/4/29 5:47:19
  17. 常用的FTP软件及优缺点分析

    1、Server-U Serv-U是一种被广泛运用的FTP服务器端软件,server-u支持9x/ME/NT/2K/2000/xp等全Windows系列。可以设定多个FTP服务器、限定登录用户的权限、登录主目录及空间大小等,功能非常完备。 它具有非常完备的安全特性,支持SSl FTP传输&…...

    2024/4/29 2:26:16
  18. Redis基础补充--学习笔记

    事务 Redis事务的本质:一组命令的集合 一次性、顺序性、排他性 Redis单条命令是保证原子性的,但是事务不保证原子性Redis事务没有隔离级别的概念 所有的命令在事务中,并没有直接被执行,只有发起执行命令的时候才会执行 执行事务…...

    2024/4/28 7:29:15
  19. 容器云平台No.10~通过gogs+drone+kubernetes实现CI/CD

    什么是CI/CD 持续集成(Continous Intergration,CI)是一种软件开发实践,即团队开发成员经常集成它们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都需要通过自动化的编…...

    2024/4/7 13:43:07
  20. 工业路由器下的冷链车监控解决方案

    冷链车作为冷链物流中最重要的装置之一,保障冷冻类食品在运输过程中,保持稳定的低温环境,让食品在生产、存储、运输、销售过程中不受环境温度升高影响,保证食品质量,减少食品损耗。 对于冷链车来说,如果冷藏…...

    2024/4/26 19:12:00

最新文章

  1. 【Transformer系列(3)】cross attention(交叉注意力)

    一、cross attention和self-attention的不同 Cross attention和self-attention是在自然语言处理中常用的两种注意力机制。 Self-attention是一种自我关注机制,用于计算输入序列中每个元素与其他元素的关联程度。具体来说,对于给定的输入序列&#xff0…...

    2024/5/3 14:08:10
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. 鹅厂实习offer

    #转眼已经银四了,你收到offer了吗# 本来都打算四月再投实习了,突然三月初被wxg捞了(一年前找日常实习投的简历就更新了下),直接冲了,流程持续二十多天,结果是运气还不错,应该是部门比…...

    2024/5/1 13:19:09
  4. CSS3 高级- 复杂选择器、内容生成、变形(transform)、过渡(transition)、动画(animation)

    文章目录 一、复杂选择器兄弟选择器:选择平级元素的唯一办法属性选择器:1、通用:基本用不着,太泛了2、自定义:4种伪类选择器:1、目标伪类:2、结构伪类:3、元素状态伪类:4、伪元素选择器:应用于文字,使网页看起来想杂志5、否定伪类:选择器:not([本选择器的条件]) /*…...

    2024/5/3 10:26:16
  5. 416. 分割等和子集问题(动态规划)

    题目 题解 class Solution:def canPartition(self, nums: List[int]) -> bool:# badcaseif not nums:return True# 不能被2整除if sum(nums) % 2 ! 0:return False# 状态定义:dp[i][j]表示当背包容量为j,用前i个物品是否正好可以将背包填满&#xff…...

    2024/5/3 11:50:27
  6. 【Java】ExcelWriter自适应宽度工具类(支持中文)

    工具类 import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet;/*** Excel工具类** author xiaoming* date 2023/11/17 10:40*/ public class ExcelUti…...

    2024/5/2 16:04:58
  7. Spring cloud负载均衡@LoadBalanced LoadBalancerClient

    LoadBalance vs Ribbon 由于Spring cloud2020之后移除了Ribbon,直接使用Spring Cloud LoadBalancer作为客户端负载均衡组件,我们讨论Spring负载均衡以Spring Cloud2020之后版本为主,学习Spring Cloud LoadBalance,暂不讨论Ribbon…...

    2024/5/2 23:55:17
  8. TSINGSEE青犀AI智能分析+视频监控工业园区周界安全防范方案

    一、背景需求分析 在工业产业园、化工园或生产制造园区中,周界防范意义重大,对园区的安全起到重要的作用。常规的安防方式是采用人员巡查,人力投入成本大而且效率低。周界一旦被破坏或入侵,会影响园区人员和资产安全,…...

    2024/5/2 9:47:31
  9. VB.net WebBrowser网页元素抓取分析方法

    在用WebBrowser编程实现网页操作自动化时,常要分析网页Html,例如网页在加载数据时,常会显示“系统处理中,请稍候..”,我们需要在数据加载完成后才能继续下一步操作,如何抓取这个信息的网页html元素变化&…...

    2024/5/3 11:10:49
  10. 【Objective-C】Objective-C汇总

    方法定义 参考:https://www.yiibai.com/objective_c/objective_c_functions.html Objective-C编程语言中方法定义的一般形式如下 - (return_type) method_name:( argumentType1 )argumentName1 joiningArgument2:( argumentType2 )argumentName2 ... joiningArgu…...

    2024/5/2 6:03:07
  11. 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】

    👨‍💻博客主页:花无缺 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】🌏题目描述🌏输入格…...

    2024/5/2 9:47:30
  12. 【ES6.0】- 扩展运算符(...)

    【ES6.0】- 扩展运算符... 文章目录 【ES6.0】- 扩展运算符...一、概述二、拷贝数组对象三、合并操作四、参数传递五、数组去重六、字符串转字符数组七、NodeList转数组八、解构变量九、打印日志十、总结 一、概述 **扩展运算符(...)**允许一个表达式在期望多个参数&#xff0…...

    2024/5/2 23:47:43
  13. 摩根看好的前智能硬件头部品牌双11交易数据极度异常!——是模式创新还是饮鸩止渴?

    文 | 螳螂观察 作者 | 李燃 双11狂欢已落下帷幕,各大品牌纷纷晒出优异的成绩单,摩根士丹利投资的智能硬件头部品牌凯迪仕也不例外。然而有爆料称,在自媒体平台发布霸榜各大榜单喜讯的凯迪仕智能锁,多个平台数据都表现出极度异常…...

    2024/5/3 13:26:06
  14. Go语言常用命令详解(二)

    文章目录 前言常用命令go bug示例参数说明 go doc示例参数说明 go env示例 go fix示例 go fmt示例 go generate示例 总结写在最后 前言 接着上一篇继续介绍Go语言的常用命令 常用命令 以下是一些常用的Go命令,这些命令可以帮助您在Go开发中进行编译、测试、运行和…...

    2024/5/3 1:55:15
  15. 用欧拉路径判断图同构推出reverse合法性:1116T4

    http://cplusoj.com/d/senior/p/SS231116D 假设我们要把 a a a 变成 b b b,我们在 a i a_i ai​ 和 a i 1 a_{i1} ai1​ 之间连边, b b b 同理,则 a a a 能变成 b b b 的充要条件是两图 A , B A,B A,B 同构。 必要性显然&#xff0…...

    2024/5/2 9:47:28
  16. 【NGINX--1】基础知识

    1、在 Debian/Ubuntu 上安装 NGINX 在 Debian 或 Ubuntu 机器上安装 NGINX 开源版。 更新已配置源的软件包信息,并安装一些有助于配置官方 NGINX 软件包仓库的软件包: apt-get update apt install -y curl gnupg2 ca-certificates lsb-release debian-…...

    2024/5/2 9:47:27
  17. Hive默认分割符、存储格式与数据压缩

    目录 1、Hive默认分割符2、Hive存储格式3、Hive数据压缩 1、Hive默认分割符 Hive创建表时指定的行受限(ROW FORMAT)配置标准HQL为: ... ROW FORMAT DELIMITED FIELDS TERMINATED BY \u0001 COLLECTION ITEMS TERMINATED BY , MAP KEYS TERMI…...

    2024/5/3 1:55:09
  18. 【论文阅读】MAG:一种用于航天器遥测数据中有效异常检测的新方法

    文章目录 摘要1 引言2 问题描述3 拟议框架4 所提出方法的细节A.数据预处理B.变量相关分析C.MAG模型D.异常分数 5 实验A.数据集和性能指标B.实验设置与平台C.结果和比较 6 结论 摘要 异常检测是保证航天器稳定性的关键。在航天器运行过程中,传感器和控制器产生大量周…...

    2024/5/2 8:37:00
  19. --max-old-space-size=8192报错

    vue项目运行时,如果经常运行慢,崩溃停止服务,报如下错误 FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 因为在 Node 中,通过JavaScript使用内存时只能使用部分内存(64位系统&…...

    2024/5/2 9:47:26
  20. 基于深度学习的恶意软件检测

    恶意软件是指恶意软件犯罪者用来感染个人计算机或整个组织的网络的软件。 它利用目标系统漏洞,例如可以被劫持的合法软件(例如浏览器或 Web 应用程序插件)中的错误。 恶意软件渗透可能会造成灾难性的后果,包括数据被盗、勒索或网…...

    2024/5/2 9:47:25
  21. JS原型对象prototype

    让我简单的为大家介绍一下原型对象prototype吧! 使用原型实现方法共享 1.构造函数通过原型分配的函数是所有对象所 共享的。 2.JavaScript 规定,每一个构造函数都有一个 prototype 属性,指向另一个对象,所以我们也称为原型对象…...

    2024/5/2 23:47:16
  22. C++中只能有一个实例的单例类

    C中只能有一个实例的单例类 前面讨论的 President 类很不错,但存在一个缺陷:无法禁止通过实例化多个对象来创建多名总统: President One, Two, Three; 由于复制构造函数是私有的,其中每个对象都是不可复制的,但您的目…...

    2024/5/2 18:46:52
  23. python django 小程序图书借阅源码

    开发工具: PyCharm,mysql5.7,微信开发者工具 技术说明: python django html 小程序 功能介绍: 用户端: 登录注册(含授权登录) 首页显示搜索图书,轮播图&#xff0…...

    2024/5/3 7:43:42
  24. 电子学会C/C++编程等级考试2022年03月(一级)真题解析

    C/C++等级考试(1~8级)全部真题・点这里 第1题:双精度浮点数的输入输出 输入一个双精度浮点数,保留8位小数,输出这个浮点数。 时间限制:1000 内存限制:65536输入 只有一行,一个双精度浮点数。输出 一行,保留8位小数的浮点数。样例输入 3.1415926535798932样例输出 3.1…...

    2024/5/3 1:54:59
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57