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

算法设计与分析

两个例子:调度问题与投资问题

例1:调度问题

问题

n 项任务,每项任务加工时间已知.从 0时刻开始陆续安排到一台机器上加工. 每个任务的完成时间是从 0 时刻到任务加工截止的时间.

求: 总完成时间(所有任务完成时间之和)最短的安排方案.

实例

任务集 S = {1, 2, 3, 4, 5},

加工时间: t 1 =3, t 2 =8, t 3 =5, t 4 =10, t 5 =15

贪心法的解

算法 :按加工时间 (3,8,5,10,15) 从小到大安排

:1, 3, 2, 4, 5

总完成时间:

t = 3+(3+5)+(3+5+8)+(3+5+8+10)+(3+5+8+10+15)

= 3 × 5 + 5 × 4 + 8 × 3 + 10 × 2 + 15

= 94

问题建模

输入 : 任务集: S= {1, 2, … , n }

j 项任务加工时间: t j ∈Z + , j =1,2,…, n.

输出: 调度 I S 的排列 i 1 , i 2 , …, i n

目标函数: I 的完成时间,

I *:使得 t ( I *) 达到最小,即

t ( I ***** )= min{ t ( I )| I S 的排列}

贪心算法

设计策略 :加工时间短的先做

算法 :根据加工时间从小到大排序 , 依次加工

证:假如调度 f i, j 项任务相邻且有逆序,

t i > t j . 交换任务 i j 得到调度 g

总完成时间 t ( g ) − t ( f ) = t j − t i < 0

直觉不一定是正确的

反例

有4 件物品要装入背包, 物品重量和价值如下:

背包重量限制是 6,问如何选择物品,使得不超重的情况下装入背包的物品价值达到最大?

实例的解

贪心法 :单位重量价值大的优先,总重不超 6

按照 v *i / *w i 从大到小排序:1, 2, 3, 4

贪心法的解: { 1, 4 } ,重量 5 ,价值为 9.

更好的解:{ 2, 4 },重量 6,价值 11.

算法设计

1. 问题建模

2. 选择什么算法?如何描述这个方法?

3. 这个方法是否对所有实例都得到最优解?如何证明?

4. 如果不是,能否找到反例?

例2:投资问题

问题:

m 元钱,投资 n 个项目. 效益函数 f i ( x ),

表示第 i 个项目投 x 元的效益, i =1, 2, …, n.

求如何分配每个项目的钱数使得总效益最大?

实例

5 万元,投资给 4 个项目,效益函数:

问题建模

输入 n , m , f i ( x ), i =1,2, …, n, x = 1,2, …, m

n 维向量 < x 1 , x 2 , … , x n >, x i 是第 i

项目的钱数,使得下述条件满足:

蛮力算法

对所有满足下述条件的向量 < x 1 , x 2 ,…, x n >

x 1 + x 2 + … + x n = m

x i 为非负整数, i = 1, 2 , …, n

计算相应的效益 f 1 ( x 1 ) + f 2 ( x 2 ) + … + f n ( x n ) 从中确认效益最大的向量.

实例计算

解: s =<1,0,3,1>, 最大效益:11+30+20 = 61

蛮力算法的效率

方程 x 1 + x 2 + … + x n = m 的非负整数解

< x 1 , x 2 , …, x n > 的个数估计:

可行解表示成 0-1 序列: m 1, n -1 0

n =4, m =7

可行解 <1, 2, 3, 1>

⇔ 序列 1 0 1 1 0 1 1 1 0 1

序列个数是输入规模的指数函数

C ( m + n 1, m )

= ( m + n 1)!

m !( n 1)!

= Ω((1 + ε ) m + n −1 )

小结

问题求解的关键

建模:对输入参数和解给出形式化或半形式化的描述

设计算法:

采用什么算法设计技术

正确性——是否对所有的实例都得到正确的解

分析算法——效率

问题计算复杂度的界定:排序问题

例3 排序算法的效率

以元素比较作基本运算

插入排序的插入操作

插入排序运行实例

冒泡排序的一次巡回

冒泡排序运行实例

快速排序一次递归运行

二分归并排序运行实例

问题的计算复杂度分析

小结

几种排序算法简介

插入排序

冒泡排序

快速排序

归并排序

排序问题的难度估计——界定什么是最好的排序算法

货郎问题与计算复杂性理论

例4 货郎问题

问题:

n 个城市,已知任两个城市之间的距

. 求一条每个城市恰好经过 1 次的回路,

使得总长度最小.

建模与算法

输入

有穷个城市的集合 C = { c 1 , c 2 , …, c n },

距离 d ( c i , c j ) = d ( c j , c i ) Z + , 1 i < j n

:1, 2 …, n 的排列 k 1 , k 2 , …, k n 使得:

现状 :至今没找到有效的算法

0-1背包问题

n 个件物品要装入背包, 第 i 件物品的重量 w i , 价值 v i i =1,2,…, n . 背包最多允许装入的重量为 B , 问如何选择装 入背包的物品,使得总价值达到最大?

实例 n =4, B =6,物品的重量和价值如下

0-1背包问题建模

问题的 0-1 向量 < x 1 , x 2 , …, x n >

x i =1 ⇔ 物品 i 装入背包

双机调度

双机调度问题

n 项任务, 任务 i 的加工时间为 t i , t i ∈Z + , i =1,2,…, n . 用两台相同的机器加工,从0时刻开始计时,完成时间是后停止加工机器的停机时间. 问如何把这些任务分配到两台机器上,使得完成时间达到最小?

实例 :

任务集 S ={1,2,3,4,5,6}

t 1 =3, t 2 =10, t 3 =6, t 4 =2, t 5 =1, t 6 =7

解:机器 1 的任务: 1, 2, 4

机器 2 的任务:3, 5, 6

完成时间 : max{ 3+10+2, 6+1+7 }=15

双机调度建模

: 0-1 向量 < x 1 , x 2 , …, x n >, x i =1 表示任务 i

分 配到第一台机器, i =1,2,…, n .

不妨设机器 1 的加工时间 机器 2 的加工时

间令 T = t 1 + t 2 +…+ t n , D = T /2 ,机器 1 的加工

时间不超过 D ,且达到最大

如何对该问题建模?目标函数与约束条件是什么?

NP-hard问题

这样的问题有数千个,大量存在于各

个应用领域 .

NP-hard问题

至今没有人能够证明对于这类问题不存在多项式时间的算法.

至今没找到有效算法:现有的算法的运行时间是输入规模的指数或更高阶函数.

从是否存在多项式时间算法的角度看,这些问题彼此是等价的. 这些问题的难度处于可有效计算的边界.

课程主要内容

算法研究的重要性

算法设计与分析技术在计算机科学与技术领域有着重要的应用背景算法设计分析与计算复杂性理论研究是计算机科学技术的核心研究领域

1966-2005期间,Turing奖获奖50人, 其中10人以算法设计, 7人以计算理论、自动机和复杂性研究领域的杰出贡献获奖

计算复杂性理论的核心课题“P=NP?”是本世纪 7个最重要的数学问题之一 提高学生素质和分析问题解决问题的能力,培养计算思维

小结

• NP-hard问题的几个例子:货郎问题0-1背包问题、双机调度问题等

• NP-hard问题的计算现状

计算复杂性理论的核心—— NP完全理论

算法研究的主要内容及重要意义

算法及其时间复杂度

问题研究及实例

问题

需要回答的一般性提问,通常含若干参数

问题描述

定义问题参数(集合,变量,函数,序列等)说明每个参数的取值范围及参数间的关系定义问题的解说明解满足的条件(优化目标或约束条件)

问题实例

参数的一组赋值可得到问题的一个实例

算法

算法

有限条指令的序列

这个指令序列确定了解决某个问题的一系列运算或操作

算法 A 解问题 P

把问题 P 的任何实例作为算法 A 的输入每步计算是确定性的 A 能够在有限步停机输出该实例的正确的解

基本运算与输入规模

算法时间复杂度 :

针对指定 基本运算 ,计数算法所做运算次数

基本运算 :

比较, 加法, 乘法, 置指针, 交换…

输入规模

输入串编码长度通常用下述参数度量:数组元素多少,调度问题的任务个数,图的顶点数与边数等.

算法基本运算次数可表为输入规模的函数

给定问题和基本运算就决定了一个算法类

输入规模

排序:数组中元素个数 n

检索:被检索数组的元素个数 n

整数乘法:两个整数的位数 m, n

矩阵相乘:矩阵的行列数 i, j, k

图的遍历:图的顶点数 n , 边数 m

基本运算

排序 : 元素之间的 比较

检索 : 被检索元素 x 与数组元素的 比较

整数乘法: 每位数字相乘(位乘) 1 次 m 位和 n 位整数相乘要做 mn 位乘

矩阵相乘: 每对 元素乘 1 次 i × j 矩阵与 j × k 矩阵相乘要做 i jk 次乘法

图的遍历 : 置指针

算法的两种时间复杂度

对于相同输入规模的不同实例,算法的基本

运算次数也不一样,可定义两种时间复杂度

最坏情况下的时间复杂度 W ( n )

算法求解输入规模为 n 的实例所需要的最长

时间

平均情况下的时间复杂度 A ( n )

在给定同样规模为 n 的输入实例的概率分布

下,算法求解这些实例所需要的平均时间

A ( n ) 计算公式

平均情况下的时间复杂度 A ( n )

S 是规模为 n 的实例集

实例 I S 的概率是 P I

算法对实例 I 执行的基本运算次数是 t I

在某些情况下可以假定每个输入实例概

率相等

例子:检索

顺序检索算法

j =1, 将 x L [ j ]比较. 如果 x = L [ j ],则算法停止,输出 j ;如果不等,则把 j 加1,继续 x L [ j ]的比较,如果 j > n ,则停机并输出0.

x = 4 ,需要比较 4

x = 2.5,需要比较 5 次

改进顺序检索算法

j =1, 将 x L [ j ]比较. 如果 x = L [ j ],则算法停 止,输出 j ;如果 x > L [ j ],则把 j 加1,继续 x L [ j ]的比较;如果 x < L [ j ],则停机并输出0. 如果 j > n ,则停机并输出 0.

x = 4 ,需要比较 4

x = 2.5,需要比较 3 次

最坏情况的时间估计

不同的输入有 2 n + 1 个,分别对应:

x = L [1], x = L [2], … , x = L [ n ]

x < L [1], L [1]< x < L [2], L [2]< x < L [3], … , L [ n ]< x

最坏情况下时间: W ( n ) = n

最坏的输入: x 不在 L 中或 x = L [ n ]要做 n 次比较

平均情况的时间估计

时间估计

最坏情况下: W ( n ) = n

平均情况下

输入实例的概率分布:假设 x L 中每个

位置与空隙的概率都相等

改进检索算法平均时间复杂度是多少?

小结:

算法最坏和平均情况下的时间复杂度定义

如何计算上述时间复杂度

算法的伪码表示

算法的伪码描述

赋值语句:

分支语句: if …then … [else…]

循环语句: while, for,repeat until

转向语句: goto

输出语句: return

调用:直接写过程的名字

注释: //…

例:求最大公约数

算法 Euclid ( m, n )

输入:非负整数 *m, n, *其中 m n 不全为 0

输出: m n 的最大公约数

1. while m > 0 do

2. r n mod m

3. n m

4. m r

5. return n

运行实例: n =36, m =15

例:改进的顺序检索

算法 Search ( L, x )

输入:数组 L [1… n ], 元素从小到大排列 , x.

输出:若 x L 中,输出 x 的位置下标 j

否则输出 0.

1. j 1

2. while j n and x > L [ j ] do j j +1

3. if x < L [ j ] or j > n then j ← 0

4. return j

例:插入排序

算法 Insert Sort ( A, n )

输入: n 个数的数组 A

输出:按照递增顺序排好序的数组 A

1. for j 2 to n do

2. x A [ j ]

3. i j −1 //3-7 行把 A [ j ] 插入 A [1… j −1]

运行实例

例:二分归并排序

MergeSort ( A , p , r )

输入:数组 A [ p r ]

输出:按递增顺序排序的数组 A

1. if p < r

2. then q ← ( p+r )/2

3. MergeSort ( A , p , q )

4. MergeSort ( A , q +1, r )

5. Merge ( A , p , q , r )

MergeSort有递归调用,也调用Merge过程

例:算法A的伪码

小结

用伪码表示算法

伪码不是程序代码,只是给出算法的

主要步骤

伪码中有哪些关键字?

伪码中允许过程调用

函数的渐近的界

O 符号

定义 f g 是定义域为自然数集

N 上的函数 . 若存在正数 c n 0 ,使得

对一切 n n 0

0 f ( n ) c g ( n )

成立 , 则称 f ( n ) 的渐近的上界是 g ( n )

记作

f ( n ) = O ( g ( n ))

例子

f ( n ) = n 2 + n

f ( n )= O ( n 2 ),取 c = 2, n 0 =1 即可

f ( n )= O ( n 3 ),取 c = 1, n 0 =2 即可

1. f ( n ) = O ( g ( n )) , f ( n )的阶不高于 g ( n )的阶.

2. 可能存在多个正数 c ,只要指出一个即可 .

3. 对前面有限个值可以不满足不等式 .

4. 常函数可以写作 O (1).

符号

定义 :设 f g 是定义域为自然数集

N 上的函数 . 若存在正数 c n 0 ,使

得对一切 n n 0

0 cg ( n ) f ( n )

成立 , 则称 f ( n ) 的渐近的下界是 g ( n ),

记作

f ( n ) = ( g ( n ))

例子

f ( n ) = n 2 + n ,则

f ( n ) = ( n 2 ), c = 1, n 0 =1 即可

f ( n ) = (100 n ), c =1/100, n 0 =1 即可

1. f ( n )= ( g ( n )) f ( n ) 的阶不低于 g ( n ) 的阶 .

2. 可能存在多个正数 c ,指出一个即可 .

3. 对前面有限个 n 值可以不满足上述不等式.

o 符号

定义 f g 是定义域为自然数集 N

的函数 . 若对于任意正数 c 都存在 n 0 ,使

得对一切 n n 0

0 f ( n ) < c g ( n )

成立 , 则记作

f ( n ) = o ( g ( n ))

例子

W 符号

定义 :设 f g 是定义域为自然数集 N

的函数 . 若对于任意正数 c 都存在 n 0 ,使

得对一切 n n 0

0 cg ( n ) < f ( n )

成立 , 则记作

f ( n ) = ( g ( n ))

例子

符号

例子:素数测试

小结

有关函数渐近的界的定理

定理1

证明定理1(1)

例:估计函数的阶

一些重要结果

一些重要结果(续)

定理 2

定理 设函数 f, g, h 的定义域为自然数集合,

(1) 如果 f = O ( g ) g = O ( h ) ,那么 f = O ( h ).

(2) 如果 f = ( g ) g = ( h ) * *那么 f = ( h ).

(3) 如果 f = Θ ( g ) g = Θ ( h ) * *那么 f = Θ ( h ) .

函数的阶之间的关系具有传递性

例子

按照阶从高到低排序以下函数:

f ( n )=( n 2 + n )/2 g ( n )=10 n

h ( n )=1.5 n t ( n )= n 1/2

h ( n ) = ω ( f ( n ))

f ( n ) = ω ( g ( n )),

g ( n ) = ω ( t ( n )),

排序 h ( n ), f ( n ), g ( n ), t ( n )

定理3

定理 假设函数 f g 的定义域为自然数集,

若对某个其它函数 h , f = O ( h ) g = O ( h )

那么 f + g = O ( h ).

该性质可以推广到有限个函数 .

算法由有限步骤构成 . 若每一步的时间复

杂度函数的上界都是 h ( n ) ,那么该算法的

时间复杂度函数可以写作 O ( h ( n ))

小结

估计函数的阶的方法:

计算极限

阶具有传递性

对数函数的阶低于幂函数的阶,多项

式函数的阶低于指数函数的阶 .

算法的时间复杂度是各步操作时间之

和,在常数步的情况下取最高阶的函

数即可.

几类重要的函数

基本函数类

阶的高低

至少指数级: 2 n , 3 n , n !, …

多项式级: n , n 2 , n log n , n 1/2 , …

对数多项式级: log n , log 2 *n, *loglog n, …

对数函数

符号:

log n = log 2 n

log k n = (log n ) k

loglog n = log(log n )

性质:

(1) log 2 n = Θ (log l n )

(2) log b n = o ( n α ) α > 0

(3) a log b n = n log b a

有关性质(1)的证明

有关性质(2)(3)的说明

指数函数与阶乘

应用:估计搜索空间大小

log( n !) = ( n log n )的证明

log( n !) = O ( n log n )的证明

取整函数

取整函数的性质

例:按照阶排序

例:按照阶排序

小结

几类常用函数的阶的性质

对数函数

指数函数

阶乘函数

取整函数

如何利用上述性质估计函数的阶?



有关基本概

相关文章:

算法设计与分析

两个例子:调度问题与投资问题 例1&#xff1a;调度问题 问题 有 n 项任务&#xff0c;每项任务加工时间已知.从 0时刻开始陆续安排到一台机器上加工. 每个任务的完成时间是从 0 时刻到任务加工截止的时间. 求: 总完成时间&#xff08;所有任务完成时间之和&#xff09;最短…...

C++ 基础

命名空间 在 C/C 中&#xff0c;变量、函数和类都是大量存在的&#xff0c;这些变量、函数和类的名称将都存在全局作用域中&#xff0c;可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化&#xff0c;以避免命名冲突或名字污染&#xff0c;namespace 关键字的…...

[golang gin框架] 2.Gin HTML模板渲染以及模板语法,自定义模板函数,静态文件服务

一.Gin HTML 模板渲染全部模板放在一个目录里面的配置方法首先在项目根目录新建 templates 文件夹&#xff0c;然后在文件夹中新建 对应的index.html<!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta http…...

数据仓库层Repository(CrudRepository、PagingAndSortingRepository、JpaRepository)

什么是数据仓库层Repository&#xff1f; 数据仓库接口的作用&#xff1a;Repository原意指的是仓库&#xff0c;即数据仓库的意思。Repository居于业务层和数据层之间&#xff0c;将两者隔离开来&#xff0c;在它的内部封装了数据查询和存储的逻辑。 Repository接口&#xff…...

大数据技术架构(组件)33——Spark:Spark SQL--Join Type

2.2.2、Join Type2.2.2.1、Broadcast Hash Join (Not Shuffled)就是常说的MapJoin,join操作在map端进行的。场景&#xff1a;join的其中一张表要很小&#xff0c;可以放到Driver或者Executor端的内存中。原理:1、将小表的数据广播到所有的Executor端&#xff0c;利用collect算子…...

Linux: bash起后台进程引发的僵尸进程

1. 前言 限于作者能力水平&#xff0c;本文可能存在谬误&#xff0c;因此而给读者带来的损失&#xff0c;作者不做任何承诺。 2. 案例 原来的故事是 这样 的&#xff0c;感兴趣的读者可以直接前往。我从中截取了一段重现故事中问题的代码&#xff08;对原代码做了小小调整&a…...

网络安全攻防中,Rock-ON自动化的多功能网络侦查工具,Burpsuite被动扫描流量转发

网络安全攻防中&#xff0c;Rock-ON自动化的多功能网络侦查工具&#xff0c;Burpsuite被动扫描流量转发。 #################### 免责声明&#xff1a;工具本身并无好坏&#xff0c;希望大家以遵守《网络安全法》相关法律为前提来使用该工具&#xff0c;支持研究学习&#xff…...

电子技术——共模抑制

电子技术——共模抑制 我们在之前学习过&#xff0c;无论是MOS还是BJT的差分输入对&#xff0c;共模信号并不会改变漏极电流的大小&#xff0c;因此我们说差分输入对共模信号无响应。但是实际上由于各种客观非理想因素&#xff0c;例如电流源有限阻抗等&#xff0c;此时共模是影…...

对KMP简单的理解

声明&#xff1a;下边的例子均表示下标从1开始的数组 ne数组的定义&#xff1a; next[i] 就是使子串 s[1…i] 有最长相等前后缀的前缀的最后一位的下标。ne[i]也可以表示相等子串的长度 准备执行jne[j]时&#xff0c; 表示当前s[i]!p[j1] , 如果ne[j]1 &#xff0c;那么下…...

Hibernate不是过时了么?SpringDataJpa又是什么?和Mybatis有什么区别?

一、前言 ps: 大三下学期&#xff0c;拿到了一份实习。进入公司后发现用到的技术栈有Spring Data Jpa\Hibernate,但对于持久层框架我只接触了Mybatis\Mybatis-Plus&#xff0c;所以就来学习一下Spring Data Jpa。 1.回顾MyBatis 来自官方文档的介绍&#xff1a;MyBatis 是一款…...

数学建模拓展内容:卡方检验和Fisher精确性检验(附有SPSS使用步骤)

卡方检验和Fisher精确性检验卡方拟合度检验卡方独立性检验卡方检验的前提假设Fisher精确性检验卡方拟合度检验 卡方拟合度检验概要&#xff1a;卡方拟合度检验也被称为单因素卡方检验&#xff0c;用于检验一个分类变量的预期频率和观察到的频率之间是否存在显著差异。 卡方拟…...

【Python学习笔记之七大数据类型】

Python数据类型&#xff1a;Number数字、Boolean布尔值、String字符串、list列表、tuple元组、set集合、dictionary字典 int整数 a1 print(a,type(a))float浮点数 b1.1 print(b,type(b))complex复数 c100.5j print(c,type(c))bool布尔值:True、False,true和false并非Python…...

Android系统之onFirstRef自动调用原理

前言&#xff1a;抽丝剥茧探究onFirstRef究竟为何在初始化sp<xxx>第一个调用&#xff1f;1.onFirstRef调用位置<1>.system/core/libutils/RefBase.cpp#include <utils/RefBase.h>//1.初始化强指针 void RefBase::incStrong(const void* id) const {weakref_i…...

ipv6上网配置

一般现在的宽带都已经支持ipv6了&#xff0c;但是需要一些配置才能真正用上ipv6。记录一下配置过程。 当前测试环境为移动宽带&#xff0c;光猫下面接了一个路由器&#xff0c;家里所有的设备都挂到这个路由器下面的。 1. 光猫改桥接 光猫在使用路由模式下&#xff0c;ipv6无…...

python实现聚类技术—复杂网络社团检测 附完整代码

实验内容 某跆拳道俱乐部数据由 34 个节点组成,由于管理上的分歧,俱乐部要分解成两个社团。 该实验的任务即:要求我们在给定的复杂网络上检测出两个社团。 分析与设计 实验思路分析如下: 聚类算法通常可以描述为用相似度来衡量两个数据的远近,搜索可能的划分方案,使得目标…...

如何判断两架飞机在汇聚飞行?(如何计算两架飞机的航向夹角?)内含程序源码

ok&#xff0c;在开始一切之前&#xff0c;让我先猜一猜&#xff0c;你是不是想百度“二维平面下如何计算两个移动物体的航向夹角&#xff1f;”如果是&#xff0c;那就请继续往下看。 首先&#xff0c;我们要明确一个概念&#xff1a;航向角≠航向夹角&#xff01;&#xff0…...

Scipy稀疏矩阵bsr_array

文章目录基本原理初始化内置方法基本原理 bsr&#xff0c;即Block Sparse Row&#xff0c;bsr_array即块稀疏行矩阵&#xff0c;顾名思义就是将稀疏矩阵分割成一个个非0的子块&#xff0c;然后对这些子块进行存储。通过输入维度&#xff0c;可以创建一个空的bsr数组&#xff0…...

LeetCode笔记:Weekly Contest 332

LeetCode笔记&#xff1a;Weekly Contest 332 1. 题目一 1. 解题思路2. 代码实现 2. 题目二 1. 解题思路2. 代码实现 3. 题目三 1. 解题思路2. 代码实现 4. 题目四 1. 解题思路2. 代码实现 比赛链接&#xff1a;https://leetcode.com/contest/weekly-contest-332/ 1. 题目一…...

autox.js在vscode(win7)与雷神模拟器上的开发环境配置

目录 下载autox.js 安装autox.js&#xff1f; 在电脑上搭建autox.js开发环境 安装vscode 安装autox.js插件 雷神模拟器连接vscode 设置雷神模拟器IP 设置autox.js应用IP地址等 下载autox.js 大体来说&#xff0c;就是一个运行在Android平台上的JavaScript 运行环境 和…...

创建阿里云物联网平台

创建阿里云物联网平台 对云平台设备创建过程做记录&#xff0c;懒得再看视频 文章参考视频&#xff1a;https://www.bilibili.com/video/BV1jP4y1E7TJ?p26&vd_source50694678ae937a743c59db6b5ff46c31 阿里云&#xff1a;https://www.aliyun.com 1&#xff0e;物联网平…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

Python 实现 Web 静态服务器(HTTP 协议)

目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1&#xff09;下载安装包2&#xff09;配置环境变量3&#xff09;安装镜像4&#xff09;node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1&#xff09;使用 http-server2&#xff09;详解 …...