深度优先遍历(DFS)
深度优先遍历(DFS)
- 1. 计算布尔二叉树的值
- 2. 求根节点到叶节点数字之和
- 3.二叉树剪枝
- 4.验证二叉搜索树
- 5. 二叉搜索树中第 K 小的元素
- 6. 二叉树的所有路径
深度优先遍历(DFS,全称为Depth First Traversal),是我们树或者图这样的数据结构中常⽤的⼀种遍历算法。这个算法会尽可能深的搜索树或者图的分⽀,直到⼀条路径上的所有节点都被遍历完毕,然后再回溯到上⼀层,继续找⼀条路遍历。
在⼆叉树中,常⻅的深度优先遍历为:前序遍历、中序遍历以及后序遍历。
因为树的定义本⾝就是递归定义,因此采⽤递归的⽅法去实现树的三种遍历不仅容易理解⽽且代码很
简洁。并且前中后序三种遍历的唯⼀区别就是访问根节点的时机不同,在做题的时候,选择⼀个适当的遍历顺序,对于算法的理解是⾮常有帮助的。
1. 计算布尔二叉树的值
题目链接:2331. 计算布尔二叉树的值
算法思路:
这道题需要采用DFS,先访问左边的叶子节点,再访问右边的叶子节点,最后再访问根节点,因此可以采用后序遍历
算法流程:
- 根据子问题设计出函数头:只需要一个参数root即可,返回值为boolean类型
- 只关心某一个子问题,设计函数体:首先得到左边叶子的值,再得到右边叶子的值,再根据跟节点的值,将左右叶子的值进行操作
- 递归的出口:当访问到叶子节点时,返回该叶子节点的值
实现代码:
class Solution {public boolean evaluateTree(TreeNode root) {if(root.left == null && root.right == null) return root.val == 0 ? false : true;boolean left = evaluateTree(root.left);boolean right = evaluateTree(root.right);return root.val == 2 ? left | right : left & right;}
}
2. 求根节点到叶节点数字之和
题目链接:129. 求根节点到叶节点数字之和
解题思路:
- 将父亲节点的值与当前节点的值整合起来向下传递,再将传递下来的值与下一个节点的值整合,并向下传递,直到遇到叶子节点时,将其与根节点的值整合后返回
- 每个非叶子节点将左子树和右子树返回的值相加,并返回
递归函数设计:
- 函数头:需要包含一个根节点参数,一个前序和参数,返回值为int
- 函数体:更新前序和,向下传递,直至遇到叶子节点返回更新后的前序和,非叶子节点将左右返回的前序和相加并返回
- 递归的出口:遇到叶子节点,返回前序和与叶子节点值的整合值
实现代码:
class Solution {public int sum;public int sumNumbers(TreeNode root) {return dfs(root, 0);}private int dfs(TreeNode root, int preSum) {preSum = 10 * preSum + root.val;if(root.left == null && root.right == null) return preSum;int ret = 0;if(root.left != null) ret += dfs(root.left, preSum);if(root.right != null) ret += dfs(root.right, preSum);return ret;}
}
3.二叉树剪枝
题目链接:814. 二叉树剪枝
自己的解题思路:
从宏观上看,如果一个节点的左边可以移除,右边也可以移除,并且该节点的值为0,那么返回true给上一个节点,表明以该节点为根节点的树都可以移除。因此,该题需要采用后续遍历
实现代码:
class Solution {public TreeNode pruneTree(TreeNode root) {boolean rootTree = dfs(root);if(rootTree) return null;return root;}private boolean dfs(TreeNode root) {if(root == null) return true;boolean leftTree = dfs(root.left);if(leftTree) root.left = null;boolean rightTree = dfs(root.right);if(rightTree) root.right = null;return leftTree && rightTree && root.val == 0;}
}
答案解题思路:
- 先处理掉左子树的剪枝,再处理右子树的剪枝,最后判断当前当前这棵树是否需要剪掉,因此需要采用后序遍历
- 如果需要剪掉,那么父亲节点的左(或右)节点就需要置为NULL,即需要向上返回一个NULL;而当不需要剪掉时,为了保证递归解决问题的统一性,向上返回当前节点
- 递归出口为当遍历到空节点时,向上返回NULL
实现代码:
class Solution {public TreeNode pruneTree(TreeNode root) {if (root == null)return null;root.left = pruneTree(root.left);root.right = pruneTree(root.right);if (root.left == null && root.right == null && root.val == 0)root = null;return root;}
}
4.验证二叉搜索树
题目链接: 98. 验证二叉搜索树
算法思路:
二叉搜索树的特点是:采用中序遍历得到的是一个严格递增的序列。因此,这道题采用中序遍历来解题。我们需要初始化一个无穷小(要比二叉搜索树里的最小值还要小,而题意-231 <= Node.val <= 231 - 1,比int类型的最小值还要小,可以用long类型的最小值)的全局变量prev用来记录root的前驱节点值,比较prev的值与当前节点的值,然后prev修改为当前节点的值
算法流程:
- 定义一个全局变量,初始化为无穷小,用来记录前驱节点的值
- 递归的出口:当root == null时,返回true
- 先检查左子树是否是二叉搜索树,再判断当前节点是否满足二叉搜索树的性质(即前驱节点的值小于当前节点的值),再继续修改prev的值为当前节点的值,再去判断右子树是否是二叉搜索树
- 只有当左子树为二叉搜索树,右子树为二叉搜索树,当前的节点也满足二叉搜索树的性质时,这棵树才是二叉搜索树
实现代码:
class Solution {public long prev = Long.MIN_VALUE;public boolean isValidBST(TreeNode root) {if(root == null) return true;boolean leftTree = isValidBST(root.left);//剪枝if(!leftTree) return false;boolean cur = true;if(root.val <= prev) cur = false;//剪枝if(!cur) return false;prev = root.val;boolean rightTree = isValidBST(root.right);return leftTree && rightTree && cur;}
}
当左子树不是二叉搜索树,就表明已经这棵树不是二叉搜索树了,也就没有必要进行后续的操作了,直接向上返回false即可;同理,当当前节点不满足二叉搜索树的性质时,也直接向上返回false。剪枝操作是为了加快搜索过程
5. 二叉搜索树中第 K 小的元素
题目链接:230. 二叉搜索树中第 K 小的元素
解题思路: 利用中序遍历,当访问到第k个“根节点”时,该节点对应的val值就是我们要找的第 K 小的元素
算法流程:
- 递归的出口:当根节点为空时,返回-1,表明没有找到
- 递归去左子树上去找,判断当前根节点是否是所需要找的节点(即判断k是否等于1),将k–,再递归去右子树上找
class Solution {public int K;public int kthSmallest(TreeNode root, int k) {K = k;return kthSmallest(root);}private int kthSmallest(TreeNode root) {if(root == null) return -1;int leftFind = kthSmallest(root.left, K);//剪枝if(leftFind != -1) return leftFind;if(K == 1) return root.val;K--;int rightFind = kthSmallest(root.right, K);return rightFind;}
}
注意: 这里需要定义一个全局变量K,而不是使用k作为递归的参数。因为当回溯时,k的值同样会回溯,这不符合算法的流程
6. 二叉树的所有路径
题目链接:257. 二叉树的所有路径
解题思路:
- 除了根节点,其他节点前面都需要添加一个“->”
- 需要一个字符串来添加路径,因此函数头需要一个字符串
- 采用前序遍历,将根节点放入字符串中,再去遍历左子树、右子树
- 当遍历到根节点时,将这时的字符串放入字符数组中
- 递归的出口是:root == null
按照思路,我们能写出如下的代码
class Solution {private List<String> lists;public List<String> binaryTreePaths(TreeNode root) {lists = new LinkedList<String>();StringBuffer strBuff = new StringBuffer();dfs(root, strBuff);return lists;}private void dfs(TreeNode root, StringBuffer path) {if(root == null) return;if(!path.isEmpty()) path.append("->");path.append(root.val);if(root.left == null && root.right == null) {lists.add(path.toString());return;}dfs(root.left, path);dfs(root.right, path);}
}
实际上,这个代码是存在问题的!因为我们在递归完成后,没有对当前添加到 path的节点值进行删除操作,这就会导致在处理完这个路径后,后续的路径会附加在这个路径的字符串后面,从而导致最终的结果不正确
这是为什么呢?当函数返回时,path的值不是会回退到上一个函数的值吗?
答:当一个函数执行完毕返回时,函数内部的局部变量(比如基本数据类型的变量等)所占用的栈空间会被自动回收,其状态确实会 “撤销”,也就是这些局部变量会随着函数栈帧的销毁而消失。
例如,如果函数中有一个简单的 int 类型局部变量 count,每次进入函数它有不同的值,函数返回后,这个 count 变量所占用的内存空间会被释放,下次再进入该函数时,它可以重新被初始化并使用,从这个角度看是有自动 “撤销” 的过程。
递归确实会返回到上一个状态,但现在我们现在创建的字符串是一个对象,由于可变对象的状态管理不同于基本数据类型(如整数或字符),我们需要手动管理这种状态,以确保路径的正确记录
因此,我们需要在原代码的基础上,对字符串进行回溯(“恢复现场”)。另外,当我们解题时,如果使用了全局变量,也要去考虑该变量的回溯
修改后的代码:
class Solution {private List<String> lists;public List<String> binaryTreePaths(TreeNode root) {lists = new LinkedList<String>();StringBuffer strBuff = new StringBuffer();dfs(root, strBuff);return lists;}private void dfs(TreeNode root, StringBuffer path) {if(root == null) return;if(path.length() > 0) path.append("->");path.append(root.val);if(root.left == null && root.right == null) {lists.add(path.toString());} else {dfs(root.left, path);dfs(root.right, path);}//回溯int lastIndex = path.lastIndexOf(String.valueOf(root.val)) - 2;if(lastIndex >= 0) {path.delete(lastIndex, path.length());}}
}
另外,我们还可以通过创建一个局部变量——path的副本。在每次递归调用时,使用传入路径的副本。这允许每次递归都维护独立的路径,避免修改其他层级的路径。通过将 path 的内容复制到新的 StringBuffer _path 中,确保上下文保持准确,不会影响其他节点的路径。
代码如下:
class Solution {private List<String> lists;public List<String> binaryTreePaths(TreeNode root) {lists = new LinkedList<String>();StringBuffer strBuff = new StringBuffer();dfs(root, strBuff);return lists;}private void dfs(TreeNode root, StringBuffer path) {if(root == null) return;StringBuffer _path = new StringBuffer(path);if(_path.length() > 0) _path.append("->");_path.append(root.val);if(root.left == null && root.right == null) {lists.add(_path.toString());return;}dfs(root.left, _path);dfs(root.right, _path);}
}
相关文章:
深度优先遍历(DFS)
深度优先遍历(DFS) 1. 计算布尔二叉树的值2. 求根节点到叶节点数字之和3.二叉树剪枝4.验证二叉搜索树5. 二叉搜索树中第 K 小的元素6. 二叉树的所有路径 深度优先遍历(DFS,全称为Depth First Traversal),是…...
国科大网络协议安全期末
完整资料仓库地址:https://gitee.com/etsuyou/UCAS-Network-Protocol-Security 部分题目: 六 论述题10*220 试讨论IPv6解决了IPv4的哪些“痛点”,以及IPv6存在的安全问题试比较IPsec与SSL的安全性 五 简答题5*315 简述MAC欺骗和ARP欺骗的…...
开源密码管理器 Bitwarden 一站式管理所有密码以及 2FA
本文首发于只抄博客,欢迎点击原文链接了解更多内容。 前言 随着注册的平台越来越多,管理密码的难度也越来越高了。要是把密码都设置成一样的,担心哪天某个平台泄露被一锅端,而每个平台单独一个密码又不太好记,这时候就…...
Python爬虫之Selenium的应用
【1】Selenium基础介绍 1.什么是selenium? (1)Selenium是一个用于Web应用程序测试的工具。 (2)Selenium 测试直接运行在浏览器中,就像真正的用户在操作一样。 (3)支持通过各种driv…...
华为无线AC、AP模式与上线解析(Huawei Wireless AC, AP Mode and Online Analysis)
华为无线AC、AP模式与上线解析 为了实现fit 瘦AP的集中式管理,我们需要统一把局域网内的所有AP上线到AC,由AC做集中式管理部署。这里我们需要理解CAPWAP协议,该协议分为两种报文:1、管理报文 2、数据报文。管理报文实际在抓包过程…...
k8s中用filebeat文件如何收集不同service的日志
以下是一个详细的从在 Kubernetes 集群中部署 Filebeat,到实现按web-oper、web-api微服务分离日志并存储到不同索引的完整方案: 理解需求:按服务分离日志索引 在 Kubernetes 集群中,有web-oper和web-api两种微服务,希…...
linux常用命令(cd、ls)
命令cd cd 是 Linux 系统中用于改变当前工作目录的命令。它是 "change directory" 的缩写。以下是关于 cd 命令的详细解释和使用方法: 基本用法 cd [目录路径]:将当前工作目录切换到指定的目录路径。 常用选项与示例 1、切换到指定目录 …...
Java实现一个带头节点的单链表
什么是单链表? 单链表是一种基础的数据结构,其中每个节点都包含两部分: 数据域:存储节点数据。指针域:存储指向下一个节点的引用。 为什么使用头节点? 头节点的存在简化了操作逻辑: 统一操作…...
代码随想录-算法训练营-番外(图论01:图论理论基础,所有可到达的路径)
day01 图论part01 今日任务:图论理论基础/所有可到达的路径 代码随想录图论视频部分还没更新 https://programmercarl.com/kamacoder/图论理论基础.html#图的基本概念 day01 所有可达路径 邻接矩阵 import java.util.Scanner;import java.util.List;import java.util.ArrayL…...
js:我要在template中v-for循环遍历这个centrerTopdata,我希望自循环前面三个就可以了怎么写
问: 我按在要在template中v-for循环遍历这个centrerTopdata,我希望自循环前面三个就可以了怎么写? 回答: 问: <div v-for"(item, index) in centrerTopdata.slice(0, 3)" :key"index"> d…...
软考高级架构 - 10.5 软件架构演化评估方法
10.4 软件架构演化原则总结 本节提出了18条架构演化的核心原则,并为每条原则设计了简单而有效的度量方法,用于从系统整体层面提供实用信息,帮助评估和指导架构演化。 演化成本控制:成本小于重新开发成本,经济高效。进…...
40 list类 模拟实现
目录 一、list类简介 (一)概念 (二)list与string和vector的区别 二、list类使用 (一)构造函数 (二)迭代器 (三)list capacity (四&#x…...
【原生js案例】如何实现一个穿透字体颜色的导航
普通的导航大家都会做,像这种穿透字体的导航应该很少见吧。高亮不是通过单独设置一个active类来设置字体高亮颜色,鼠标滑过导航项,字体可以部分是黑色,不分是白色,这种效果的实现 感兴趣的可以关注下我的系列课程【we…...
(RHCE)工程师学习考证
如果你像我一样,非科班出身且对 IT 行业知识储备几乎为零,却立志考取 RHCE 红帽工程师证书,那么以下这份学习教程或许能助你一臂之力。 首先,要对 RHCE 有个基本的认识。RHCE 是红帽企业级 Linux 认证,它侧重于实际操作…...
Nuxt3 axios封装 使用axios接口请求
一、先安装axios npm install add axios 封装请求request.ts文件 import axios from axios import { ElMessage, Message } from "element-plus" import {getToken} from ./token.js const service axios.create({baseURL:/api,//本地使用 }) service.interceptor…...
东方通TongWeb替换Tomcat的踩坑记录
一、背景 由于信创需要,原来项目的用到的一些中间件、软件都要逐步替换为国产品牌,决定先从web容器入手,将Tomcat替换掉。在网上搜了一些资料,结合项目当前情况,考虑在金蝶AAS和东方通TongWeb里面选择,后又…...
引用类型集合的深拷贝,无需手动写循环:Apache Commons Lang (SerializationUtils)
在java中,我们如果想要对引用类型的集合进行深拷贝。有一种方式,就是调用SerializationUtils Apache Commons Lang (SerializationUtils) Apache Commons Lang 提供了 SerializationUtils 类,可以利用 Java 的序列化机制来进行集合及其元素…...
高阶函数:JavaScript 编程中的魔法棒
在JavaScript的世界里,高阶函数是一种强大的工具,它允许我们将函数作为参数传递或将函数作为返回值。这种特性使得JavaScript代码更加灵活和强大。本文将深入探讨高阶函数的定义、用法以及在实际项目中的最佳实践,帮助大家更好地理解和应用这…...
HuggingGPT Solving AI Tasks with ChatGPT and its Friends in Hugging Face 论文解读
1. 引言 近年来,大型语言模型(LLMs)如ChatGPT在自然语言处理领域取得了惊人的进展,展现出强大的语言理解、生成和推理能力。然而,当前的LLMs仍然存在一些局限性,例如无法处理复杂信息(如视觉和…...
使用 ADB (Android Debug Bridge) 工具来截取 Android 设备的屏幕截图
可以使用 ADB (Android Debug Bridge) 工具来截取 Android 设备的屏幕截图。以下是具体的操作步骤: 1. 连接设备 确保 Android 设备通过 USB 或网络连接到电脑,并运行以下命令检查连接状态: adb devices2. 截取屏幕截图 运行以下命令将设…...
router.resolve 方法
router.resolve 方法在前端路由库(如 Vue Router)中用于解析路由信息。它接受一个路由对象或路径,并返回一个包含解析后的路由信息的对象。这个对象通常包含 href、route、location 等属性。 用法总结 方法签名: router.resolve(…...
linux 安装 Jenkins 教程
前言 Jenkins 是一个开源的自动化服务器,广泛用于持续集成(Continuous Integration,CI)和持续交付(Continuous Delivery,CD)领域。它帮助开发者自动化软件构建、测试、部署等过程,从…...
Vue3 使用 render 渲染函数透传组件
背景 我们透传组件的时候可能会用 slot,本文讲述的是另一种方式 props render 函数方式。当然具体的看业务场景。 实现 父组件 <AComp customComponent: () > {return h(UserAuthorization) }> </AComp>子孙组件 // 定义 render 组件ÿ…...
MongoDB 分片
MongoDB 分片 MongoDB 分片是一种数据库架构,用于将大量数据分布存储在多个服务器上。这种设计允许数据库扩展,以处理大量数据和高吞吐量操作。分片通过将数据集分割成小块,称为分片,并将这些分片分布到多个服务器上来工作。每个…...
Chrome webdriver下载-避坑
WebDriver以原生的方式驱动浏览器,不需要调整环境变量。 一、window版 1.chrome和chromedriver下载地址: Chrome for Testing availability 我下载的是如下两个安装包,解压即可。 2.导包 pip install selenium然后用python代码引用即可…...
【MFC】如何读取rtf文件并进行展示
tf是微软的一个带格式的文件,比word简单,我们可以用写字板等程序打开编辑。下面以具体实例讲解如何在自己程序中展示rtf文件。 首先使用VS2022创建一个MFC的工程。 VIEW类需要选择richview类,用于展示,如下图: 运行效…...
基于wifipumpkin3的AP伪造
一、软硬件需求 利用wifipumpkin-3进行AP伪造需要kali系统,还需要一张支持在kali的环境下能够支持AP伪造的无线网卡,如果是针对特定的无线网的话,再来第二张网卡的话更好用来转发流量更好。对于wifipumpkin-3的安装使用可以分为两种方式&…...
docker xxxx is using its referenced image ea06665f255d
Error response from daemon: conflict: unable to remove repository reference “registrxxxxxx” (must force) - container 9642fd1fd4a0 is using its referenced image ea06665f255d 这个错误表明你尝试删除的镜像正在被一个容器使用,因此无法删除。要解决这…...
svm支持向量机
支持向量机(SVM) 1. SVM 的核心思想 支持向量机(Support Vector Machine, SVM)是一种监督学习算法,用于分类和回归任务。其目标是找到一个超平面,将数据点分为不同类别,同时 最大化分类间隔&a…...
MySQL数据类型
MySQL数据库中的常用数据类型 数值型: ①整型 ②小数类型 定点型 浮点型 字符型: ①短的文本:char varchar ②长的文本:text blob(二进制) 日期型 ①数值型 整数应该知道的知识点 ①设置无符号和有符号 create table t_int( t1 int; #②默认有符…...
【深度学习】热力图绘制
热力图(Heatmap)是一种数据可视化方法,通过颜色来表示数据矩阵中的数值大小,以便更直观地展示数据的分布和模式。热力图在许多领域中都有应用,尤其在统计分析、机器学习、数据挖掘等领域,能够帮助我们快速识…...
高效Python开发工具PyCharm v2024.3全新发布,进一步提升编码体验!
JetBrains PyCharm是一种Python IDE,其带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具。此外,该IDE提供了一些高级功能,以用于Django框架下的专业Web开发。 立即获取PyCharm v2024.3正式版 Python 针对dataclass_transfor…...
Ubuntu 安装 Samba Server
在 Mac 上如何能够与Ubuntu 服务器共享文件夹,需要在 Ubuntu 上安装 Samba 文件服务器。本文将介绍如何在 Ubuntu 上安装 Samba 服务器从而达到以下目的: Mac 与 Ubuntu 共享文件通过用户名密码访问 安装 Samba 服务 sudo apt install samba修改配置文…...
WPF 实现 鼠标点击 取消 TextBox 光标
WPF 实现 鼠标点击 取消 TextBox 光标 原始需求:TextBox 控件光标取消后运行特定功能函数 所遇问题:若无相关事件,则除了点击其他控件等方式外,无法准确取消光标 解决思路:通过捕获 TextBox 控件外鼠标点击或鼠标移…...
cron服务执行定时任务
参考链接 cron表达式在线解析:quartz/Cron/Crontab表达式在线生成工具-BeJSON.com 定时任务运行时报错解决方法 运行脚本报 权限不够问题: 可以在脚本文件夹下直接执行 如下指令运行RequestAPI.sh 脚本 ./RequestAPI.sh 如果出现权限不够问…...
Go 语言与时间拳击理论下的结对编程:开启高效研发编程之旅
一、引言 结对编程作为一种软件开发方法,在提高代码质量、增强团队协作等方面具有显著优势。而时间拳击理论为结对编程带来了新的思考角度。本文将以 Go 语言为中心,深入探讨时间拳击理论下的结对编程。 在当今软件开发领域,高效的开发方法和…...
【收藏】Cesium 限制相机倾斜角(pitch)滑动范围
1.效果 2.思路 在项目开发的时候,有一个需求是限制相机倾斜角,也就是鼠标中键调整视图俯角时,不能过大,一般 pitch 角度范围在 0 至 -90之间,-90刚好为正俯视。 在网上查阅了很多资料,发现并没有一个合适的…...
PostgreSQL的学习心得和知识总结(一百六十四)|深入理解PostgreSQL数据库之在 libpq 中支持负载平衡
目录结构 注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下: 1、参考书籍:《PostgreSQL数据库内核分析》 2、参考书籍:《数据库事务处理的艺术:事务管理与并发控制》 3、PostgreSQL数据库仓库…...
TÜLU 3: Pushing Frontiers inOpen Language Model Post-Training
模型:https://huggingface.co/allenai 技术报告:https://allenai.org/papers/tulu-3-report.pdf 数据集:https://huggingface.co/collections/allenai/tulu-3-datasets-673b8df14442393f7213f372 GitHub:https://github.com/al…...
Pytest-Bdd-Playwright 系列教程(14):Docstring 参数
Pytest-Bdd-Playwright 系列教程(14):Docstring 参数 前言一、什么是docstring?二、基本语法三、主要特点四、实际例子五、注意事项六、使用建议总结 前言 在自动化测试的过程中,我们经常需要处理复杂的测试数据或需要输入多行文…...
Docker部署WebRTC-Streamer
文章目录 WebRTC-Streamer概述Docker部署WebRTC-StreamerVue使用WebRTC-Streamer一些问题 WebRTC-Streamer概述 WebRTC-Streamer是一个基于WebRTC技术的流媒体传输工具,它可以通过Web浏览器实现实时音视频流的传输和播放。它提供了一种简单而强大的方式ÿ…...
linux-16 关于shell(十五)date,clock,hwclock,man,时间管理,命令帮助
想显示一下当前系统上的时间该怎么显示?有一个命令叫做date,来看date命令,如下图, 第一个星期几对吧?然后是月日小时分钟秒,最后一个是年对吧?CST指的是它的时间格式,我这个可以先姑…...
厦门凯酷全科技有限公司深耕抖音电商运营
在数字经济飞速发展的今天,抖音电商平台以其独特的社交属性和庞大的用户基础,迅速成为众多品牌和商家的新战场。在这个充满机遇与挑战的市场中,厦门凯酷全科技有限公司凭借其专业的服务、创新的理念和卓越的执行力,成为了抖音电商…...
C++多线程实战:掌握图像处理高级技巧
文章结尾有最新热度的文章,感兴趣的可以去看看。 本文是经过严格查阅相关权威文献和资料,形成的专业的可靠的内容。全文数据都有据可依,可回溯。特别申明:数据和资料已获得授权。本文内容,不涉及任何偏颇观点,用中立态度客观事实描述事情本身 导读 在当今的计算世界中,…...
CityEngine实践——常用cga文件解析系列(2)
上回书说到了: 3、RULES/COMPONENTS/MASSING/SUBURBAN_BLOCK DETACHED_HOUSES.CGA ROWHOUSES.CGA SEMI_DETACHED_HOUSES.CGA 4、RULES/COMPONENTS/MASSING/URBAN_BLOCK MONOBLOCK.CGA PERIMETER_8_SHAPE.CGA PERIMETER_MULTIPART.CGA 这个cga挺有意思,…...
【人工智能】因果推断与数据分析:用Python探索数据间的因果关系
解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 因果推断是数据科学领域的一个重要方向,旨在发现变量间的因果关系,而不仅仅是相关性。本篇文章将从因果推断的理论基础出发,介绍因果关系的定义与建模方法,涵盖因果图(Causal Graph)、d-分离、反事实估计等…...
depth wisepoint wise
文章目录 1. Description2. code 1. Description point wise 1. function: for the separated pixel without pixel confusion 2. kernel size : 3x3 ,star matrix [[0,0,0],[0,1,0],[0,0,0]] depth wise 1. fuction: for the separated channel without channel confusion 2.…...
AI大模型学习笔记|神经网络与注意力机制(逐行解读)
来源分享链接:通过网盘分享的文件:详解神经网络是如何训练的 链接: https://pan.baidu.com/s/12EF7y0vJfH5x6X-0QEVezg 提取码: k924 内容摘要:本文深入探讨了神经网络与注意力机制的基础,以及神经网络参数训练的过程。以鸢尾花数…...
2025软考中级《数据库系统工程师》案例模拟题合集
1.【说明】某销售企业正在实施电商平台项目,主要功能模块包括用户中心、商品中心、交易中心、支付中心、营销中心等。其中支付中心模块包括了一个账户表:Account (ano, aname, balance),其中属性含义分别为:账户号,账户…...
12.10深度学习_经典神经网络_GoogleNet自我理解
为了更清晰地展示 GoogLeNet 中每个卷积层及其相关参数,我们可以将这些信息整理成表格形式。这不仅有助于理解每一层的输入和输出尺寸,还能直观地看到卷积核的数量、大小、步长以及填充方式等关键参数。以下是 GoogLeNet 前几层(包括两个卷积…...