文心一言 VS 讯飞星火 VS chatgpt (152)-- 算法导论12.2 8题

八、用go语言,证明:在一棵高度为 h 的二叉搜索树中,不论从哪个结点开始,k 次连续的 TREE-SUCCESSOR 调用所需时间为 O(k+h)。

文心一言:

要证明在一棵高度为 h 的二叉搜索树中,不论从哪个结点开始,k 次连续的 TREE-SUCCESSOR 调用所需时间为 O(k+h),我们可以采用数学归纳法来进行证明。

首先,我们需要明确二叉搜索树的一些性质:

每个节点的左子树中的所有节点的值都小于该节点的值。

每个节点的右子树中的所有节点的值都大于该节点的值。

二叉搜索树的查找操作的时间复杂度为 O(h),其中 h 是树的高度。

假设我们从任意节点 n 开始,执行 k 次连续的 TREE-SUCCESSOR 操作。我们需要证明所需的总时间为 O(k+h)。

基本情况:

当 k = 1 时,我们只需执行一次 TREE-SUCCESSOR 操作。根据二叉搜索树的性质,TREE-SUCCESSOR 操作的时间复杂度为 O(h),因为我们需要沿着树向下搜索,直到找到一个比当前节点大的节点或到达树的末尾。因此,当 k = 1 时,所需时间为 O(h)。

归纳假设:

假设当 k = i 时(i > 1),执行 i 次连续的 TREE-SUCCESSOR 操作所需时间为 O(i+h)。

归纳步骤:

当 k = i+1 时,我们首先执行一次 TREE-SUCCESSOR 操作,然后根据归纳假设,执行 i 次连续的 TREE-SUCCESSOR 操作。因此,总时间包括两部分:执行一次 TREE-SUCCESSOR 操作的时间和执行 i 次连续的 TREE-SUCCESSOR 操作所需的时间。根据二叉搜索树的性质,执行一次 TREE-SUCCESSOR 操作的时间复杂度为 O(h),而根据归纳假设,执行 i 次连续的 TREE-SUCCESSOR 操作所需时间为 O(i+h)。因此,总时间为 O(h) + O(i+h) = O(i+2h) = O(k+h),其中 k = i+1。

通过归纳法,我们证明了无论从哪个节点开始,k 次连续的 TREE-SUCCESSOR 操作所需时间为 O(k+h)。

在这里插入图片描述

讯飞星火,代码正常运行:

解析:

二叉搜索树(BST)的 TREE-SUCCESSOR 操作是查找给定节点的后继节点。在 BST 中,一个节点的后继节点是大于该节点值的最小节点。如果一个节点有右子树,那么它的后继节点就是右子树中的最左节点;如果一个节点没有右子树,那么它的后继节点就是它的父节点,直到找到一个节点,它是其父节点的左子节点。

对于这个问题,我们可以使用深度优先搜索(DFS)来找到每个节点的后继节点。我们从根节点开始,然后递归地访问每个节点的左子树和右子树。对于每个节点,我们记录下它的后继节点,以及从当前节点到后继节点的距离。最后,我们可以通过比较所有节点的后继节点距离之和与 k 的关系,来证明这个结论。

代码如下:

package mainimport "fmt"type TreeNode struct {Val   intLeft  *TreeNodeRight *TreeNode
}func treeSuccessor(root *TreeNode, k int) int {if root == nil {return -1}// 使用哈希表存储每个节点的后继节点和距离successors := make(map[*TreeNode]int)var dfs func(*TreeNode, int)dfs = func(node *TreeNode, depth int) {if node == nil {return}// 如果节点有右子树,那么它的后继节点就是右子树中的最左节点if node.Right != nil {for node.Right != nil {node = node.Rightdepth++}successors[node] = depthreturn}// 如果节点没有右子树,那么它的后继节点就是它的父节点,直到找到一个节点,它是其父节点的左子节点for node.Val <= k {k -= node.Valnode = node.Left}successors[node] = depth + k}dfs(root, 0)// 计算所有节点的后继节点距离之和sum := 0for _, distance := range successors {sum += distance}// 返回后继节点距离之和与 k 的关系if sum > k {return 1} else if sum < k {return -1} else {return 0}
}func main() {root := &TreeNode{Val: 20}root.Left = &TreeNode{Val: 8}root.Right = &TreeNode{Val: 22}root.Left.Left = &TreeNode{Val: 4}root.Left.Right = &TreeNode{Val: 12}root.Left.Right.Left = &TreeNode{Val: 10}root.Left.Right.Right = &TreeNode{Val: 14}fmt.Println(treeSuccessor(root, 6)) // 输出:1
}

这段代码首先定义了一个二叉树节点的结构体,然后实现了一个 treeSuccessor 函数,该函数接受一个二叉树的根节点和一个整数 k,返回后继节点距离之和与 k 的关系。在 main 函数中,我们创建了一个二叉搜索树,并调用 treeSuccessor 函数来测试其正确性。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

360智脑,代码不能运行:

package main
import ("fmt"
)func treeSuccessor(node *Node, k int) {for i := k; i > 0; i-- {node = node.Left}return node.Right
}func main() {// 创建二叉搜索树root := &Node{Value: 1, Left: &Node{Value: 2, Left: &Node{Value: 3, Left: &Node{Value: 4, Right: &Node{Value: 5}}}, Right: &Node{Value: 6}}}// 从任意节点开始,连续k次调用treeSuccessorfor i := 1; i <= k; i++ {time.Sleep(time.Duration(10) * float64(i))treeSuccessor(root, i)}
}

注:此证明假设树的左、右子树的高度差不超过1,即左子树和右子树至少有一个深度为h-1。

在这里插入图片描述

智谱清言:

在Go语言中证明一棵高度为 ( h ) 的二叉搜索树(BST)中,不论从哪个结点开始,( k ) 次连续的 TREE-SUCCESSOR 调用所需时间为 ( O(k+h) ) 需要分析二叉搜索树的性质以及 TREE-SUCCESSOR 操作的含义。

TREE-SUCCESSOR 操作通常指的是在二叉搜索树中找到给定结点的后继结点,即找到比给定结点值大且最接近的结点。在BST中,后继结点可以在右子树中找到,如果在右子树中找不到,则说明当前结点没有后继,即它是树中最大的结点。

在BST中进行 k 次连续的 TREE-SUCCESSOR 调用的复杂度分析如下:

1.第一次调用 TREE-SUCCESSOR 时,需要遍历到当前结点的右子节点,时间复杂度为 ( O(h) )。

2.第二次调用时,需要遍历到第一次调用结果节点的右子节点,时间复杂度为 ( O(h) )。

3.以此类推,第 ( k ) 次调用也需要遍历到第 ( k-1 ) 次调用结果节点的右子节点,时间复杂度为 ( O(h) )。

因此,对于 ( k ) 次连续的 TREE-SUCCESSOR 调用,总的复杂度是 ( O(k \times h) )。

但是,因为每一次调用 TREE-SUCCESSOR 都是从上一次的右子节点开始,而不是从根节点开始,所以每次调用实际上是在减少需要遍历的高度。因此,每次调用 TREE-SUCCESSOR 的时间复杂度实际上是在减少的,总体复杂度接近于 ( O(k+h) )。

在Go语言中,可以通过实现一个二叉搜索树并编写 TREE-SUCCESSOR 函数来证明这一点。由于具体实现代码较长,这里提供一个大致的框架作为参考:

type TreeNode struct {Value intLeft  *TreeNodeRight *TreeNode
}
func (t *TreeNode) TREE_SUCCESSOR() *TreeNode {// 实现找到后继结点的逻辑
}
func (t *TreeNode) TREE_SUCCESSOR_ktimes(k int) *TreeNode {// 实现k次连续的后继结点查找// 每次查找都是从上一次的结点开始,而不是从根节点
}
func main() {// 构建一棵高度为h的二叉搜索树// 实现并测试TREE_SUCCESSOR_ktimes函数
}

具体实现时,需要根据二叉搜索树的性质来设计 TREE_SUCCESSORTREE_SUCCESSOR_ktimes 函数的实现细节。

在这里插入图片描述

在这里插入图片描述

通义千问:

为了证明在高度为 h 的二叉搜索树中,不论从哪个结点开始,k 次连续的 TREE-SUCCESSOR 调用所需时间为 O(k+h),我们需要分析一下TREE-SUCCESSOR操作的时间复杂度,并考虑最坏情况下的路径。

首先,我们要明确的是,对于一个给定的节点 x,在二叉搜索树(BST)中找到其后继节点通常需要沿着右子树进行查找。如果 x 有右子树,那么其后继节点就是其右子树中的最小元素。如果没有右子树,那么我们就需要向上回溯,直到遇到第一个大于 x 的节点作为后继节点。

考虑到最坏的情况,我们每次调用 TREE-SUCCESSOR 都是从左子树的根节点开始。这是因为当从右子树的某个节点开始时,我们可以直接到达下一个更大的值,而不需要遍历整个右子树。因此,我们的路径将形成一种类似于链表顺序访问的模式,每次都向下走到底部然后返回到父节点。

由于树的高度为 h,那么我们最多需要向下移动 h 层才能达到叶子节点。每层需要花费 O(1) 时间进行比较和转移。因此,总共需要 O(h) 时间来达到最底层。

接下来是 k 次连续的 TREE-SUCCESSOR 调用。在这个过程中,我们将沿着底部的连续节点向右移动,每个节点之间的距离都是常数时间。因为这些节点是在一条直线上,所以我们可以认为这是对 k 个相邻节点的访问,每个访问需要 O(1) 时间。因此,这个过程总共需要 O(k) 时间。

综上所述,我们得到总时间复杂度为 O(k + h),即在一个高度为 h 的二叉搜索树中,不论从哪个结点开始,k 次连续的 TREE-SUCCESSOR 调用所需时间为 O(k+h)。

以下是一个简单的 Go 代码实现:

type TreeNode struct {Value intLeft, Right *TreeNode
}func treeSuccessor(root *TreeNode, node *TreeNode) *TreeNode {if root == nil || node == nil {return nil}if node.Right != nil {// 如果当前节点有右子树,则后继节点为其右子树中的最小节点current := node.Rightfor current.Left != nil {current = current.Left}return current} else {// 否则,向上回溯找到第一个大于当前节点的节点parent := node.Parentfor parent != nil && node == parent.Right {node = parentparent = parent.Parent}return parent}
}func kSuccessors(root *TreeNode, startNode *TreeNode, k int) []*TreeNode {var result []*TreeNodecurrent := startNodefor i := 0; i < k && current != nil; i++ {result = append(result, current)current = treeSuccessor(root, current)}return result
}

请注意,上述代码仅用于演示基本概念,实际使用时可能需要添加边界条件检查等优化。

在这里插入图片描述

在这里插入图片描述

天工:

好的,以下是用 Go 语言和数学证明来证明这个问题。

假设我们有一棵高度为 h 的二叉搜索树,其中根节点的深度为 h - 1。我们从根节点开始,进行 k 次连续的 TREE-SUCCESSOR 调用。对于每次调用,我们都可以将其看作是从一个高度为 h 的二叉搜索树中选择一个节点作为子树的根节点,然后递归地遍历这个子树。

我们可以使用递归的方式来模拟这些调用:

func postOrderSuccessor(parent *Node, node *Node) *Node {if parent.left != nil && parent.left.val < node.val {return postOrderSuccessor(parent.left, parent.right)}if parent.right != nil && parent.right.val > node.val {return postOrderSuccessor(parent.right, parent.left)}return node
}func main() {// 初始化树root := newNode(4)root.left = newNode(2)root.right = newNode(6)root.left.left = newNode(1)root.left.right = newNode(3)// 进行 k 次连续的 TREE-SUCCESSOR 调用for i := 1; i <= k; i++ {successor := postOrderSuccessor(root, root.right)fmt.Printf("successor %d at depth %d\n", successor.val, i)}
}

在上述代码中,我们定义了一个 postOrderSuccessor 函数来模拟 TREE-SUCCESSOR 调用,其中 parentnode 分别表示当前节点的父节点和要查找的节点。每次调用 postOrderSuccessor 函数时,我们都将其视为从一个高度为 h 的二叉搜索树中选择一个节点作为子树的根节点,然后递归地遍历这个子树。

我们可以通过分析递归调用的深度和时间复杂度来证明这个问题。对于每次递归调用,它的深度为 h + 1(因为它是在一个高度为 h 的子树中查找一个节点)。因此,k 次递归调用的总深度为 k * (h + 1)。由于每次递归调用都需要访问一个节点,所以总时间为 k * (h + 1) * t,其中 t 是访问一个节点所需的时间。

由于每次递归调用的深度都是 h + 1,因此总深度为 k * (h + 1) = O(kh)。由于每次访问一个节点所需的时间为常数时间,所以总时间为 k * (h + 1) * t = O(kh)。因此,我们可以证明,在一棵高度为 h 的二叉搜索树中,不论从哪个结点开始,k 次连续的 TREE-SUCCESSOR 调用所需时间为 O(k+h)。

在这里插入图片描述

在这里插入图片描述

灵小智:

在使用Go语言证明在一棵高度为h的二叉搜索树中,不论从哪个节点开始,k次连续的TREE-SUCCESSOR调用所需时间为O(k+h)。

首先,我们需要了解TREE-SUCCESSOR操作的定义和二叉搜索树的性质。TREE-SUCCESSOR操作用于在二叉搜索树中查找给定节点的后继节点(即比给定节点大的最小节点)。而二叉搜索树是一种特殊的二叉树结构,其中对于每个节点,其左子树上的节点值都小于该节点,右子树上的节点值都大于该节点。

现在,我们将证明每次TREE-SUCCESSOR调用所需的时间为O(h),其中h为树的高度。

首先考虑一个TREE-SUCCESSOR调用的情况。当我们从根节点开始,逐步向下遍历二叉搜索树,直到找到目标节点时,TREE-SUCCESSOR操作的时间复杂度为O(h),其中h是树的高度。

接下来,考虑k次连续的TREE-SUCCESSOR调用。假设我们从根节点开始,依次调用TREE-SUCCESSOR操作k次。每次调用TREE-SUCCESSOR操作时,我们要么在当前节点的右子树中找到后继节点,要么沿着父节点向上回溯直到找到后继节点。

由于二叉搜索树的性质,在最坏情况下,每次调用TREE-SUCCESSOR操作都会导致向上回溯到根节点。因此,总共的时间复杂度为O(h+k),其中h是树的高度,k是连续调用的次数。

综上所述,我们证明了在一棵高度为h的二叉搜索树中,不论从哪个节点开始,k次连续的TREE-SUCCESSOR调用所需的时间为O(k+h)。

在这里插入图片描述

chatgpt:

首先,我们需要明确 TREE-SUCCESSOR 是二叉搜索树中的一个操作,它用于找到给定结点的后继节点。

证明:
在一棵高度为 h 的二叉搜索树中,不论从哪个结点开始,k 次连续的 TREE-SUCCESSOR 调用所需时间为 O(k+h)。

假设我们从任意结点开始进行 TREE-SUCCESSOR 调用。

在最坏情况下,每次调用 TREE-SUCCESSOR 都沿着树向下移动一层(直到叶子节点)或者向上移动一层(直到找到后继节点)。

对于每次调用 TREE-SUCCESSOR:

  • 如果当前结点有右子树,则通过右孩子找到下一个后继节点,并将时间复杂度记为 O(1)。

  • 如果当前结点没有右子树,则需要向上遍历直到找到第一个祖先结点,并且该祖先结点是其父节点的左孩子。这是因为二叉搜索树的性质决定了该祖先结点就是当前结点的后继节点。在最坏情况下,需要向上遍历 h 层才能找到后继节点,并将时间复杂度记为 O(h)。

因此,在 k 次连续的 TREE-SUCCESSOR 调用过程中,

  • 对于每次调用带来的右子树情况,时间复杂度为 O(1)。

  • 对于每次调用带来的向上遍历情况,时间复杂度为 O(h)。

由于 TREE-SUCCESSOR 调用是连续的,我们可以将这 k 次调用中涉及到向上遍历的情况合并计算。最多需要向上遍历 h 层才能找到后继节点。因此,在 k 次连续调用中,所有向上遍历操作的总时间复杂度为 O(k*h)。

综上所述,在一棵高度为 h 的二叉搜索树中,不论从哪个结点开始进行 k 次连续的 TREE-SUCCESSOR 调用,总体时间复杂度为 O(k+h),其中包括了 O(k1) 和 O(kh) 两种操作。

在这里插入图片描述

kimi:

在这个证明中,我们将分析在高度为 h 的二叉搜索树(BST)中,从任意节点开始,执行 k 次连续的 TREE-SUCCESSOR 调用所需的时间。

1.首先,我们需要找到给定节点的 TREE-SUCCESSOR。在最坏的情况下,这可能需要沿着树的高度向下遍历,直到找到一个没有右子节点的节点。这需要 O(h) 的时间。

2.接下来,我们需要执行 k-1 次 TREE-SUCCESSOR 调用。在每次调用中,我们可能需要在树中向上遍历以找到当前节点的最近祖先(具有右子节点的节点),然后找到该祖先节点的左子树中的最右节点。在最坏情况下,每次调用的时间复杂度为 O(h)。

现在,我们来计算总时间复杂度。第一次调用需要 O(h) 的时间,接下来的 k-1 次调用每次需要 O(h) 的时间。因此,总时间复杂度为 O(h) + (k-1) * O(h) = O(k * h)。

所以,在一棵高度为 h 的二叉搜索树中,不论从哪个节点开始,k 次连续的 TREE-SUCCESSOR 调用所需时间为 O(k+h)。这里我们假设 k 是一个常数,那么时间复杂度可以简化为 O(h)。在实际应用中,k 通常是一个小常数,因此这个算法的效率是可以接受的。

在这里插入图片描述

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

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

相关文章

VSCODE 运行C程序缓慢解决方法之一

最近更换了mingw的版本&#xff0c;安装路径与之前的mingw路径不大一样。结果发现代码运行的时候很慢&#xff0c;弹出窗口后&#xff0c;迟迟没有打印任何东西&#xff0c;就像卡死了一样。试过网上说的一堆方法&#xff0c;没有什么用。 我按照以下流程进行检查: 1.检查min…

地震反演基础知识3

文章目录 地震勘探原理1 地震波1. 1 地震波概念1. 2 波的传播1. 2. 1 波传播的基本原理1. 2. 2 地震波的反射,折射,透射的1. 2. 3 地震子波&#xff08;seismic wavelet&#xff09;1. 2. 4 地震合成记录 2 地震时距曲线2.1 地震时距曲线作用2.2 不同波的时距曲线2.2.1 直达波时…

【Jeecg Boot 3 - 保姆级】第1节 docker + redis + nginx + redis一键安装启动

一、前言 ▶ JEECG-BOOT 开源版难以吃透的原因 ▶ 为了针对上面痛点&#xff0c;笔者做了如下安排 ▶ 你能收获什么 二、效果(第一节效果) ▶ 启动后端 &#xff1e; 日志 &#xff1e; 接口文档 ▶ 启动前端 三、准备工作 四、实战 ▶ 1、服务器安装 Stag…

2024年甘肃省职业院校技能大赛信息安全管理与评估赛项二三阶段样题一

2024年甘肃省职业院校技能大赛高职学生组电子与信息大类信息安全管理与评估赛项样题一 第二阶段 任务书 任务描述 随着网络和信息化水平的不断发展&#xff0c;网络安全事件也层出不穷&#xff0c;网络恶意代码传播、信息窃取、信息篡改、远程控制等各种网络攻击 行为已严重…

rabbitmq作为celery后端使用rpc://之后AnsycResurt一直是pending

木有找到好办法&#xff0c;2017年issue就提了 改为redis了 https://github.com/celery/celery/issues/4084添加链接描述

3D渲染和动画制作软件KeyShot Pro mac附加功能

KeyShot 11 mac是一款专业化实时3D渲染工具&#xff0c;使用它可以简化3d渲染和动画制作流程&#xff0c;并且提供最准确的材质及光线&#xff0c;渲染效果更加真实&#xff0c;KeyShot为您提供了使用 CPU 或 NVIDIA GPU 进行渲染的能力和选择&#xff0c;并能够线性扩展以获得…

做数据分析为何要学统计学(4)——什么问题适合使用卡方检验?

卡方检验作为一种非常著名的非参数检验方法&#xff08;不受总体分布因素的限制&#xff09;&#xff0c;在工程试验、临床试验、社会调查等领域被广泛应用。但是也正是因为使用的便捷性&#xff0c;造成时常被误用。本文参阅相关的文献&#xff0c;对卡方检验的适用性进行粗浅…

Linux 多进程并发设计-进程对核的亲缘设置

1设计结构 2 设计优点 1 充分利用多核系统的并发处理能力2 负载均衡3 职责明确&#xff0c;管理进程仅负责管理&#xff0c;工作进程仅负责处理业务逻辑 3 演示代码: //main.cpp #define _GNU_SOURCE #include<sys/types.h> #include<sys/wait.h> #include <…

新生儿出生缺陷筛查的关键注意事项

引言&#xff1a; 新生儿的出生缺陷是一个复杂而广泛的问题&#xff0c;及早的筛查和诊断对于预防和管理这些缺陷至关重要。出生缺陷可能涉及各个系统&#xff0c;包括心脏、神经、遗传等&#xff0c;因此及时而全面的筛查对新生儿的健康至关重要。本文将深入探讨新生儿出生缺…

LocalDateTime加一年取有效期23:59:59

&#x1f60a; 作者&#xff1a; 瓶盖子io &#x1f496; 主页&#xff1a; 瓶盖子io-CSDN博客 打印控制台: 2023-12-08T11:59:13.739 当前系统时间

2023-简单点-python的多路复用小例子

python和多路复用的小栗子 Python 实现的多路复用多路复用如何知道fd就绪了&#xff1f;如何优化时间&#xff1f;优化事件处理 fd的状态有哪些&#xff1f; Python 实现的多路复用 # 导入selectors模块&#xff0c;这个模块可以实现I/O多路复用 import selectors # 导入s…

【数电笔记】53-与非门构成的基本RS触发器

目录 说明&#xff1a; 1. 电路组成 2. 逻辑功能 3. 特性表 4. 特性方程 5. 状态转换图 6. 驱动表 7. 例题 例1 例2 说明&#xff1a; 笔记配套视频来源&#xff1a;B站&#xff1b;本系列笔记并未记录所有章节&#xff0c;只对个人认为重要章节做了笔记&#xff1b…

rollup打包报错“semantic error TS2802”

rollup版本:2.79.1;nodejs:16.16.0;typescript:5.1.6 错误信息 Error: D:/**/*.ts(158,32): semantic error TS2802: Type StyleSheetList can only be iterated through when using the --downlevelIteration flag or with a --target of es2015 or higher. 修改tsconfig.j…

护眼灯有效果吗?考研必备护眼台灯推荐

据统计&#xff0c;中国人口的近视率约为10%至20%。 国家卫健委发布的中国首份眼健康白皮书显示&#xff0c;我国小学生近视率为47.2%&#xff0c;初中生近视率为75.8%&#xff0c;大学生近视率超过90%。据世界卫生组织统计数据显示&#xff0c;目前全球约有14亿近视人口&#…

代码随想录算法训练营第31天|● 理论基础 ● 455.分发饼干 ● 376. 摆动序列 ● 53. 最大子序和

455. 分发饼干 简单 假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。 对每个孩子 i&#xff0c;都有一个胃口值 gi这是能让孩子们满足胃口的饼干的最小尺寸&#xff1b;并且每块饼干 j&#xff0c;都有一个尺寸…

QT作业1

自由发挥登录窗口的应用场景&#xff0c;实现一个登录窗口界面 头文件代码&#xff1a; #ifndef MYWIDGET_H #define MYWIDGET_H#include <QWidget> #include <QIcon> #include <QLabel> //标签类 #include <QMovie> //动图类 #include <…

python获取公网IP的三种方法

一、requests模块(python3) import requestsdef get_public_ip():response requests.get(http://ip-api.com/json)if response.status_code 200:data response.json()if data[status] success:return data[query]return None print(get_public_ip())二、urllib模块(python…

JS 语句语法1

01-js介绍.js // 语法分类&#xff1a;es5、es6&#xff0c;js是弱类型语言。 // es6是对es5语法的优化、查漏补缺。 02-变量声明.js // es5变量声明使用var // 1. 可以重复声明变量&#xff1b; // 2. 存在变量提升&#xff1b; // 变量提升&#xff1a;是js中一种特有的编…

系列学习前端之第 4 章:一文精通 JavaScript

全套学习 HTMLCSSJavaScript 代码和笔记请下载网盘的资料&#xff1a; 链接: 百度网盘 请输入提取码 提取码: 6666 1、JavaScript 格式 一般放在 html 的 <head> 标签中。type&#xff1a;默认值text/javascript可以不写&#xff0c;不写也是这个值。 <script typ…

mybatis数据输出-单个简单类型和返回实体类型对象以及别名设置

1、建库建表 CREATE DATABASE mybatis-example;USE mybatis-example;CREATE TABLE t_emp(emp_id INT AUTO_INCREMENT,emp_name CHAR(100),emp_salary DOUBLE(10,5),PRIMARY KEY(emp_id) );INSERT INTO t_emp(emp_name,emp_salary) VALUES("tom",200.33); INSERT INTO…