文心一言 VS 讯飞星火 VS chatgpt (251)-- 算法导论18.2 4题

四、假设关键字 {1,2,…,n} 被插入一棵最小度数为 2 的空 B 树中,那么最终的B树有多少个结点?如果要写代码,请用go语言。

文心一言:

B树(B-tree)是一种自平衡的树,常用于数据库和文件系统的索引结构。在B树中,每个节点最多有 m 个子节点(对于B树,m 是阶数,即节点的最大子节点数),并且每个非根节点至少有 ⌈m/2⌉ 个子节点(其中 ⌈x⌉ 表示不小于 x 的最小整数)。

对于最小度数为2的B树(通常表示为B_2树),每个节点最多有3个子节点(因为 m = 2*2 - 1 = 3),并且每个非根节点至少有2个子节点。

现在,考虑将关键字 {1, 2, …, n} 插入一个最小度数为2的空B树中。由于B树的性质,节点中的关键字数量将是 ⌈m/2⌉ - 1 到 m - 1 之间,即1到2个关键字对于内部节点,而对于叶子节点,由于它们是外部节点,它们可以包含从 ⌈m/2⌉ - 1 到 m 个关键字,即1到3个关键字。

由于我们不知道具体的 n 值,我们无法给出一个确切的节点数,但我们可以根据B树的性质来估算。在最坏的情况下(即B树尽可能地“填满”),内部节点将尽可能多地包含2个关键字,而叶子节点将尽可能多地包含3个关键字。

但是,为了得到精确的节点数,我们需要实际地模拟B树的插入过程。由于这涉及到B树操作的复杂性,这里只提供一个大致的算法思路,而不是完整的Go代码实现。

算法思路:

初始化一个空的B_2树,只有一个根节点(并且没有关键字)。
遍历关键字集合 {1, 2, …, n},对于每个关键字:
尝试将其插入到B树中。
如果插入导致节点分裂,处理分裂并将一些关键字上推到父节点(如果父节点已满,则可能进一步分裂和上推)。
重复这个过程,直到根节点也可能分裂(这会导致一个新的根节点被创建)。
计数B树中的节点数。
Go语言实现B树通常涉及定义节点结构和实现插入、分裂等操作的函数。由于这超出了简单的文本回答范围,我无法在这里给出完整的Go代码。但是,你可以根据上面的算法思路来设计和实现你的B树代码。

如果你对B树的实现细节感兴趣,我建议你查阅相关的数据结构和算法教材或在线资源,以获取更详细的信息和示例代码。

讯飞星火:

在一棵最小度数为2的B树中,每个节点最多可以有2个子节点。因此,当我们插入关键字时,如果当前节点未满(即子节点数量少于2),我们可以直接将关键字插入该节点。否则,我们需要将当前节点分裂成两个节点,并将其中一个作为新节点插入到父节点中。

为了计算最终的B树中的节点数量,我们可以使用递归方法。首先,我们将根节点视为一个单独的节点。然后,对于每个关键字,我们将其插入到根节点中。如果根节点已满,则将其分裂成两个新节点,并将其中一个作为新节点插入到父节点中。重复这个过程,直到所有关键字都被插入到B树中。

以下是用Go语言实现的代码:

package mainimport ("fmt"
)type Node struct {Keys  []intChild []*Node
}func NewNode() *Node {return &Node{Keys:  make([]int, 0),Child: make([]*Node, 0),}
}func (n *Node) IsFull() bool {return len(n.Keys) == 2
}func (n *Node) Insert(key int) {if n.IsFull() {// Split the node and insert the key into the appropriate child nodenewNode := NewNode()n.Child = append(n.Child, newNode)index := 0for index < len(n.Keys) && key > n.Keys[index] {index++}if index == len(n.Keys) {newNode.Insert(key)} else {n.Keys = append(n.Keys[:index], append([]int{key}, n.Keys[index:]...)...)}} else {index := 0for index < len(n.Keys) && key > n.Keys[index] {index++}n.Keys = append(n.Keys[:index], append([]int{key}, n.Keys[index:]...)...)}
}func (n *Node) CountNodes() int {count := 1for _, child := range n.Child {count += child.CountNodes()}return count
}func main() {bTree := NewNode()keys := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}for _, key := range keys {bTree.Insert(key)}fmt.Println("Number of nodes in B-tree:", bTree.CountNodes())
}

这段代码首先定义了一个表示B树节点的结构体Node,并实现了NewNodeIsFullInsertCountNodes等方法。然后在main函数中创建了一个空的B树,并插入了一系列关键字。最后,调用CountNodes方法计算B树中的节点数量,并输出结果。

360智脑:

首先,我们需要明确B树的概念。B树是一种自平衡树,与AVL树和红黑树不同,B树允许非叶子节点有指向关键字的指针,这意味着每个节点可以拥有多个子节点。B树的最小度数t是指每个节点至少拥有的子节点数。

在这个问题中,关键字集合{1, 2, …, n}被插入到一棵最小度数为2的空B树中。这意味着每个非叶子节点都有至少2个子节点。我们将通过一个简单的归纳过程来计算最终的B树结点总数。

基础情况:
当n = 1时,B树只有一个根节点,包含关键字1,总共有1个结点。

归纳步骤:
假设当n = k时,B树有a(k)个结点。现在考虑将n = k+1时的关键字插入到这个B树中。因为B树的最小度数为2,所以每个非叶子节点都有至少2个子节点。这意味着在插入k+1个关键字后,每个非叶子节点都至少分裂过一次,导致树的高度增加了1。具体来说,插入第k+1个关键字后,树的最右分支增加了一个新的度为1的节点(包含关键字k+1)和一个新的度为0的叶子节点。因此,总的节点数增加了1。

所以,当n = k+1时,B树的结点总数为a(k) + 1。

通过这个递推关系,我们可以得出B树的结点总数为:

a(n) = a(n-1) + 1

这意味着每次插入一个新关键字,结点总数就增加1。因此,对于n个关键字,最终的B树有n个结点。

下面是一个简单的Go语言代码示例来模拟这个插入过程并计算B树的结点总数:

package mainimport "fmt"func bTreeInsert(root **Node, key int) {// 如果树为空,创建一个新的节点if *root == nil {*root = newNode(key)return}// 如果节点不为空,递归插入if key < (*root).key {bTreeInsert(&(*root).left, key)} else if key > (*root).key {bTreeInsert(&(*root).right, key)} else {// Key already present in tree, no need to insertreturn}
}type Node struct {key   intleft  *Noderight *Node
}func newNode(key int) *Node {return &Node{key: key}
}func main() {var root *Nodefor i := 1; i <= 10; i++ {bTreeInsert(&root, i)}fmt.Println("Total number of nodes in the B-tree:", countNodes(root))
}func countNodes(root *Node) int {if root == nil {return 0}return 1 + countNodes(root.left) + countNodes(root.right)
}

请注意,上述代码是一个简化的B树插入示例,它假设B树的每个节点只存储一个关键字,并且没有考虑B树的其他特性,如多路性。这只是一个基本的演示如何使用Go语言来构建和遍历B树的示例。在实际应用中,B树的实现会更加复杂。

智谱清言:

B树是一种自平衡的树,它的每个结点都包含一定数量的键(或者关键字)和子结点指针。每个结点除了根结点外,都至少包含两个子结点。B树的最小度数(t)决定了树的结构。对于最小度数为2的B树,每个结点至少有两个子结点。

当关键字 {1,2,…,n} 被插入一个最小度数为2的空B树时,每个结点在插入过程中会尽可能地保持平衡,即每个结点在插入新元素后,如果结点的子结点数量大于等于t,则不会发生分裂。但如果子结点数量小于t-1,则可能会发生分裂。

对于最小度数为2的B树,插入第一个元素时,根结点只有一个元素;插入第二个元素时,根结点会分裂成两个结点,其中一个结点有一个元素,另一个结点有两个元素;插入第三个元素时,可能会触发其中一个结点的再次分裂,以此类推。

因此,问题可以转化为求解将n个元素插入到最小度数为2的B树中,根结点分裂的次数。

在Go语言中,我们可以使用如下代码来估算这个B树最终的结点数量:

package main
import ("fmt"
)
// 计算B树的结点数量
func bTreeNodeCount(n int) int {// 初始化根结点root := &bTreeNode{elements: []int{1},children: []*bTreeNode{},}return insertElements(root, []int{2, 3, 4}, n)
}
// B树结点结构
type bTreeNode struct {elements []intchildren []*bTreeNode
}
// 插入元素到B树
func insertElements(node *bTreeNode, elements []int, n int) int {// 插入元素for _, elem := range elements {node.elements = append(node.elements, elem)n--// 检查是否需要分裂if n == 0 || len(node.elements)>=2{// 分裂结点splitNode(node)// 递归插入剩余元素n = bTreeNodeCount(n)node = node.children[0]}}return n
}
// 分裂B树结点
func splitNode(node *bTreeNode) {// 创建新结点newNode := &bTreeNode{elements: node.elements[len(node.elements)/2:],children: []*bTreeNode{},}// 移除分割元素node.elements = node.elements[:len(node.elements)/2]// 添加新结点到子结点列表node.children = append(node.children, newNode)// 调整新结点的子结点if len(newNode.elements) > 1 {newNode.children = append(newNode.children, &bTreeNode{elements: newNode.elements[:len(newNode.elements)/2],children: []*bTreeNode{},})newNode.elements = newNode.elements[len(newNode.elements)/2:]}if len(node.elements) > 1 {node.children = append(node.children, &bTreeNode{elements: node.elements[len(node.elements)/2:],children: []*bTreeNode{},})node.elements = node.elements[:len(node.elements)/2]}
}
func main() {n := 1000 // 假设我们有1000个元素count := bTreeNodeCount(n)fmt.Printf("最终的B树有 %d 个结点\n", count)
}

这段代码模拟了将关键字 {1,2,…,n} 插入最小度数为2的B树的过程,并计算最终B树的结点数量。需要注意的是,这里的

天工:

首先,我们来确定插入关键字{1, 2, …, n} 到一个最小度为2的B树中后,该B树的结构。

由于B树的最小度为2,这意味着除了根结点以外,每个非叶子结点至少有2个孩子结点。因此,我们可以推断出,当我们将n个元素插入到这样的B树中时,树的高度不会超过log2(n/2+1),因为在完全情况下,树的高度等于log2(n/2+1)。

现在,让我们来确定这个B树的具体结构。对于最小度为2的B树,我们可以得出以下结论:

  • 如果n = 1,树的结构将是一个单独的根节点,包含一个键值对 (1) 和两个指针(分别指向空子树)。
  • 如果 n > 1,树的结构将由多个层次组成。在这种情况下,根节点至少包含一个键值对,并且可能包含更多的键值对,取决于子节点的数量和键值的分布。

为了计算插入n个元素后的B树中的总节点数,我们可以使用递归关系。假设f(h)表示高度为h的B树中的总节点数(包括根节点)。那么,对于一个高度为 h+1 的B树,它的总节点数将是 f(h) + f(h-1) * 2 - 1,其中 f(h-1) * 2 - 1 表示从高度 h-1 的 B树中分离出的两个子树各自增加了一个节点(因为每个非叶子结点至少有2个孩子结点)。

现在让我们来看看如何使用 Go 语言来实现这个算法。

package mainimport "fmt"// 计算插入n个元素后的最小度为2的B树中的总节点数
func calculateTotalNodes(n int) int {if n == 0 {return 0}height := int(math.Floor(math.Log2((float64(n)/2)+1)))totalNodes := 1 // 根节点for i := 0; i < height; i++ {// 每一层的节点数都是前一层的节点数加上前一层的节点数乘以2再减去1// 因为每一层都会从上一层分离出两个子树,每一个子树都会增加一个节点totalNodes += (totalNodes*2 - 1)}return totalNodes
}func main() {n := 10 // 可以修改n为其他值进行测试fmt.Println("For n =", n, "the total number of nodes in a B tree of order 2 is:", calculateTotalNodes(n))
}

注意:上述代码中的 math.Floormath.Log2 函数分别用于向下取整和以2为底的对数计算,这些函数在 Go 语言的 math 包中提供。此外,由于Go语言没有内置的大数支持,所以当处理非常大的n值时,可能需要使用其他库来处理大数运算。

灵小智:

在一个最小度数为2的空B树中,节点的数量取决于输入关键字的数量n。

B树有以下几个特点:

1.根节点至少有两个子节点。

2.除了根节点和叶子节点外,每个节点至少有t-1个关键字(t为最小度数)。

3.所有叶子节点都位于同一层级。

对于一个空的B树,所有关键字都作为叶子节点插入。由于最小度数为2,每个节点至少有一个关键字和两个孩子指针。因此,每个叶子节点能容纳的关键字数量为2-1=1。

假设输入关键字数量为n,在B树中最多需要n个叶子节点来容纳这些关键字。每个叶子节点至少包含一个关键字,因此B树中的节点数量至少为n个。

另外,根据B树的特点,在插入过程中,可能会出现节点 ** 的情况,即一个节点中的关键字数量超过了上限。当节点 ** 时,B树的节点数量会增加。但是,在一个空的B树中,所有的关键字都是作为叶子节点插入的,不存在节点 ** 的情况。

因此,在一个最小度数为2的空B树中,最终的B树节点数量为n。

chatgpt:

在一个最小度数为 2 的B树中,每个非根内部节点至少包含2个孩子(子节点),根节点至少有2个孩子,因此每个节点至少包含1个键。每个节点包含的键的数量介于 t-1 和 2t-1 之间,其中 t 是B树的最小度数。

假设有 n 个关键字需要插入B树中。对于一个B树,我们可以计算节点数的上界:

  • 根节点至少有一个键和两个孩子。
  • 第二层的节点至少有一个键和两个孩子。
  • 对于高度为 h 的树,每个节点除了根节点以外都至少包含 t-1 个键和 t 个孩子。

因此,通过这种方式,我们可以计算B树中节点的上界个数。

下面是用Go语言实现计算B树中节点数的代码:

package mainimport ("fmt""math"
)func calculateNodes(n, t int) int {upperBound := 1 // 根节点currentLevelNodes := 1for currentLevelNodes < n {upperBound += int(math.Ceil(float64(currentLevelNodes) / float64(t-1))) * tcurrentLevelNodes *= t}return upperBound
}func main() {n := 10  // 假设关键字为 {1,2,...,n}t := 2   // B树的最小度数为 2nodesCount := calculateNodes(n, t)fmt.Printf("B树中共有 %d 个节点\n", nodesCount)
}

在这个代码示例中,我们定义了calculateNodes函数来计算B树中节点的上界个数。在main函数中,我们假设有10个关键字需要插入到B树中,最小度数为2,然后计算B树的节点个数并输出结果。

您可以根据需要调整nt的值,以查看不同情况下B树中节点的数量。

在这里插入图片描述

在这里插入图片描述

kimi:

在最小度数为 2 的 B 树中,每个内部节点(除了根节点)至少有 2 个键值和 3 个子节点(因为每个键值对应一个子节点)。为了确定插入关键字 {1, 2, …, n} 后 B 树的节点总数,我们需要考虑 B 树的构建规则。

对于最小度数为 2 的 B 树,每个内部节点可以有的键值数量范围是 [2, 4]。当节点达到最大键值数量时,它会分裂成两个节点,每个节点包含一半的键值,并且中间的键值提升到父节点中。

根节点可以有 1 个键值(如果它是唯一的节点)或者至少 2 个键值(如果树中有其他节点)。当根节点分裂时,B 树的高度会增加。

为了简化计算,我们可以考虑最满的情况,即每个内部节点都有 4 个键值和 5 个子节点。在这种情况下,每个节点的键值数量最大化,因此节点数量最小化。

假设 B 树的高度为 h,那么根节点有 2 个键值,其他每层有 2^(h-1) 个节点,每层的节点都有 4 个键值。由于每个节点有 4 个键值,所以除了根节点外,树中总共有 (n - 2) / 4 个内部节点的键值。因此,我们可以建立以下等式来计算高度 h:

2 + 4 * (2^(h-2)) >= n

解这个不等式,我们可以找到满足条件的最小高度 h。然后,我们可以计算节点总数,节点总数是所有层的节点数之和,加上根节点:

节点总数 = 1(根节点)+ 2^1 + 2^2 + ... + 2^(h-1)

这是一个等比数列求和的问题,解为:

节点总数 = 1 + 2 * (1 - 2^h) / (1 - 2)

由于我们要找的是最终的 B 树有多少个节点,我们可以用 Go 语言来编写代码计算高度 h,然后计算节点总数:

package mainimport ("fmt""math"
)// 计算 B 树的高度
func calculateHeight(n int) int {height := 1for 2*(1<<height) < n {height++}return height
}// 计算 B 树的节点总数
func calculateTotalNodes(n int) int {height := calculateHeight(n)return int(1 + 2*(1-math.Pow(2, float64(height)))/(float64(1-2)))
}func main() {n := 7 // 示例,插入关键字的数量totalNodes := calculateTotalNodes(n)fmt.Printf("The total number of nodes in the B-Tree after inserting %d keys is: %d\n", n, totalNodes)
}

在这个 Go 语言程序中,calculateHeight 函数计算插入 n 个关键字后 B 树所需的最小高度。calculateTotalNodes 函数计算 B 树的节点总数。然后在 main 函数中,我们设置插入的关键字数量 n,并调用这些函数来计算节点总数。

在这里插入图片描述

在这里插入图片描述

混元:

在最小度数为 2 的 B 树中插入关键字 {1, 2, …, n} 时,每个节点最多可以有 2 个子节点

  1. 当 n = 1 时,只有一个关键字,所以只需要一个节点。
  2. 当 n = 2 时,有两个关键字,可以将它们放入同一个节点。
  3. 当 n > 2 时,每个节点可以包含 1 个关键字和 2 个子节点。因此,我们可以将关键字分成 ceil(n/2) 组,每组包含 2 个关键字(除了最后一组可能只有 1 个关键字)。这样,我们可以得到 ceil(n/2) 个节点。

以下是使用 Go 语言实现的函数,用于计算在最小度数为 2 的 B 树中插入关键字 {1, 2, …, n} 时的节点数量:

package mainimport ("fmt""math"
)func countNodesInBTree(n int) int {if n == 1 {return 1}if n == 2 {return 1}return int(math.Ceil(float64(n) / 2.0))
}func main() {fmt.Println(countNodesInBTree(1)) // 输出 1fmt.Println(countNodesInBTree(2)) // 输出 1fmt.Println(countNodesInBTree(3)) // 输出 2fmt.Println(countNodesInBTree(4)) // 输出 2fmt.Println(countNodesInBTree(5)) // 输出 3
}

这个函数接受一个整数 n 作为输入,表示关键字的数量,并返回一个整数,表示最终的 B 树中的节点数量。

在这里插入图片描述

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

2024年钉钉群直播回放如何永久保存

工具我已经打包好了&#xff0c;有需要的自己取一下 链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;1234 --来自百度网盘超级会员V10的分享 1.首先解压好我给大家准备好的压缩包 2.再把逍遥一仙下载器压缩包也解压一下 3.打开逍遥一仙下载器文件夹里面的M3U8…

2022蓝桥杯国赛

题目描述&#xff1a; 思路&#xff1a; 题主用了两个方法&#xff0c;一个是三维数组&#xff0c;1到2022个数可以当成编号&#xff0c;f[i][j][k]表示前i个数选了j个数总和为k&#xff0c;存在是否选择第i个数的问题&#xff0c;选择第i个数为f[i-1][j-1][k-i];没有选择第i个…

计算机网络实验——学习记录六(TCP协议流量控制分析)

1. nc -d 5 -lv 4499 > 10K.1 其中&#xff1a; &#xff08;1&#xff09;-d 5 表示建立连接之后&#xff0c;延迟5秒再读取数据&#xff1b; &#xff08;2&#xff09;> 10K.1 表示将输出重定向到文件10K.1中&#xff1b; 2. 零窗口通知报文 3. 窗口探测报文

Gitea 上传用户签名

在 Gitea 的用户管理部分&#xff0c;有一个 SSH 和 GPG 的选项。 单击这个选项&#xff0c;可以在选项上添加 Key。 Key 的来源 如是 Windows 的用户&#xff0c;可以选择 Kleopatra 这个软件。 通过这个软件生成的 Key 的界面中有一个导出功能。 单击这个导出&#xff0c;…

Redis 实战3

系列文章目录 本文将从跳跃表的实现、整数集合来展开 Redis 实战 Ⅲ 系列文章目录跳跃表的实现跳跃表节点层 前进指针跨度 整数集合的实现升级升级的好处提升灵活性节约内存 降级整数集合 API总结 跳跃表的实现 Redis 的跳跃表由 redis.h/zskiplistNode 和 redis.h/zskiplist…

nginx--压缩https证书favicon.iconginx隐藏版本号 去掉nginxopenSSL

压缩功能 简介 Nginx⽀持对指定类型的⽂件进行压缩然后再传输给客户端&#xff0c;而且压缩还可以设置压缩比例&#xff0c;压缩后的文件大小将比源文件显著变小&#xff0c;这样有助于降低出口带宽的利用率&#xff0c;降低企业的IT支出&#xff0c;不过会占用相应的CPU资源…

FreeRTOS学习——FreeR TOS队列(下)

本篇文章记录我学习FreeRTOS的队列的相关知识&#xff0c;在此记录分享一下&#xff0c;希望我的分享对你有所帮助。 FreeRTOS学习——FreeRTOS队列&#xff08;上&#xff09;-CSDN博客 一、FreeRTOS队列的创建 &#xff08;一&#xff09;、函数原型 在使用队列之前必须先创…

【Linux 系统】进程信号 -- 详解

⚪前言 注意&#xff1a;进程间通信中的信号量跟下面要讲的信号没有任何关系。 一、从不同角度理解信号 1、生活角度的信号 你在网上买了很多件商品&#xff0c;在等待不同商品快递的到来。但即便快递没有到来&#xff0c;你也知道快递来临时&#xff0c;你该怎么处理快递&a…

Java | Leetcode Java题解之第63题不同路径II

题目&#xff1a; 题解&#xff1a; class Solution {public int uniquePathsWithObstacles(int[][] obstacleGrid) {int n obstacleGrid.length, m obstacleGrid[0].length;int[] f new int[m];f[0] obstacleGrid[0][0] 0 ? 1 : 0;for (int i 0; i < n; i) {for (i…

Python根据预设txt生成“你画我猜”题目PPT(素拓活动小工具)

Python根据预设txt生成“你画我猜”题目PPT&#xff08;素拓活动小工具&#xff09; 场景来源 去年单位内部的一次素拓活动&#xff0c;分工负责策划设置其中的“你画我猜”环节&#xff0c;网络上搜集到题目文字后&#xff0c;想着如何快速做成对应一页一页的PPT。第一时间想…

数据结构与算法-双向链表

1.简介 在使用带头节点的单向链表查找时查找的方向只能是一个方向&#xff0c;而双向链表可以向前或向后查找。例如单向链表只能查到一个节点的下一个节点&#xff0c;但是双向链表不仅可以查到下一个节点&#xff0c;还可以查到上一个节点。 在删除节点时&#xff0c;单向链…

AI-数学-高中-47导数与几何意义

原作者视频&#xff1a;【导数】【考点精华】7导数与几何意义考点解析&#xff08;基础&#xff09;_哔哩哔哩_bilibili 该点处切点的斜率 该点处导函数的值 示例1&#xff1a; 导数问题解决最常用方法&#xff1a;参数分离&#xff0c;在左边函数有解的值域范围内。 示例2&…

数组的定义及实现

文章目录 前言一、定义二、抽象数据类型定义三、顺序存储四、具体实现总结 前言 T_T此专栏用于记录数据结构及算法的&#xff08;痛苦&#xff09;学习历程&#xff0c;便于日后复习&#xff08;这种事情不要啊&#xff09;。所用教材为《数据结构 C语言版 第2版》严蔚敏。 一、…

21世纪世界最具影响力的华人颜廷利:乱与净之中的汉字智慧

人类离不开‘卵’字&#xff0c; 众生离不开‘乱’&#xff08;与‘卵’同音&#xff09;字&#xff1b; 生命离不开‘精’字&#xff0c; 升命离不开‘净’&#xff08;与‘精’同音&#xff09;字…&#xff08;升命学说&#xff09; 21世纪东方哲学家思想家、科学家、当代中…

量化研究---pywencai问财数据的使用,提供源代码

文章链接 量化研究---pywencai问财数据的使用,提供源代码 (qq.com) pywencai是一个强大的第三方库库&#xff0c;开源的源代码&#xff0c;但是教程比较少&#xff0c;我简单的写一个教程结合我的使用&#xff0c;也开源直接访问我网页 网页http://120.78.132.143:8023/wencai…

Unity开发微信小游戏(2)分享

目录 1.概述 2.代码 3.示例 4.个人作品 1.概述 这里我们能做有两件事&#xff1a; 1&#xff09;主动发起分享 2&#xff09;监听右上角分享&#xff08;...按钮&#xff0c;发朋友圈也在这里&#xff09; API&#xff1a;官方文档 2.代码 1&#xff09;主动发起分享&…

数据结构与算法-单向环形链表与约瑟夫问题

1.简介 单向环形链表&#xff0c;闭合的形成一个环。 单向环形链表的一个应用场景是约瑟夫问题。 约瑟夫问题为&#xff1a;设编号为1&#xff0c;2&#xff0c;…&#xff0c;n的n个人围坐一圈&#xff0c;约定编号为k(1<k<n)的人从1开始报数&#xff0c;数到m的那个人…

ESP32 烧录固件

第一步&#xff1a;下载固件 git clone --recursive https://github.com/espressif/esp-at.git 第二步&#xff1a;执行编译 在该目录执行 python build.py install 如图&#xff1a; 第三步&#xff1a;选择芯片 输入2 第四步&#xff1a;选择固件 输入1 第五步&#…

eNSP-抓包解析HTTP、FTP、DNS协议

一、环境搭建 1.http服务器搭建 2.FTP服务器搭建 3.DNS服务器搭建 二、抓包 三、http协议 1.HTTP协议&#xff0c;建立在FTP协议之上 2.http请求 3.http响应 请求响应报文参考&#xff1a;https://it-chengzi.blog.csdn.net/article/details/113809803 4.浏览器开发者工具抓包…

分布式事务—> seata

分布式事务之Seata 一、什么是分布式事务&#xff1f; 分布式事务是一种特殊类型的事务&#xff0c;它涉及多个分布式系统中的节点&#xff0c;包括事务的参与者、支持事务的服务器、资源服务器以及事务管理器。 在分布式事务中&#xff0c;一次大型操作通常由多个小操作组成…