【c++】搜索二叉树的模拟实现

搜索二叉树的模拟实现

k模型完整代码

#pragma once
namespace hqj1
{template<class K>struct SBTreeNode{public://这里直接用匿名对象作为缺省参数SBTreeNode(const K& key = K()):_key(key), _cleft(nullptr), _cright(nullptr){}public:K _key;SBTreeNode* _cleft;SBTreeNode* _cright;};template<class K>class SBTree{typedef SBTreeNode<K> Node;public:SBTree():_root(nullptr){}bool Insert(const K& key){if (_root == nullptr)_root = new Node(key);else{Node* cur = _root;Node* parent = nullptr;//找到要插入的位置while (cur){parent = cur;if (cur->_key < key)cur = cur->_cright;else if (cur->_key > key)cur = cur->_cleft;elsereturn false;}//连接cur = new Node(key);if (parent->_key < key)parent->_cright = cur;elseparent->_cleft = cur;}return true;}Node* Find(const K& key){Node* cur = _root;while (cur){if (key > cur->_key)cur = cur->_cright;else if (key < cur->_key)cur = cur->_cleft;elsebreak;}return cur;}bool Erase(const K& key){if (_root == nullptr)return false;else{//找出要删除元素的位置,复用查找函数也行Node* cur = _root;Node* parent = nullptr;while (cur){if (cur->_key == key)break;parent = cur;if (key > cur->_key)cur = cur->_cright;else if (key < cur->_key)cur = cur->_cleft;}//对根进行特判if (parent == nullptr){if (cur->_cleft == nullptr && cur->_cright == nullptr){delete _root;_root = nullptr;}else if (cur->_cleft == nullptr)_root = _root->_cright;else_root = _root->_cleft;return true;}//对不同情况进行处理//第一种是要删除的元素不在树内if (cur == nullptr)return false;else if (cur->_cleft == nullptr && cur->_cleft == cur->_cright){//要删除的元素是叶子节点,直接删if (cur == parent->_cleft)parent->_cleft = nullptr;elseparent->_cright = nullptr;delete cur;}else if (cur->_cleft == nullptr){//有右子树但没有左子树if (cur == parent->_cleft)parent->_cleft = cur->_cright;elseparent->_cright = cur->_cright;delete cur;}else if (cur->_cright == nullptr){//有左子树但没有右子树if (cur == parent->_cleft){parent->_cleft = cur->_cleft;}else{parent->_cright = cur->_cleft;}delete cur;}else{//既有左子树又有右子树//找左子树的最右,或者找右子树的最左节点来替换掉当前要删除的节点Node* curRL = cur->_cright;Node* parentRL = cur;while (curRL->_cleft){parentRL = curRL;curRL = curRL->_cleft;}//交换要删除的值和要删除节点的右树最左节点的值swap(cur->_key, curRL->_key);//判断要删除的节点在其父节点的位置//操控父节点指针//有一个性质:右子树中的最左节点一定没有左子树,我们让父节点连接要删除节点的右子树就行if (curRL == parentRL->_cleft)parentRL->_cleft = curRL->_cright;elseparentRL->_cright = curRL->_cright;delete curRL;curRL = nullptr;}return true;}}void InOrder(){_InOrder(_root);}private:void _InOrder(const Node* root){if (root == nullptr)return;_InOrder(root->_cleft);cout << root->_key << ' ';_InOrder(root->_cright);}Node* _root;};
}

k模型节点的定义

  • 这是一个模板类,模板类型为K,代表着关键词

  • 成员为:关键词、左子树指针、右子树指针

  • 构造函数的参数为K类型的对象,缺省参数为匿名对象(K()),使我们代码的通用性增强

template<class K>struct SBTreeNode{public://这里直接用匿名对象作为缺省参数SBTreeNode(const K& key = K()):_key(key), _cleft(nullptr), _cright(nullptr){}public:K _key;SBTreeNode* _cleft;SBTreeNode* _cright;};

k模型二叉搜索树类的实现

  • 首先将节点类类型重定义为Node方便我们后续的使用

  • 成员函数为插入、删除、查找、中序遍历

  • 私有成员为节点指针_root

template<class K>class SBTree{typedef SBTreeNode<K> Node;public:SBTree():_root(nullptr){}bool Insert(const K& key){if (_root == nullptr)_root = new Node(key);else{Node* cur = _root;Node* parent = nullptr;//找到要插入的位置while (cur){parent = cur;if (cur->_key < key)cur = cur->_cright;else if (cur->_key > key)cur = cur->_cleft;elsereturn false;}//连接cur = new Node(key);if (parent->_key < key)parent->_cright = cur;elseparent->_cleft = cur;}return true;}Node* Find(const K& key){Node* cur = _root;while (cur){if (key > cur->_key)cur = cur->_cright;else if (key < cur->_key)cur = cur->_cleft;elsebreak;}return cur;}bool Erase(const K& key){if (_root == nullptr)return false;else{//找出要删除元素的位置,复用查找函数也行Node* cur = _root;Node* parent = nullptr;while (cur){if (cur->_key == key)break;parent = cur;if (key > cur->_key)cur = cur->_cright;else if (key < cur->_key)cur = cur->_cleft;}//对根进行特判if (parent == nullptr){if (cur->_cleft == nullptr && cur->_cright == nullptr){delete _root;_root = nullptr;}else if (cur->_cleft == nullptr)_root = _root->_cright;else_root = _root->_cleft;return true;}//对不同情况进行处理//第一种是要删除的元素不在树内if (cur == nullptr)return false;else if (cur->_cleft == nullptr && cur->_cleft == cur->_cright){//要删除的元素是叶子节点,直接删if (cur == parent->_cleft)parent->_cleft = nullptr;elseparent->_cright = nullptr;delete cur;}else if (cur->_cleft == nullptr){//有右子树但没有左子树if (cur == parent->_cleft)parent->_cleft = cur->_cright;elseparent->_cright = cur->_cright;delete cur;}else if (cur->_cright == nullptr){//有左子树但没有右子树if (cur == parent->_cleft){parent->_cleft = cur->_cleft;}else{parent->_cright = cur->_cleft;}delete cur;}else{//既有左子树又有右子树//找左子树的最右,或者找右子树的最左节点来替换掉当前要删除的节点Node* curRL = cur->_cright;Node* parentRL = cur;while (curRL->_cleft){parentRL = curRL;curRL = curRL->_cleft;}//交换要删除的值和要删除节点的右树最左节点的值swap(cur->_key, curRL->_key);//判断要删除的节点在其父节点的位置//操控父节点指针//有一个性质:右子树中的最左节点一定没有左子树,我们让父节点连接要删除节点的右子树就行if (curRL == parentRL->_cleft)parentRL->_cleft = curRL->_cright;elseparentRL->_cright = curRL->_cright;delete curRL;curRL = nullptr;}return true;}}void InOrder(){_InOrder(_root);}private:void _InOrder(const Node* root){if (root == nullptr)return;_InOrder(root->_cleft);cout << root->_key << ' ';_InOrder(root->_cright);}Node* _root;};

构造函数

  • 将_root指针初始化为空指针即可

SBTree():_root(nullptr){}

Insert函数

  • Insert函数的参数为要插入的关键字

  • 首先进行判空,如果_root为空,说明此时还没有节点,我们直接给_root赋值就行

  • 如果不为空,那么就需要先找到要插入的位置,我们定义cur和parent两个节点指针,cur负责寻找要插入的位置,parent负责记录cur的父亲节点,由于搜索二叉树的特性,当key值大于cur所指向节点的_key值说明要插入的位置再cur节点的右子树中,反之则在cur的左子树中,通过循环来达到目的,更新cur的同时要更新parent

  • 如果遇到cur的_key和key相等的情况说明插入失败,其余情况皆为插入成功

bool Insert(const K& key){if (_root == nullptr)_root = new Node(key);else{Node* cur = _root;Node* parent = nullptr;//找到要插入的位置while (cur){if (cur->_key == key)return false;parent = cur;if (cur->_key < key)cur = cur->_cright;else if (cur->_key > key)cur = cur->_cleft;}//连接cur = new Node(key);if (parent->_key < key)parent->_cright = cur;elseparent->_cleft = cur;}return true;}

Find函数

  • Find的参数为要查找的关键字

  • 我们定义cur指针来找到目标节点位置,当key > cur->_key时cur要往其右子树寻找,反之则去其左子树寻找,当相等时或者cur指向空(意味着没找到)结束循环,返回cur

  Node* Find(const K& key){Node* cur = _root;while (cur){if (key > cur->_key)cur = cur->_cright;else if (key < cur->_key)cur = cur->_cleft;elsebreak;}return cur;}

Erase函数

  • 该函数的参数为要删除的关键字

  • 当要操作的树为空树时,直接返回失败

  • 不是空树则首先找出要删除节点的位置,同样是定义cur和parent节点指针,cur负责找出要删除节点的位置,parent负责记录cur节点的父节点。利用循环结构实现,循环的结束条件为cur为空指针或者找到对应位置,若为空则说明要删除节点不在树内,直接返回失败

  • 找到之后首先判断是否要操作_root指针,当parent为空时说明要操作根节点,对于根节点的不同类型进行对应的操作1. 如果整棵树只有一个节点,直接删除根节点,并将根节点置为空。2. 如果根节点没有左子树,则用右子树的根节点作为新的整棵树的根节点。3. 如果根节点没有右子树,则用左子树的根节点作为新的整棵树的根节点。4. 如果根节点既有左子树又有右子树,则当作普通节点处理(见下一点的第4小点)

  • 处理完根节点问题后就改判断要删除的节点是哪种类型:1. 删除节点是叶子结点,那么我们直接删除该节点并更新其父亲节点的指针(判断要删除节点是其父情节点的左子树还是右子树,操作对应的指针)2. 有右子树但没有左子树,让其父亲的对应指针指向其右子树,并删除当前节点。3. 有左子树但没有右子树,让其父亲的对应指针指向其左子树,并删除该节点4. 既有左子树又有右子树,定义curRL负责寻找其右子树的最左节点(也就是右子树的最小节点)或者定义curLR左子树的最右节点(也就是左子树的最大节点),定义parentRL记录其父亲节点,与当前节点(cur)的值进行交换,交换完后令parentRL的对应指针指向curRL的右子树,并删除curRL所指向的节点。

  • 所有过程走完后返回状态(成功或者失败)

bool Erase(const K& key){if (_root == nullptr)return false;else{//找出要删除元素的位置,复用查找函数也行Node* cur = _root;Node* parent = nullptr;while (cur){if (cur->_key == key)break;parent = cur;if (key > cur->_key)cur = cur->_cright;else if (key < cur->_key)cur = cur->_cleft;}//对根进行特判if (parent == nullptr){if (cur->_cleft == nullptr && cur->_cright == nullptr){delete _root;_root = nullptr;}else if (cur->_cleft == nullptr)_root = _root->_cright;else_root = _root->_cleft;return true;}//对不同情况进行处理//第一种是要删除的元素不在树内if (cur == nullptr)return false;else if (cur->_cleft == nullptr && cur->_cleft == cur->_cright){//要删除的元素是叶子节点,直接删if (cur == parent->_cleft)parent->_cleft = nullptr;elseparent->_cright = nullptr;delete cur;}else if (cur->_cleft == nullptr){//有右子树但没有左子树if (cur == parent->_cleft)parent->_cleft = cur->_cright;elseparent->_cright = cur->_cright;delete cur;}else if (cur->_cright == nullptr){//有左子树但没有右子树if (cur == parent->_cleft){parent->_cleft = cur->_cleft;}else{parent->_cright = cur->_cleft;}delete cur;}else{//既有左子树又有右子树//找左子树的最右,或者找右子树的最左节点来替换掉当前要删除的节点Node* curRL = cur->_cright;Node* parentRL = cur;while (curRL->_cleft){parentRL = curRL;curRL = curRL->_cleft;}//交换要删除的值和要删除节点的右树最左节点的值swap(cur->_key, curRL->_key);//判断要删除的节点在其父节点的位置//操控父节点指针//有一个性质:右子树中的最左节点一定没有左子树,我们让父节点连接要删除节点的右子树就行if (curRL == parentRL->_cleft)parentRL->_cleft = curRL->_cright;elseparentRL->_cright = curRL->_cright;delete curRL;curRL = nullptr;}return true;}}

kv模型完整代码

#pragma once
namespace hqj2
{template<class K, class V>struct SBTreeNode{public:SBTreeNode(const K& key = K(), const V& value = V()):_cleft(nullptr), _cright(nullptr), _key(key), _value(value){}public:SBTreeNode* _cleft;SBTreeNode* _cright;K _key;V _value;};template<class K, class V>class SBTree{typedef SBTreeNode<K, V> Node;public:SBTree():_root(nullptr){}public:bool Insert(const K& key, const V& value){if (_root == nullptr)_root = new Node(key, value);else{Node* cur = _root;Node* parent = nullptr;while (cur){if (cur->_key == key)return false;parent = cur;if (key > cur->_key)cur = cur->_cright;else if (key < cur->_key)cur = cur->_cleft;}cur = new Node(key, value);if (cur == parent->_cleft)parent->_cleft = cur;elseparent->_cright = cur;}return true;}void InOrder(){_Inorder(_root);}Node*& Find(const K& key){Node* cur = _root;while (cur){if (key > cur->_key)cur = cur->_cright;else if (key < cur->_key)cur = cur->_cleft;elsebreak;}return cur;}bool Erase(const K& key){if (_root == nullptr)return false;Node* cur = _root;Node* parent = nullptr;while (cur){if (cur->_key == key)break;parent = cur;if (key > cur->_key)cur = cur->_cright;else if (key < cur->_key)cur = cur->_cleft;}if (parent == nullptr){if (cur->_cleft == nullptr && cur->_cright == nullptr){delete _root;_root = nullptr;}else if (cur->_cleft == nullptr)_root = _root->_cright;else_root = _root->_cleft;return true;}if (cur->_cleft == nullptr && cur->_cright == nullptr){if (cur == parent->_cleft)parent->_cleft = nullptr;elseparent->_cright = nullptr;delete cur;}else if (cur->_cleft == nullptr){if (cur == parent->_cleft)parent->_cleft = cur->_cright;elseparent->_cright = cur->_cright;delete cur;}else if (cur->_cright == nullptr){if (cur == parent->_cleft)parent->_cleft = cur->_cleft;elseparent->_cright = cur->_cleft;}else{Node* parntRL = nullptr;Node* curRL = cur->_cright;while (curRL->_cleft != nullptr){parntRL = curRL;curRL = curRL->_cleft;}swap(curRL->_key, cur->_key);if (curRL == parntRL->_cleft)parntRL->_cleft = curRL->_cright;elseparntRL->_cright = curRL->_cright;delete curRL;}return true;}private:void _Inorder(const Node* root){if (root == nullptr)return;_Inorder(root->_cleft);cout << root->_key << ' ' << root->_value << ' ' << endl;_Inorder(root->_cright);}Node* _root;};
}

kv模型搜索二叉树的定义

  • 是模板类,模板参数是K和V

  • 成员函数和k模型一模一样

template<class K, class V>class SBTree{typedef SBTreeNode<K, V> Node;public:SBTree():_root(nullptr){}public:bool Insert(const K& key, const V& value){if (_root == nullptr)_root = new Node(key, value);else{Node* cur = _root;Node* parent = nullptr;while (cur){if (cur->_key == key)return false;parent = cur;if (key > cur->_key)cur = cur->_cright;else if (key < cur->_key)cur = cur->_cleft;}cur = new Node(key, value);if (cur == parent->_cleft)parent->_cleft = cur;elseparent->_cright = cur;}return true;}void InOrder(){_Inorder(_root);}Node*& Find(const K& key){Node* cur = _root;while (cur){if (key > cur->_key)cur = cur->_cright;else if (key < cur->_key)cur = cur->_cleft;elsebreak;}return cur;}bool Erase(const K& key){if (_root == nullptr)return false;Node* cur = _root;Node* parent = nullptr;while (cur){if (cur->_key == key)break;parent = cur;if (key > cur->_key)cur = cur->_cright;else if (key < cur->_key)cur = cur->_cleft;}if (parent == nullptr){if (cur->_cleft == nullptr && cur->_cright == nullptr){delete _root;_root = nullptr;}else if (cur->_cleft == nullptr)_root = _root->_cright;else_root = _root->_cleft;return true;}if (cur->_cleft == nullptr && cur->_cright == nullptr){if (cur == parent->_cleft)parent->_cleft = nullptr;elseparent->_cright = nullptr;delete cur;}else if (cur->_cleft == nullptr){if (cur == parent->_cleft)parent->_cleft = cur->_cright;elseparent->_cright = cur->_cright;delete cur;}else if (cur->_cright == nullptr){if (cur == parent->_cleft)parent->_cleft = cur->_cleft;elseparent->_cright = cur->_cleft;}else{Node* parntRL = nullptr;Node* curRL = cur->_cright;while (curRL->_cleft != nullptr){parntRL = curRL;curRL = curRL->_cleft;}swap(curRL->_key, cur->_key);if (curRL == parntRL->_cleft)parntRL->_cleft = curRL->_cright;elseparntRL->_cright = curRL->_cright;delete curRL;}return true;}private:void _Inorder(const Node* root){if (root == nullptr)return;_Inorder(root->_cleft);cout << root->_key << ' ' << root->_value << ' ' << endl;_Inorder(root->_cright);}Node* _root;};

kv模型节点的定义

  • 节点是模板类,模板参数为K和V

  • 成员为左子树指针、右子树指针、关键字、所对应的值

  • 依然以匿名对象作为缺省参数,使得我们程序更加通用

template<class K, class V>struct SBTreeNode{public:SBTreeNode(const K& key = K(), const V& value = V()):_cleft(nullptr), _cright(nullptr), _key(key), _value(value){}public:SBTreeNode* _cleft;SBTreeNode* _cright;K _key;V _value;};

Insert函数

  • 该函数参数为关键字、值

  • 首先判断该树有无节点,无节点则直接给_root赋值,有节点则先找要插入的位置,插入的同时改变其父亲节点所对应的指针

  • 返回值为插入状态

bool Insert(const K& key, const V& value){if (_root == nullptr)_root = new Node(key, value);else{Node* cur = _root;Node* parent = nullptr;while (cur){if (cur->_key == key)return false;parent = cur;if (key > cur->_key)cur = cur->_cright;else if (key < cur->_key)cur = cur->_cleft;}cur = new Node(key, value);if (cur == parent->_cleft)parent->_cleft = cur;elseparent->_cright = cur;}return true;}

Find函数

  • 和k模型的一模一样,不做赘述

Node*& Find(const K& key){Node* cur = _root;while (cur){if (key > cur->_key)cur = cur->_cright;else if (key < cur->_key)cur = cur->_cleft;elsebreak;}return cur;}

Erase函数

  • 和k模型的一模一样,不做赘述

 bool Erase(const K& key){if (_root == nullptr)return false;Node* cur = _root;Node* parent = nullptr;while (cur){if (cur->_key == key)break;parent = cur;if (key > cur->_key)cur = cur->_cright;else if (key < cur->_key)cur = cur->_cleft;}if (parent == nullptr){if (cur->_cleft == nullptr && cur->_cright == nullptr){delete _root;_root = nullptr;}else if (cur->_cleft == nullptr)_root = _root->_cright;else_root = _root->_cleft;return true;}if (cur->_cleft == nullptr && cur->_cright == nullptr){if (cur == parent->_cleft)parent->_cleft = nullptr;elseparent->_cright = nullptr;delete cur;}else if (cur->_cleft == nullptr){if (cur == parent->_cleft)parent->_cleft = cur->_cright;elseparent->_cright = cur->_cright;delete cur;}else if (cur->_cright == nullptr){if (cur == parent->_cleft)parent->_cleft = cur->_cleft;elseparent->_cright = cur->_cleft;}else{Node* parntRL = nullptr;Node* curRL = cur->_cright;while (curRL->_cleft != nullptr){parntRL = curRL;curRL = curRL->_cleft;}swap(curRL->_key, cur->_key);if (curRL == parntRL->_cleft)parntRL->_cleft = curRL->_cright;elseparntRL->_cright = curRL->_cright;delete curRL;}return true;}

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

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

相关文章

Scala语言使用Selenium库编写网络爬虫

目录 一、引言 二、环境准备 三、爬虫程序设计 1、导入必要的库和包 2、启动浏览器驱动程序 3、抓取网页内容 4. 提取特定信息 5. 数据存储和处理 四、优化和扩展 五、结语 一、引言 网络爬虫是一种自动抓取互联网信息的程序。它们按照一定的规则和算法&#xff0c;…

SQL Server SSIS的安装

标题SQL SERVER 安装 下载SQL SERVER数据库&#xff1a;&#xff08;以SQL SERVER 2022 Developer版本&#xff09;(https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads?rtc1) 以administrator权限安装&#xff1a; 下载完成后&#xff0c;会出现以下界面&a…

使用腾讯云轻量服务器安装AList

新人有免费两个月试用轻量服务器&#xff0c;使用云服务器商自带的webshell登录&#xff1b; 我这儿用docker安装Alist&#xff0c;因为服务器没自带docker&#xff0c;所以具体安装docker centos7.0最快速安装docker的方法 通过 Docker 部署 Alist 命令&#xff1a; docke…

GPT-4 Turbo:OpenAI发布旗舰版GPT-4模型,更便宜|更强大|128K上下文|支持多模态

一、介绍 OpenAI 在 2023 年 11 月 7 日举行首届开发者大会&#xff0c;此次展会的亮点无疑是 GPT-4 Turbo 的亮相&#xff0c;它是 OpenAI 著名的 GPT-4 模型的升级版。 GPT-4 Turbo 有两种变体&#xff1a;一种用于文本分析&#xff0c;另一种能够理解文本和图像。 GPT-4 Tu…

机器学习之支持向量机

支持向量机&#xff1a; 超平面&#xff1a;比数据空间少一个维度&#xff0c;为了将数据进行切分&#xff0c;分为不同的类别&#xff0c;决策边界是超平面的一种 决策边界&#xff1a;就是再二分类问题中&#xff0c;找到一个超平面&#xff0c;将数据分为两类&#xff0c;最…

Vue中nextTick的使用及原理

在Vue.js中&#xff0c;nextTick方法可以让我们在DOM更新后执行一些操作。通常情况下&#xff0c;在数据发生变化后&#xff0c;Vue.js会异步地更新DOM&#xff0c;这样可以减少不必要的DOM操作&#xff0c;提高性能。但是&#xff0c;有时候我们需要在DOM更新后对页面进行一些…

VSCode代码调试

1. C Linux上建议用cmake编译&#xff0c;然后用vscode调试&#xff0c;所以只需修改launch.json这个文件&#xff0c;然后点击Run->Start Debugging进行调试 1.1. launch.json文件 打开方式&#xff1a;Run->Open Configurations {"version": "0.2…

安全测试,接口返回内容遍历~

最近公司被人大量爬取数据&#xff0c;查了一下发现&#xff0c;用户主页接口&#xff0c;没有加用户登录校验&#xff0c;返回了用户的敏感信息有手机号和邮箱&#xff0c;其实这个接口是用不到这些信息的。再加上用户id是自增长的&#xff0c;所以很容易被别人爬取。 既然这…

解决kubernetes集群证书过期的问题

现象&#xff1a; 解决办法&#xff1a; 1.在master节点运行&#xff1a; kubeadm alpha certs renew all 2.在master节点运行&#xff1a; rm -f /etc/kubernetes/kubelet.conf && cp /etc/kubernetes/admin.conf /etc/kubernetes/bootstrap-kubelet.conf 3.在maste…

华为fusionInsigtht集群es连接工具

华为fusionInsight为用户提供海量数据的管理及分析功能&#xff0c;快速从结构化和非结构化的海量数据中挖掘您所需要的价值数据。开源组件结构复杂&#xff0c;安装、配置、管理过程费时费力&#xff0c;使用华为FusionInsight Manager将为您提供企业级的集群的统一管理平台,在…

app全屏广告变现,有哪些利弊?如何发挥全屏广告的变现潜力?

全屏广告是APP变现过程中一种广泛应用的广告形式&#xff0c;全屏广告有哪些优势呢&#xff1f;开发者如何发挥全屏广告的变现潜力&#xff0c;最大化变现收益&#xff1f; https://www.shenshiads.com 01、全屏广告的优势 作为一种占据整个屏幕的广告形式&#xff0c;全屏广…

大语言模型(LLM)综述(六):大型语言模型的基准和评估

A Survey of Large Language Models 前言7 CAPACITY AND EVALUATION7.1 基本能力7.1.1 语言生成7.1.2 知识利用7.1.3 复杂推理 7.2 高级能力7.2.1 人类对齐7.2.2 与外部环境的交互7.2.3 工具操作 7.3 基准和评估方法7.3.1 综合评价基准7.3.2 评估方法 7.4 实证评估7.4.1 实验设…

LeetCode 面试题 16.15. 珠玑妙算

文章目录 一、题目二、C# 题解 一、题目 珠玑妙算游戏&#xff08;the game of master mind&#xff09;的玩法如下。 计算机有4个槽&#xff0c;每个槽放一个球&#xff0c;颜色可能是红色&#xff08;R&#xff09;、黄色&#xff08;Y&#xff09;、绿色&#xff08;G&#…

AC修炼计划(AtCoder Regular Contest 163)

传送门&#xff1a;AtCoder Regular Contest 163 - AtCoder 第一题我们只需要将字符串分成两段&#xff0c;如果存在前面一段比后面一段大就成立。 #include<bits/stdc.h> #define int long long using namespace std; typedef long long ll; typedef pair<int,int&g…

安防监控系统EasyCVR平台设备通道绑定AI算法的功能设计与开发实现

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台可拓展性强、…

Leetcode-面试题 02.02 返回倒数第 k 个节点

快慢指针&#xff1a;让快指针先移动n个节点&#xff0c;之后快慢指针一起依次向后移动一个结点&#xff0c;等到快指针移动到链表尾时&#xff0c;慢指针则移动到倒数第n个结点位置。 /*** Definition for singly-linked list.* public class ListNode {* int val;* …

你使用过哪些版本控制工具?

Git&#xff1a;Git 是目前最受欢迎和广泛使用的分布式版本控制系统。它提供了强大的分支管理、合并和版本控制功能&#xff0c;并具有高效的性能和灵活性。Subversion&#xff08;SVN&#xff09;&#xff1a;Subversion 是一个集中式版本控制系统&#xff0c;被广泛用于许多软…

Win10系统下torch.cuda.is_available()返回为False的问题解决

Q: Win10系统下torch.cuda.is_available()返回为False (l2) D:\opt\l2>pythonPython 3.10.12 | packaged by conda-forge | (main, Jun 23 2023, 22:34:57) [MSC v.1936 64 bit (AMD64)] on win32Type "help", "copyright", "credits" or &q…

[ACTF2020 新生赛]BackupFile 1

题目环境&#xff1a; 好好好&#xff0c;让找源文件是吧&#xff1f;咱们二话不说直接扫它后台 使用dirsearch工具扫描网站后台&#xff08;博主有这个工具的压缩包&#xff0c;可以私聊我领取&#xff09;python dirsearch.py -u http://0d418151-ebaf-4f26-86b2-5363ed16530…