当前位置: 首页 > news >正文

数据结构:第7章:查找(复习)

目录

顺序查找:

折半查找:

二叉排序树:

4. (程序题)

平衡二叉树: 


顺序查找:

ASL=\frac{1}{n}\sum i=\frac{1+n}{2}

折半查找:

ASL=\frac{1}{n}\sum_{i=1}^{h}j*2^{j-1}=\frac{n+1}{n}log2(n+1)-1

这里 j 表示 二叉查找树的第 j 层

二叉排序树:

二叉排序树(Binary Search Tree,BST)是一种特殊的二叉树,定义:

  1. 对于二叉排序树的每个节点,其左子树的所有节点的值都小于该节点的值。
  2. 对于二叉排序树的每个节点,其右子树的所有节点的值都大于该节点的值。
  3. 对于二叉排序树的每个节点,其左右子树也分别是二叉排序树。

可以发现二叉排序树的定义时递归定义。

这些性质保证了对于二叉排序树中的任意节点,其左子树的节点值小于它,右子树的节点值大于它,从而形成了一种有序的结构。

二叉排序树的有序性质使得在其中进行查找、插入和删除等操作时具有较高的效率。对于给定的值,可以通过比较节点的值,按照二叉排序树的性质在树中快速定位所需的节点。

二叉排序树的难点在于删除树中的某个值。删除某个键值为 key 的节点时,有三中情况要考虑:

1.该节点 r 的左孩子为空:r=r->lch;

2.该节点 r 的右孩子为空:l=l->rch;

3.该节点的左右孩子均不位空:选择左孩子中 key 值最大的节点替换 r;

4. (程序题)

二叉排序树插入、删除

键盘输入若干整型数据,以0做结束,利用二叉排序树的插入算法创建二叉排序树,并中序遍历该二叉树。之后输入一个整数x,在二叉排序树中查找,若找到则输出“该数存在”,否则输出“该数不存在”;再输入一个要删除的一定存在的整数y,完成在该二叉树中删除y的操作,并输出删除y后的二叉树中序遍历的结果。

输出数据之间用一个空格分隔。

输入:
1 5 4 2 3 6 8 7 9 11 14 13 12 16 19 0
输出:
1 2 3 4 5 6 7 8 9 11 12 13 14 16 19
输入:
19
输出:
该数存在
输入:
14
输出:
1 2 3 4 5 6 7 8 9 11 12 13 16 19

#include<iostream>
#include<string>
#include<cstring>
#include<cmath>
#include<ctime>
#include<algorithm>
#include<utility>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<math.h>
#include<map>
#include<sstream>
#include<deque>
#include<unordered_map>
using namespace std;
typedef long long LL;typedef struct Info {int key;
}Info;typedef struct Node {Info data;struct Node* lch;struct Node* rch;
}Node,*Tree;void print(Tree& r) {if (r == NULL)return;print(r->lch);cout << r->data.key << " ";print(r->rch);
}void Insert(Tree& r, int key) {if (r == NULL) {Node* p = new Node;p->data.key = key;p->rch = p->lch = NULL;r = p;}else if(r->data.key<key) {Insert(r->rch, key);}else {Insert(r->lch, key);}
}void build(Tree& r) {int in;cin >> in;while (in) {Insert(r, in);cin >> in;}
}int search(Tree& r, int key) {if (r == NULL)return 0;if (r->data.key == key) {return 1;}if (r->data.key < key) {if (search(r->rch, key))return 1;}else {if (search(r->lch, key))return 1;}return 0;
}int del(Tree& r, int key) {if (r == NULL)return 0;if (r->data.key == key) {if (r->lch == NULL) {r =r->rch;}else if (r->rch == NULL) {r =r->lch;}else {//cout << r->data.key << endl;Node* p = r->lch;Node* fa = r;while (p->rch != NULL) {fa = p;p = p->rch;}Node* t = r;if (fa != r)fa->rch = p->lch;if (r->lch != p)p->lch = r->lch;p->rch = r->rch;//cout << p->data.key << endl;r = p;delete t;}return 1;}if (r->data.key < key) {if (del(r->rch, key))return 1;}else {if (del(r->lch, key))return 1;}return 0;
}int main() {Node* root = NULL;build(root);print(root);int in;cin >> in;if (search(root, in)) {cout << "该数存在" << endl;}else {cout << "该数不存在" << endl;}cin >> in;del(root, in);print(root);return 0;
}

用例1:

输入

1 5 4 2 3 6 8 7 9 11 14 13 12 16 19 0 19 14

输出

1 2 3 4 5 6 7 8 9 11 12 13 14 16 19 该数存在 1 2 3 4 5 6 7 8 9 11 12 13 16 19

用例2:

输入

10 9 8 7 11 12 13 14 0 14 8

输出

7 8 9 10 11 12 13 14 该数存在 7 9 10 11 12 13 14

用例3:

输入

23 45 67 21 12 15 9 10 55 0 19 9

输出

9 10 12 15 21 23 45 55 67 该数不存在 10 12 15 21 23 45 55 67

平衡二叉树: 

平衡二叉树的定义


平衡二叉排序树查找算法的性能取决于二叉树的结构,而二叉树的形状则取决于其数据集。
如果数据呈有序排列,则二叉排序树是线性的,查找的时间复杂度为O(n);反之,如果二叉排序
树的结构合理,则查找速度较快,查找的时间复杂度为O(logn)。事实上,树的高度越小,查找
速度越快。因此,希望二叉树的高度尽可能小。本节将讨论一种特殊类型的二叉排序树,称为平
衡二叉树
(Balanced Binary Tree 或 Height-Balanced Tree),因由前苏联数学家 Adelson-Velskii 和
Landis 提出,所以又称AVL树。


平衡二叉树或者是空树,或者是具有如下特征的二叉排序树:
(1)左子树和右子树的深度之差的绝对值不超过1;
(2)左子树和右子树也是平衡二叉树。


若将二叉树上结点的平衡因子(Balance Factor,BF)定义为该结点左子树和右子树的深度之
差,则平衡二叉树上所有结点的平衡因子只可能是-1、0和1。只要二叉树上有一个结点的平衡
因子的绝对值大于1,则该二叉树就是不平衡的。图7.11(a)所示为两棵平衡二叉树,而图 7.11
(b)所示为两棵不平衡的二叉树,结点中的值为该结点的平衡因子。

平衡二叉树的调整(重难点)

LL型调整操作由于在A左子树根结点的左子树上插入结点,A的平衡因子由1增至2,致使以A为根的子树失去平衡,则需进行一次向右的顺时针旋转操作 

RR 型调整操作:当在 A 的右子树的右子树上插入结点时,A 的平衡因子由 -1 变为 -2,导致以 A 为根结点的子树失去平衡。此时,需要进行一次向左的逆时针旋转操作,将 A 的右子树作为其左子树的右子树,并将 A 作为其左子树的根结点。

LR型调整操作:由于在A的左子树根结点的右子树上插入结点, A的平衡因子由1增至2,致使以A为根结点的子树失去平衡,则需进行两次旋转操作。第一次对B及其右子树进行递时针旋转,C转上去成为B的根,这时变成了LL型,所以第二次进行LL型的顺时针旋转即可恢复平衡。如果C原来有左子树,则调整C的左子树为B的右子树,


RL型调整操作:由于在A的右子树根结点的左子树上插入结点,A的平衡因子由-1变为-2,致使以A 为根结点的子树失去平衡,则旋转方法和LR型相对称,也需进行两次旋转,先顺时针右旋,再逆时针左旋。

左,右旋转调整代码:mp用来记录某个节点的高度

void Turnleft(TreeNode*& r) {TreeNode* A = r;TreeNode* B = r->right;A->right = B->left;B->left = A;r = B;mp[r->left] -= 2;mp[r] = mp[r->right] + 1;}void Turnright(TreeNode*& r) {TreeNode* A = r;TreeNode* B = r->left;A->left = B->right;B->right = A;r = B;mp[r->right] -= 2;mp[r] = mp[r->left] + 1;}

 判断不平衡类型类型的代码:

void fun1(vector<int>& g, TreeNode* r) {if ( r == NULL||(r->left==NULL&&r->right==NULL))return;if (mp[r->left] == mp[r->right])return;g.push_back(mp[r->left] - mp[r->right]);fun1(g, r->left);fun1(g, r->right);}string check(TreeNode* root) {vector<int>g;fun1(g, root);if (g[0] == 2&&g[1]==1)return "LL";else if (g[0] == 2&&g[1]==-1)return "LR";else {if (g[0] == -2&&g[1]==1)return "RL";return "RR";}return "NO";}

建立平衡二叉树的代码


class Solution {
public:unordered_map<TreeNode*, int>mp;void fun1(vector<int>& g, TreeNode* r) {if (r == NULL || (r->left == NULL && r->right == NULL))return;if (mp[r->left] == mp[r->right])return;g.push_back(mp[r->left] - mp[r->right]);fun1(g, r->left);fun1(g, r->right);}string check(TreeNode* root) {vector<int>g;fun1(g, root);if (g[0] == 2 && g[1] == 1)return "LL";else if (g[0] == 2 && g[1] == -1)return "LR";else {if (g[0] == -2 && g[1] == 1)return "RL";return "RR";}return "NO";}void Turnleft(TreeNode*& r) {TreeNode* A = r;TreeNode* B = r->right;A->right = B->left;B->left = A;r = B;mp[r->left] -= 2;mp[r] = mp[r->right] + 1;}void Turnright(TreeNode*& r) {TreeNode* A = r;TreeNode* B = r->left;A->left = B->right;B->right = A;r = B;mp[r->right] -= 2;mp[r] = mp[r->left] + 1;}void change(TreeNode*& r, string ret) {if (ret == "LL") {Turnright(r);}else if (ret == "RR") {Turnleft(r);}else if (ret == "RL") {Turnright(r->right);Turnleft(r);}else {Turnleft(r->left);Turnright(r);}}void Insert(TreeNode*& r, int key) {if (r == NULL) {TreeNode* p = new TreeNode;p->val = key;p->left = p->right = NULL;r = p;mp[r] = 1;return ;}if (key > r->val) {Insert(r->right, key);}else {Insert(r->left, key);}mp[r] = max(mp[r->left], mp[r->right]) + 1;int h = mp[r->left] - mp[r->right];if (h == 2 || h == -2) {//cout <<" ___________________"<< r->val << endl;string ret = check(r);//cout << ret << endl;change(r, ret);/* for (unordered_map<TreeNode*, int>::iterator it = mp.begin(); it != mp.end(); it++) {if (it->first != NULL) {cout << "KKKK  " << it->first->val << " " << it->second << endl;}}cout << "先   ";inorderTraversal1(r);cout << endl;cout << "中   ";inorderTraversal(r);cout << endl;*/}}TreeNode* balanceBST(TreeNode*& root,vector<int>preorder) {for (int i = 0; i <preorder.size(); i++) {Insert(root, preorder[i]);}return root;}
};

 完整代码:

代码中有测试样例

#include<iostream>
#include<string>
#include<cstring>
#include<cmath>
#include<ctime>
#include<algorithm>
#include<utility>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<math.h>
#include<map>
#include<sstream>
#include<deque>
#include<unordered_map>
using namespace std;// Definition for a binary tree node.
struct TreeNode {int val;TreeNode* left;TreeNode* right;TreeNode() : val(0), left(nullptr), right(nullptr) {}TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}TreeNode(int x, TreeNode* left, TreeNode* right) : val(x), left(left), right(right) {}
};// Function to insert a value into BST
TreeNode* insertIntoBST(TreeNode* root, int val) {if (!root) {return new TreeNode(val);}if (val < root->val) {root->left = insertIntoBST(root->left, val);}else {root->right = insertIntoBST(root->right, val);}return root;
}// Function to construct BST from preorder traversal
TreeNode* bstFromPreorder(vector<int>& preorder) {TreeNode* root = nullptr;for (int val : preorder) {if (val == 0)continue;root = insertIntoBST(root, val);}return root;
}// Function to perform inorder traversal (for verification)
void inorderTraversal(TreeNode* root) {if (root) {inorderTraversal(root->left);cout << root->val << " ";inorderTraversal(root->right);}
}
void inorderTraversal1(TreeNode* root) {if (root) {cout << root->val << " ";inorderTraversal1(root->left);inorderTraversal1(root->right);}
}// Function to perform level order traversal
void levelOrderTraversal(TreeNode* root) {if (!root) {return;}queue<TreeNode*> q;q.push(root);while (!q.empty()) {TreeNode* current = q.front();q.pop();cout << current->val << " ";if (current->left) {q.push(current->left);}if (current->right) {q.push(current->right);}}
}class Solution {
public:unordered_map<TreeNode*, int>mp;void fun1(vector<int>& g, TreeNode* r) {if (r == NULL || (r->left == NULL && r->right == NULL))return;if (mp[r->left] == mp[r->right])return;g.push_back(mp[r->left] - mp[r->right]);fun1(g, r->left);fun1(g, r->right);}string check(TreeNode* root) {vector<int>g;fun1(g, root);if (g[0] == 2 && g[1] == 1)return "LL";else if (g[0] == 2 && g[1] == -1)return "LR";else {if (g[0] == -2 && g[1] == 1)return "RL";return "RR";}return "NO";}void Turnleft(TreeNode*& r) {TreeNode* A = r;TreeNode* B = r->right;A->right = B->left;B->left = A;r = B;mp[r->left] -= 2;mp[r] = mp[r->right] + 1;}void Turnright(TreeNode*& r) {TreeNode* A = r;TreeNode* B = r->left;A->left = B->right;B->right = A;r = B;mp[r->right] -= 2;mp[r] = mp[r->left] + 1;}void change(TreeNode*& r, string ret) {if (ret == "LL") {Turnright(r);}else if (ret == "RR") {Turnleft(r);}else if (ret == "RL") {Turnright(r->right);Turnleft(r);}else {Turnleft(r->left);Turnright(r);}}void Insert(TreeNode*& r, int key) {if (r == NULL) {TreeNode* p = new TreeNode;p->val = key;p->left = p->right = NULL;r = p;mp[r] = 1;return ;}if (key > r->val) {Insert(r->right, key);}else {Insert(r->left, key);}mp[r] = max(mp[r->left], mp[r->right]) + 1;int h = mp[r->left] - mp[r->right];if (h == 2 || h == -2) {//cout <<" ___________________"<< r->val << endl;string ret = check(r);//cout << ret << endl;change(r, ret);/* for (unordered_map<TreeNode*, int>::iterator it = mp.begin(); it != mp.end(); it++) {if (it->first != NULL) {cout << "KKKK  " << it->first->val << " " << it->second << endl;}}cout << "先   ";inorderTraversal1(r);cout << endl;cout << "中   ";inorderTraversal(r);cout << endl;*/}}TreeNode* balanceBST(TreeNode*& root,vector<int>preorder) {for (int i = 0; i <preorder.size(); i++) {Insert(root, preorder[i]);}return root;}
};int main() {vector<int> preorder = { 1,2,3,4,5,6,7,8,9,10,31,25,47,16,28,30 };/*1,2,3,4,5,6,7,8,9,1019,10,4,17,531,25,47,40,69,43            1,2,3,4                        31,25,47,40,69,36            31,25,47,16,28,26             31,25,47,16,28,30             1,2,3,4,5,6,7,8,9,10,31,25,47,16,28,30*/TreeNode* root = NULL;Solution solve;solve.balanceBST(root,preorder);levelOrderTraversal(root);cout << endl;cout << "先   ";inorderTraversal1(root);cout << endl;cout << "中   ";inorderTraversal(root);cout << endl;return 0;
}

相关文章:

数据结构:第7章:查找(复习)

目录 顺序查找&#xff1a; 折半查找&#xff1a; 二叉排序树&#xff1a; 4. (程序题) 平衡二叉树&#xff1a; 顺序查找&#xff1a; ASL 折半查找&#xff1a; 这里 j 表示 二叉查找树的第 j 层 二叉排序树&#xff1a; 二叉排序树&#xff08;Binary Search Tree&…...

编程语言的未来?

编程语言的未来&#xff1f; 随着科技的飞速发展&#xff0c;编程语言在计算机领域中扮演着至关重要的角色。它们是软件开发的核心&#xff0c;为程序员提供了与机器沟通的桥梁。那么&#xff0c;在技术不断进步的未来&#xff0c;编程语言的走向又将如何呢&#xff1f; 在技…...

SpringBoot的测试

&#x1f648;作者简介&#xff1a;练习时长两年半的Java up主 &#x1f649;个人主页&#xff1a;程序员老茶 &#x1f64a; ps:点赞&#x1f44d;是免费的&#xff0c;却可以让写博客的作者开心好久好久&#x1f60e; &#x1f4da;系列专栏&#xff1a;Java全栈&#xff0c;…...

C++睡眠函数:Windows平台下的Sleep函数和Linux平台的usleep函数

C/C睡眠函数&#xff1a;Windows平台下的Sleep函数和Linux平台的usleep函数 WinAPI Sleep Sleep函数属于Windows API&#xff0c;使用它需要先包含synchapi.h。 void Sleep(DWORD dwMilliseconds);函数仅有一个参数&#xff08;睡眠时长&#xff09;&#xff0c;单位是毫秒。…...

详解白帽子以及红队、蓝队和紫队

企业继续数字化&#xff0c;其关键基础设施和运营扩大了攻击面&#xff0c;暴露于各种威胁途径的面前。为了解决这个问题&#xff0c;企业领导者认识到拥有内部专家的重要性。考虑到网络威胁领域不断发展的态势&#xff0c;企业领导者可以利用道德黑客以及红队、蓝队和紫队的工…...

1、docker常用技巧:docker数据位置更改

目录 &#x1f345;点击这里查看所有博文 随着自己工作的进行&#xff0c;接触到的技术栈也越来越多。给我一个很直观的感受就是&#xff0c;某一项技术/经验在刚开始接触的时候都记得很清楚。往往过了几个月都会忘记的差不多了&#xff0c;只有经常会用到的东西才有可能真正记…...

Qt之设置QLabel的背景色和前景色

方法有两种,一种是使用调色板,一种是使用样式表。 方法一:调色板 QPalette palette ; // 设置黑底绿字 palette .setColor(QPalette::Background, Qt::black); palette .setColor(QPalette::WindowText, Qt::green); // 这句不能少,否则没效果 ui->label->setAutoF…...

数模学习day06-主成分分析

主成分分析(Principal Component Analysis,PCA)主成分分析是一种降维算法&#xff0c;它能将多个指标转换为少数几个主成分&#xff0c;这些主成分是原始变量的线性组合&#xff0c;且彼此之间互不相关&#xff0c;其能反映出原始数据的大部分信息。一般来说当研究的问题涉及到…...

Windows PowerShell的安全目标——安全警报

Windows PowerShell的安全目标——安全警报 1. 保证Shell安全 ​ 自从2006年年底PowerShell发布以来&#xff0c;微软在安全和脚本方面并没有取得很好的名声。毕竟那个时候&#xff0c;**VBScript和Windows Script Host(WSH)**是两个最流行的病毒和恶意软件的载体&#xff0c…...

k8s笔记1- 初步认识k8s

k8s简介&#xff1a; kubernetes&#xff0c;俗称k8是&#xff0c;用于自动部署&#xff0c;扩缩和管理容器化应用程序的开源系统&#xff0c;它将组成应用程序的容器&#xff0c;组合成逻辑单元&#xff0c;便于管理和服务发现。 k8s的作用 自动化上线和回滚、存储编排…...

ARM CCA机密计算软件架构之内存加密上下文(MEC)

内存加密上下文(MEC) 内存加密上下文是与内存区域相关联的加密配置,由MMU分配。 MEC是Arm Realm Management Extension(RME)的扩展。RME系统架构要求对Realm、Secure和Root PAS进行加密。用于每个PAS的加密密钥、调整或加密上下文在该PAS内是全局的。例如,对于Realm PA…...

python基于flask实现一个文本问答系统

from flask import Flask, render_template, requestapp Flask(__name__)# 一个简单的问题-答案映射&#xff0c;实际中可以使用更复杂的存储结构&#xff08;数据库等&#xff09; qa_pairs {"什么是人工智能&#xff1f;": "人工智能是模拟人类智能的一种机…...

lambda表达式使用和示例

lambda表达式 什么是lambda 学习lamdba有两个结构十分关键&#xff0c;一个是lamdba自己&#xff0c;另一个是函数式接口 lamdba lamdba表达式本质上就是匿名方法&#xff0c;不能独立运行用于实现函数式接口定义的另一个方法&#xff0c;因此lamdba会产生一个匿名类lamdba…...

STM32学习笔记十八:WS2812制作像素游戏屏-飞行射击游戏(8)探索游戏多样性,范围伤害模式

前面我们的攻击手段比较单一&#xff0c;虽然已经分出了 EnemyT1 / EnemyT2 / EnemyT3&#xff0c; 但里面还是基本一样的。这回&#xff0c;我们尝试实现一些新的攻击方法&#xff0c;实现一些新的算法。 1、前面我们小飞机EnemyT1 的攻击方式是垂直向下发射子弹。 那么大飞机…...

C#获取windows系统资源使用情况

1.前言 之前有一篇博客介绍如何获取Linux服务器上的资源使用情况《Java 获取服务器资源&#xff08;内存、负载、磁盘容量&#xff09;》&#xff0c;这里介绍如何通过C#获取Window系统的资源使用。 2.获取服务器资源 2.1.内存 [DllImport("kernel32.dll")][retu…...

PE解释器之PE文件结构

PE文件是由许许多多的结构体组成的&#xff0c;程序在运行时就会通过这些结构快速定位到PE文件的各种资源&#xff0c;其结构大致如图所示&#xff0c;从上到下依次是Dos头、Nt头、节表、节区和调试信息(可选)。其中Dos头、Nt头和节表在本文中统称为PE文件头(因为SizeOfHeaders…...

Android—— MIPI屏调试

一、实现步骤 1、在kernel/arch/arm/boot/dts/lcd-box.dtsi文件中打开&dsi0节点&#xff0c;关闭其他显示面板接口&#xff08;&edp_panel、&lvds_panel&#xff09; --- a/kernel/arch/arm/boot/dts/lcd-box.dtsib/kernel/arch/arm/boot/dts/lcd-box.dtsi-5,14 …...

BLE协议—协议栈基础

BLE协议—协议栈基础 BLE协议栈基础通用访问配置文件层&#xff08;Generic Access Profile&#xff0c;GAP&#xff09;GAP角色设备配置模式和规程安全模式广播和扫描 BLE协议栈基础 蓝牙BLE协议栈包含三部分&#xff1a;主机、主机接口层和控制器。 主机&#xff1a;逻辑链路…...

yolov8知识蒸馏代码详解:支持logit和feature-based蒸馏

文章目录 1. 知识蒸馏理论2. yolov8 蒸馏代码应用2.1 环境配置2.2 训练模型(1) 训练教师模型(2) 训练学生模型baseline(3) 蒸馏训练3. 知识蒸馏代码详解3.1 蒸馏参数设置3.2 蒸馏损失代码讲解3.2.1 Feature based loss3.2.1 Logit loss3.3 获取蒸馏的feature map及channels...

03-微服务-Ribbon负载均衡

Ribbon负载均衡 1.1.负载均衡原理 SpringCloud底层其实是利用了一个名为Ribbon的组件&#xff0c;来实现负载均衡功能的。 那么我们发出的请求明明是http://userservice/user/1&#xff0c;怎么变成了http://localhost:8081的呢&#xff1f; 1.2.源码跟踪 为什么我们只输入…...

2023新年总结与展望

2023年总结 对Spring Cloud微服务更加熟悉&#xff0c;对consul、kafka、gateway的熟悉和掌握更近一步对docker和虚拟化部署更加熟悉对PostgreSQL数据库和JPA更加熟悉对clickhouse数据库和大数据分析更加熟悉对netty和socket网络通信更加熟悉 2024年flag 继续深入研究和学习…...

论文阅读——SG-Former

SG-Former: Self-guided Transformer with Evolving Token Reallocation 1. Introduction 方法的核心是利用显著性图&#xff0c;根据每个区域的显著性重新分配tokens。显著性图是通过混合规模的自我关注来估计的&#xff0c;并在训练过程中自我进化。直观地说&#xff0c;我们…...

常用环境部署(十三)——GitLab整体备份及迁移

一、GitLab备份 注意&#xff1a;由于我的GitLab是docker安装的&#xff0c;所以我的操作都是在容器内操作的&#xff0c;大家如果不是用docker安装的则直接执行命令就行。 1、Docker安装GitLab 链接&#xff1a;常用环境部署(八)——Docker安装GitLab-CSDN博客 2、GitLab备…...

海外数据中心代理与住宅代理:优缺点全面对比

数据中心代理和住宅代理是为了匿名而开发的&#xff0c;通过替换网站眼中您自己的 IP 地址。然而&#xff0c;它们在价格、功能、性能或最佳用例方面存在一些差异。那么&#xff0c;这些代理类型到底有什么相似点和不同点呢&#xff1f; 一、什么是数据中心代理&#xff1f; 1…...

springboot实现OCR

1、引入依赖 <dependency><groupId>net.sourceforge.tess4j</groupId><artifactId>tess4j</artifactId><version>4.5.4</version> </dependency> 2、config Configuration public class TessOcrConfiguration {Beanpublic …...

【Scala 】注解

在 Scala 中&#xff0c;你可以使用注解来为类、方法或字段添加元数据&#xff0c;影响它们的行为。Scala 的注解使用与 Java 类似&#xff0c;但是 Scala 也支持自定义注解。 文章目录 注解的常见使用方法自定义注解 注解的常见使用方法 以下是一些 Scala 中常见的注解以及它…...

数通基础知识总结

1. 基础概念 1.1. 通信基本原理 通信基本原理涉及信息的生成、编码、传输和解码的过程。在实际应用中&#xff0c;例如电话通信&#xff0c;信息通过话筒转换成模拟信号&#xff0c;经过传输线路传递到接收端&#xff0c;再由耳机解码还原为可理解的信息。 1.2. 信道和信号 …...

机器学习深度学习面试笔记

机器学习&深度学习面试笔记 机器学习Q. 在线性回归中&#xff0c;如果自变量之间存在多重共线性&#xff0c;会导致什么问题&#xff1f;如何检测和处理多重共线性&#xff1f;Q. 什么是岭回归(Ridge Regression)和Lasso回归(Lasso Regression)&#xff1f;它们与普通线性回…...

安卓和Android是两种不同的操作系统?

实际上&#xff0c;安卓和Android并不是同一种操作系统&#xff01; Android是由Google开发并维护更新的一款操作系统&#xff0c;目前仅能运行在Pixel手机上。 Google Pixel 与 iPhone手机&#xff1a;哪个更好&#xff1f;Google Pixel 与 Apple iPhone哪个手机才是性价比最…...

Java学习——设计模式——结构型模式2

文章目录 结构型模式装饰者模式桥接模式外观模式组合模式享元模式 结构型模式 结构型模式主要涉及如何组合各种对象以便获得更好、更灵活的结构。虽然面向对象的继承机制提供了最基本的子类扩展父类的功能&#xff0c;但结构型模式不仅仅简单地使用继承&#xff0c;而更多地通过…...

找建筑网站/互联网推广好做吗

传送门...

哪家上市公司做视频网站/企业营销策划合同

JavaScript 异步编程2.1异步编程概述2.2同步模式/异步模式同步模式异步模式2.3回调函数2.4Promise (一种更优的异步编程统一方案)概述常见误区链式调用异常处理静态方法Promise.resoler()Promise.reject()并行执行Promise.all()Promise.race()执行时序Promise异步执行顺序的特殊…...

手机网站开发注意的问题/竞价是什么工作

项目在debug环境下运行没有问题&#xff0c;在混淆打包之后却发现了闪退&#xff0c;无奈只能打开Log日志打印毛病~ 程序打印空指针异常&#xff0c;定位到空指针异常的地方~ 问题直指javaBean&#xff0c;于是我检查了我参考网上关于fastjson混淆的方法如下图 感觉没毛病啊…...

想建一个网站怎么做/在线优化seo

转载于博客http://blog.csdn.net/zouxy09 一、概述 Artificial Intelligence&#xff0c;也就是人工智能&#xff0c;就像长生不老和星际漫游一样&#xff0c;是人类最美好的梦想之中的一个。尽管计算机技术已经取得了长足的进步。可是到眼下为止。还没有一台电脑能产生“自我”…...

建设网站 报告/如何查询百度收录情况

以下代码没有严格测试&#xff0c;能用&#xff0c;参数的地方有些错误&#xff0c;没有修正&#xff0c;自个看看代码中打开文件如果要用OpenFileDialog需要首先设置main的线程模式&#xff0c;缺点是弹出的对话框居然跑到后面去了&#xff0c;每什么意思。&#xff0c;我现在…...

wordpress 菜单管理系统/任何东西都能搜出来的软件

他通过改变训练样本的权重&#xff0c;学习多个分类器&#xff0c;并将这些分类器进行线性组合&#xff0c;提高分类的性能。 adaboost提高那些被前一轮弱分类器错误分类样本的权重&#xff0c;而降低那些被正确分类样本的权重&#xff0c;这样使得&#xff0c;那些没有得到正确…...