宽度优先遍历(bfs)(2)——fllodfill算法
欢迎来到博主的专栏:算法解析
博主ID:代码小豪
文章目录
- floodfiil算法
- leetcode733——图像渲染
- 题目解析
- 算法原理
- 题解代码
- leetcode130——被围绕的区域
- 题目解析
- 算法原理
- 题解代码
floodfiil算法
floodfill算法,在博主这里看来则是一个区域填充算法,具体来说则是在一个m*m的网格当中。每个网格中都要一个权值,这些权值可能相同,也可能不同,根据网格中的权值,做出填充的操作。
leetcode733——图像渲染
题目解析
以示例1为例:
从(1,1)的方格开始。将(1,1)临近的与(1,1)相同权值的网格,包括临近的网格的临近网格,全覆盖成新的权值。
比如(1,1)附近的网格有(1,0),(0,1)与(1,1)具有相同的权值,对于网格(1,0),有临近的(0,0)(2,0)网格具有相同权值,以此类推。直到所有符合条件的网格都被覆盖为止。
算法原理
我们回顾一下整个过程,对于(1,1)网格,我们要对其上下左右(即(0,1),(2,1),(1,0),(1,2))进行颜色覆盖,然后对符合要求的网格重复
进行这个操作。注意重复这个字。这意味着我们找到了一个重复的最小子问题,因此我们可以用dfs来完成这个操作,但是这篇博客并不是用dfs章节,因此不讲。
既然是重复的子问题,我们尝试可以画出一个决策树,我们规定f(i,j)。是对(i,j)网格染色,然后进行一次临近网格的染色。根据题意,如果临近网格的权值与(i,j)不同,那么就不会对该网格进行染色。这意味着我们需要对决策树进行剪枝。
示例1的决策树如下:
那么既然有一个树状的结构,那么我们就可以层序遍历整个决策树。这个决策树其实是为了让大家对宽度优先遍历的原理有一个有另一个认识。在后续bfs专题的博客中,博主将不用再用决策树来做bfs的题。
所谓的bfs(宽度优先遍历)和dfs(深度优先遍历)其实都是对决策树进行遍历,不同的要求决定了我们到底是采取bfs还是dfs。比如算法如果是要求快速到达决策树的叶节点,我们就采用dfs。比如排列组合问题,而如果要求我们尽可能先遍历非叶结点,则采取bfs。比如后续章节的中最短路径问题,拓扑排序等。
像在floodfill算法问题上,使用bfs或者dfs并没有太大区别。
最后就是如何使用bfs算法,其实这里已经很明显了,我们对决策树进行一次层序遍历就是bfs算法。因此算法原理可以参考上一篇bfs博客。这里只讲方法,不讲层序遍历的原理。
(1):我们将决策树的根节点(即题目要求中的起点)放入队列。
(2):进入循环
(3):将队头节点出队列,将该节点对应的网格进行颜色覆盖。
(4):接着将队头节点的所有子节点入队列。(可能的子节点是该子节点中的上下左右节点)
(5)当队列为空时,结束循环
这里有个小细节,就是假设(x,y)网格是入队列的节点,那么它可能的子节点有(x+1,y),(x-1,y)(x,y+1),(x,y-1)。那么对于上面的节点来说,(x,y)也是它们的子节点,比如(x+1,y)是(x,y)的右边,那么对应的(x,y)在(x+1,y)的左边。那么我们就有可能进入死循环。因为假设(x,y)出队列,(x+1,y)入队列。那么当(x+1,y)出队列时,(x,y)可能入队列。以此类推,我们就进入一个死循环了。因此,我们要避免已经入队列的节点重复进入队列当中。
那么我们可以采用下面两种操作:
(1)修改出队列节点的权值。
(2)用哈希表或者vector<vector<bool>>
标记出队列节点。
由于本题要求我们修改出队列节点的权值,因此我们采取方法1,这两个方法博主都会在本篇当中提到。
还有一个细节就是入队列的节点必须是合法的,比如当前网格如果是5*5.那么对于节点(5,6)这是不存在于网格当中的方块。因此不进入队列。
题解代码
class Solution {
private:int dx[4]={1,-1,0,0};//对应x-1,x+1,x,xint dy[4]={0,0,1,-1};//对应y,y,y-1,y+1//比如(x+dx[0],y+dy[0])=(x+1,y)
public:vector<vector<int>> floodFill(vector<vector<int>>& image, int sr, int sc, int color) {queue<pair<int,int>> q;if(image[sr][sc]==color) return image;//如果覆盖的网格的原颜色,与覆盖颜色一致,就不需要操作了q.push({sr,sc});//将决策树的根节点入队列int target=image[sr][sc];int m=image.size(),n=image[0].size();//记录网格的长度和宽度while(q.size()){auto [x1,y1]=q.front();image[x1][y1]=color;//对当前格子进行染色q.pop();for(int k=0;k<4;k++){//临近的格子(上下左右)int x=x1+dx[k];int y=y1+dy[k];if(x>=0&&x<m&&y>=0&&y<n&&image[x][y]==target){//判断合法性,即剪枝q.push({x,y});}}}return image;}
};
leetcode130——被围绕的区域
题目解析
算法原理
如果我们继续用树来抽象理解bfs就不是很舒服了,因为在做题之前还得画画决策树,实际上对于网格问题,我们可以用网格的模型来替代决策树。
我们假设当前有一个16*16的网格,我们对中心位置进行bfs,假设题目规定一次只能向上,下,左,右进行访问。那么在中心位置的bfs会呈现如下的状态:
如果我们的题目要求是可以向左上,上,右上,左,右,左下,下,右下进行遍历,那就是这样的情况。
ok,让我们回到原题,题目中要求我们找到被‘X’围绕的’O’,并且让我们将被围绕的‘O’区域替换成‘X’。那么,我们只需要对被围绕的‘O’区域中的任意一个‘O’点进行一次fllodfill(bfs),就能将这些区域的所有‘O’替换成‘X’。但是问题来了,我们如何判断哪些区域会被‘X’围绕呢?
实际上如果我们按照这个思路做题,就会发现这个判断不是很好写。因此我们可以将思路反过来,如果找被‘X’围绕的区域不好找,那么我们尝试一下找不被‘X’围绕的区域呢?这其实就是用到了“正难则反”的数学思想。
那么满足什么条件的‘O’区域不被‘X’围绕呢?首先我们可以确定一点,在边界的‘O’点,不会被‘X’围绕。因为被‘X’围绕的判定条件是‘O’区域的上,下,左,右皆有‘X’点。但是在边界的‘O’点至少存在一个方向没有‘X’。
那么对于不在边界的‘O’点如何判断是否被‘X’围绕呢?很明显,如果该‘O’点对应的‘O’区域存在一个‘O’点位于边界,那么该‘O’区域一定不是被‘X’围绕的区域。
那么我们可以上来直接遍历边界,如果边界上存在‘O’点,那么我们就对该‘O’点做一次floodfill(bfs)算法、找到该‘O’点所在的‘O’区域。这片’O’区域都是不为‘X’围绕的区域。
为了使‘X’区域,被‘X’围绕的‘O’区域,以及不被‘X’围绕的‘O’区域区分开来,我们可以规定,让不被‘X’的’O’区域的点,置成‘A’。
如果是示例1,那么在完成对所有边界‘O’点进行floodfill算法之后,网格将会如此呈现:
接着我们遍历一遍网格,将网格中的‘O’置为‘X’,将网格中的‘A’,置为‘O’,这样就是完成了找到不被‘X’围绕的区域。最终将该网格进行返回。
最后也是补充一点小细节。我们要注意被bfs过的方格不能再次被遍历,这里我们可以设置一个与网格同等规模的vector<vector<bool>> vis,如果(i,j)参与了bfs。我们就将vis[i][j]设为true。即对其进行标记。
实际上由于我们可以将‘O’修改成‘A’,因此可以"权值修改法",但是由于我们这里用vis标记了被遍历过的方格。因此这里可以不用将‘O’修改成‘A’。
在完成所有操作后,将网格遍历一遍,如果网格中存在‘O’点,而且该点没有被标记过,则说明该点没有进行过floodfill,即该点是被‘X’围绕的区域。因此将其设为‘X’。
最后的最后,就是不要将越界的节点加入bfs当中。
题解代码
class Solution {
private:int dx[4]={0,0,1,-1};int dy[4]={1,-1,0,0};void floodfill(vector<vector<char>>& board,int i,int j){queue<pair<int,int>> q;q.push({i,j});while(q.size()){auto [x1,y1]=q.front();q.pop();for(int k=0;k<4;k++){int x=x1+dx[k];int y=y1+dy[k];if(x>=0&&x<m&&y>=0&&y<n&&board[x][y]=='O'&&vis[x][y]==false){q.push({x,y});vis[x][y]=true;}}}}
public: void solve(vector<vector<char>>& board) {m=board.size(),n=board[0].size();vis.resize(m,vector<bool>(n,false));for(int i=0;i<m;i++){if(board[i][0]=='O'&&vis[i][0]==false){//如果(i,0)是‘O’点,而且没有被遍历过vis[i][0]=true;floodfill(board,i,0);}if(board[i][n-1]=='O'&&vis[i][n-1]==false){//同上vis[i][n-1]=true;floodfill(board,i,n-1);}}for(int j=1;j<n-1;j++){if(board[0][j]=='O'&&vis[0][j]==false){vis[0][j]=true;floodfill(board,0,j);}if(board[m-1][j]=='O'&&vis[m-1][j]==false){vis[m-1][j]=true;floodfill(board,m-1,j);}}for(int i=0;i<m;i++){for(int j=0;j<n;j++){if(board[i][j]=='O'&&vis[i][j]==false){board[i][j]='X';}}}}
private:int m;int n;vector<vector<bool>> vis;//标记
};
相关文章:
宽度优先遍历(bfs)(2)——fllodfill算法
欢迎来到博主的专栏:算法解析 博主ID:代码小豪 文章目录 floodfiil算法leetcode733——图像渲染题目解析算法原理题解代码 leetcode130——被围绕的区域题目解析算法原理题解代码 floodfiil算法 floodfill算法,在博主这里看来则是一个区域填…...
嵌入式编译工具链熟悉与游戏移植
一、Linux 系统编译工具链使用与 mininim 源码编译 在 Ubuntu 系统上编译 mininim 开源游戏需要正确配置编译工具链和依赖库。以下是详细的操作步骤和故障解决方法: 1. 环境准备与源码获取 首先需要安装必要的编译工具和依赖库: # 更新系统软件包索引…...
STUN (Session Traversal Utilities for NAT) 服务器是一种网络协议
STUN (Session Traversal Utilities for NAT) 服务器是一种网络协议,主要用于帮助位于网络地址转换 (NAT) 设备(如路由器)后面的客户端发现自己的公共 IP 地址和端口号。这对于建立点对点 (P2P) 通信至关重要,尤其是在 VoIP&#…...
Transformer结构介绍
[编码器 Encoder] ←→ [解码器 Decoder] 编码器: 输入:源语言序列输出:每个词的上下文表示(embedding) 解码器:输入:目标语言序列编码器输出输出:下一个词的概率分布(目标句子生成)…...
SpringBoot扩展——应用Web Service!
应用Web Service Web Service是一个SOA(面向服务的编程)架构,这种架构不依赖于语言,不依赖于平台,可以在不同的语言之间相互调用,通过Internet实现基于HTTP的网络应用间的交互调用。Web Service是一个可以…...
5G核心网周期性注册更新机制:信令流程与字段解析
一、周期性注册更新的技术背景与流程概述 1.1 注册更新的核心目的 在5G网络中,UE通过周期性注册更新维持与核心网的连接状态,主要作用包括: 状态保活:避免AMF因超时而释放UE上下文(T3512定时器超时前需完成更新);位置更新:通知网络UE的当前位置,确保寻呼可达;能力同…...
【LLM学习笔记3】搭建基于chatgpt的问答系统(下)
目录 一、检查结果检查有害内容检查是否符合产品信息 二、搭建一个简单的问答系统三、评估输出1.当存在一个简单的正确答案2.当不存在一个简单的正确答案 一、检查结果 本章将引领你了解如何评估系统生成的输出。在任何场景中,无论是自动化流程还是其他环境&#x…...
算法导论第十九章 并行算法:解锁计算新维度
第十九章 并行算法:解锁计算新维度 “并行计算不是未来,而是现在。” —— David Patterson 在单核性能增长放缓的时代,并行算法成为突破计算极限的关键。本章将带你探索多核处理器、分布式系统和GPU加速的奇妙世界,揭示如何通过协…...
Python 数据分析与可视化 Day 1 - Pandas 数据分析基础入门
🎯 今日目标 理解 Pandas 的作用和核心概念学会创建 Series 和 DataFrame掌握基本数据读取(CSV)与常用查看方法 🧰 1. 什么是 Pandas? Pandas 是基于 NumPy 的强大数据分析库,提供了灵活的表格数据结构 Da…...
【数字人开发】Unity+百度智能云平台实现长短文本个性化语音生成功能
一、创建自己的应用 百度智能云控制台网址:https://console.bce.baidu.com/ 1、创建应用 2、获取APIKey和SecretKey 3、Api调试 调试网址:https://console.bce.baidu.com/support/?timestamp1750317430400#/api?productAI&project%E8%AF%AD%E9%…...
(哈希)128. 最长连续序列
题目 给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1: 输入:nums [100,4,200,1,3,2] 输出ÿ…...
MFC中使用CRichEditCtrl控件让文本框中的内容部分加粗
MFC中文本框控件的内容,设置好字体格式后,只能单一的显示,如果相对文本框的内容部分加粗,或者部分加颜色、链接等都无法实现,但MFC中提供了CRichEditCtrl控件,就很方便的实现文本框中部分内容需要特殊处理的…...
Redis 的优势有哪些,它是CP 还是 AP?CAP 理论又是什么?
Redis的核心优势 Redis作为当今最流行的内存数据库之一,具有以下显著优势: 1. 卓越的性能表现 内存存储:数据主要存储在内存中,读写速度极快(10万 QPS)单线程架构:避免多线程竞争,…...
flink的多种部署模式
## 部署模式和运行模式 ### 部署模式 - 本地local - 单机无需分布式资源管理 - 集群 - 独立集群standalone - 需要flink自身的任务管理工具 - jobmanager接收和调度任务 - taskmanager执行 - on其他资源管理工具yarn/k8s …...
SQL分片工具类
SQL分片工具类(SqlShardingUtil)提供数据库查询的智能分片功能,支持数字和字符串两种字段类型的分片策略。对于数字字段,可以指定分片数量均匀划分数值区间;对于字符串字段,则按照ASCII字符范围自动划分。工具类确保分片后的SQL语…...
死锁相关知识
死锁是什么 死锁(Deadlock)是指两个或多个进程(或线程)在执行过程中,因为互相等待对方释放资源,导致永远无法继续执行的状态。 ✅ 死锁的形成条件(必须同时满足以下四个)࿱…...
oscp靶机练习PG Reconstruction
枚举阶段 nmap -A -T4 -p- -Pn -n 192.168.217.103 发现ftp,进行连接枚举 都下载到本地 这里提示我们两点,可以看看pcap文件,还有就是可能有密码遗留还没有删除。 使用下面命令进行过滤筛选流量包,查看与密码相关 http.reque…...
写题。贪心题组
一、 解题思路:主要还是写出val / m,按这个排序,就行了 #include<bits/stdc.h> #define endl "\n" #define ll long long #define pii pair<int,int> using namespace std;struct doro {int m, val;double cmp; } arr…...
UE官方文档学习 TAarry 查询
这个很简单经常用。 二.GetData() . GetData(),像C里拿到数组首地址一样。它不具有越界保护机制,StrArr拥有越界保护机制。这个地址在数组不做改变,如扩容等有用。 void AWXArrayActor::WXFindArray() {TArray<FString> StrArr { &q…...
使用Haproxy搭建Web群集
LVS负载均衡群集 Haproxy介绍http请求负载均衡常用调度算法常见的web群集调度器 示例操作安装httpd(两台网站服务器操作一致)编译安装haproxyhaproxy服务器配置(1)建立haproxy的配置文件(2)修改haproxy.cfg配置文件 测试haproxy的日志(1)修改 haproxy 配…...
Linux 基础命令:`ls`、`cd`、`du` 快速入门
在 Linux 系统中,ls、cd 和 du 是日常操作中最常用的三个命令。掌握它们能大幅提升文件管理效率。 1. ls:查看目录内容 用途:列出当前或指定目录下的文件和子目录。 常用命令: ls -l # 详细列表(权限、大…...
[论文阅读] 人工智能 + 软件工程 | USEagent:迈向统一的AI软件工程师
论文信息 article{applis2025unified,title{Unified Software Engineering agent as AI Software Engineer},author{Applis, Leonhard and Jiang, Nan and Zhang, Yuntong and Tan, Lin and Liang, Shanchao and Roychoudhury, Abhik},journal{arXiv preprint arXiv:2506.1468…...
微信小程序传参过来了,但是数据没有获取到
使用本方法前,已经采用encodeURIComponent把拼接的参数编码之后,拼接在链接上,在接受的页面的onLoad生命周期,接收到参数之后,采用decodeURIComponent进行解码的操作,如果这个也不行,不是说不行…...
微信小程序form表单手机号正则检验pattern失效
好奇怪啊,h5页面校验没问题,在微信小程序模拟器以及真机运行都失效,排查半天,记录一下 PS:身份证号校验也没问题,就手机号校验有问题,奇奇怪怪的 之前的写法(在小程序上不生效&…...
repo 工具
repo 是 Google 为管理多个 Git 仓库而开发的工具,主要用于 Android 开源项目(AOSP)等大型项目。它通过清单文件(manifest.xml)统一管理多个 Git 仓库的依赖关系。以下是核心用法和常见命令: 一、安装 repo…...
Python实例题:基于 TensorFlow 的图像识别与分类系统
目录 Python实例题 题目 问题描述 解题思路 关键代码框架 难点分析 扩展方向 Python实例题 题目 基于 TensorFlow 的图像识别与分类系统 问题描述 开发一个基于 TensorFlow 的图像识别与分类系统,包含以下功能: 图像分类模型:基于…...
Windows 10开始菜单优化方案,如何实现Win7风格开始菜单的还原
今天阿灿给大家安利个好东西 Start10这软件能让Win10的开始菜单变回Win7那种经典样式,用起来特别顺手。不仅能改开始菜单外观,还能调整任务栏布局,想怎么设置都行。 我用它主要就图两点: 1. 找回Win7那种简洁好用的开始菜单 2.…...
Kafka性能压测报告撰写
在大数据生态体系中,Kafka以其卓越的高吞吐、低延迟特性,成为消息队列领域的中流砥柱。然而,随着业务规模不断扩张,数据流量日益激增,Kafka的性能表现直接关乎业务系统的稳定运行与效率提升。通过科学严谨的性能压测&a…...
IP 地理库的使用指南:从基础应用到深度实践
P 地理库的使用指南:从基础应用到深度实践 在数字化时代,IP 地址如同网络世界里的 “门牌号码”,而 IP 地理库则是解读这些号码背后秘密的 “解码器”。它不仅能定位 IP 对应的地理位置,还能挖掘出丰富的网络属性信息。接下来…...
C#的泛型和匿名类型
一、C#的泛型简介 泛型是一种允许你延迟编写类或方法中的数据类型规范,直到你在实际使用时才替换为具体的数据类型【简单的说:泛型就是允许我们编写能够适用于任何数据类型的代码,而无需为每种特定类型重写相同的代码】(T是类型参数ÿ…...
ABP VNext + MongoDB 数据存储:多模型支持与 NoSQL 扩展
🚀 ABP VNext MongoDB 数据存储:多模型支持与 NoSQL 扩展(生产级实践) 目录 🚀 ABP VNext MongoDB 数据存储:多模型支持与 NoSQL 扩展(生产级实践)🎯 引言🧰…...
JETBRAINS IDE 开发环境自定义设置快捷键
Date: 2025-06-18 20:39:52 author: lijianzhan JetBrains简介 让它发生。 用代码。 在JetBrains,代码是我们的激情所在。自成立以来,我们一直致力于打造世界上最强大、最有效的开发工具。 1.JETBRAINS官网,可以在官网下载代码编辑器 2.进入…...
JAVA——泛型
泛型(Generics)是Java语言在JDK 5.0版本中引入的一种强大特性,用于在编译时提供更强的类型检查和类型安全。它允许程序员在定义类、接口和方法时使用类型参数(Type Parameters),从而实现类型参数化。通过泛…...
攻防演练:1.木马后门文件演练
为了防止 Linux 服务器上传木马后门文件,可以编写一个脚本,定期检查系统中的可疑文件、进程和权限。以下是一个示例脚本,用于检查常见的后门文件、异常进程和权限问题。 脚本功能 检查常见后门文件路径。检查异常 SUID/SGID 文件。检查异常进…...
c++ STL---vector使用
本文对STL---中的vector的使用是参考网站 vector - C Reference 的内容,该网站是外文的哦,大家可以尝试打开看看更深刻的理解。本文是抽取其中常使用,然后加上自己的是理解哦。 前言 vector其实是顺序表类模板的封装啊! 数据结构…...
windows标题栏显示奇怪的蓝色,怎么解决
背景 如下,非常奇怪,如果窗口是active状态就是蓝色的,为什么? 如果你遇到上述问题,可以这么解决: 右键点击桌面,选择 “个性化”, 滚动到下面,看到 “标题栏和窗口边…...
Kafka存储设计深度剖析:日志、索引与文件管理的底层奥秘
引言 在分布式消息系统领域,Kafka凭借卓越的性能与高可靠性占据重要地位,而这一切都离不开其精妙的存储设计。从消息的持久化存储到高效检索,从日志分段管理到数据清理策略,Kafka的存储架构设计巧妙,能够支撑海量消息…...
将多个Excel合并到一个Excel中的方法
今天遇到这么一个问题,需要将多个Excel表格中的数据汇总表,合并在一个Excel中,并且显示一致。 因此编写了以下代码来解决这个问题, 1.在Excel中按AltF11,快速调出命令控制台 2.工具栏选择插入——模块——将以下脚本…...
Debian配置Redis主从、哨兵
前言 Redis的下载安装可参考Centos安装配置Redis6.x,Centos和Debian的步骤基本类似,或自行在网上搜索相关资料 注意:远程连接需放开相应端口 主从 搭建一个一主二从的主从模式 处理conf文件 #进入redis所在目录 cd /tools/redis/redis6 …...
OpenSSL引擎 + PKCS11 + SoftHSM2认证
OpenSSL引擎 PKCS11 SoftHSM2 前言:金融级安全的基石 在金融、军工等高安全领域,硬件安全模块(HSM) 是保护加密密钥的黄金标准。本文将深度剖析HSM核心组件libpkcs11.so的工作原理,并手把手教你搭建基于SoftHSM2的…...
flex布局 项目属性
<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>flex布局 项目属性</title> <link href"css/k.css" rel"stylesheet" /> </head> <bod…...
流水表延迟处理方案设计
**### 流水表延迟处理方案设计 针对你的场景(流水表插入记录,当type4时需要1秒后处理),结合现有技术栈(JDK8、MySQL、定时任务、Redis、RabbitMQ),我推荐以下几种可行方案: 一、方…...
密室出逃消消乐小游戏微信流量主小程序开源
这个密室出逃消消乐小游戏采用了微信小程序的标准目录结构,包含以下核心功能: 游戏界面:6x6 的网格布局,随机生成不同类型的物品 游戏逻辑:交换相邻物品,消除三个或以上相同类型的物品 计分系统:…...
Docker 日志
Docker 日志是排查容器故障、监控运行状态的重要工具。下面从 日志查看命令、详解字段、日志驱动、最佳实践 四个方面给你详细解析。 一、最常用日志命令 1. 查看容器日志(默认 stdout、stderr) docker logs <container_name|container_id>2. 实…...
嵌入Linux快速入门第3篇
01_嵌入式Linux开发环境介绍 在Windows环境下的操作: 02_配置VMware使用双网卡之NAT网卡 虚拟机内部有两个网卡,一个是NAT网卡,另外一个是桥接网卡。NAT网卡用来保证Ubuntu可以上网,桥接网卡用来保证Ubuntu可以和开发板进行数据…...
详解鸿蒙Next仓颉开发语言中的全屏模式
大家好,今天跟大家分享一下仓颉开发语言中的全屏模式。 和ArkTS一样,仓颉的新建项目默认是非全屏模式的,如果你的应用颜色比较丰富,就会发现屏幕上方和底部的留白,这是应用自动避让了屏幕上方摄像头区域和底部的导航条…...
Oracle/MySQL/SqlServer/PostgreSQL等数据库的数据类型映射以及各版本数据类型情况说明
1 引言 近期工作聚焦于跨数据库系统的数据类型兼容性研究,旨在解决多源异构数据迁移、系统集成及版本升级中的类型映射难题。具体任务包括:1)建立主流数据库(如MySQL、Oracle、PostgreSQL、SQL Server等)的数据类型映射…...
新生活的开启:从 Trae AI 离开后的三个月
很久没有写文章了,想借着入职新公司一个月的机会,和大家唠唠嗑。 离职 今年2月份我从字节离职了,结束了四年的经历,当时离开的核心原因是觉得加班时间太长了,平均每天都要工作15,16个小时,周末…...
背包问题概论(01背包,完全背包,多重背包)DP
背包问题概论(01背包,完全背包,多重背包)DP 背包问题一种经典的组合优化问题,主要用于在有限的容量下选择物品以最大化总价值。它分为几种类型: ①:0/1背包问题:每种物品只能选择…...
攻克SQL审核“最后堡垒”!PawSQL首发T-SQL存储过程深度优化引擎
为什么存储过程审核那么难? 存储过程将数据操作逻辑固化在数据库层,一次编译、多次执行,既能大幅提升性能,也能通过权限隔离增强安全。然而,正因其逻辑复杂、分支众多,存储过程内部的 SQL 审核与优化常常成…...