首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏labuladong的算法专栏

    谁能想到,求值的算法还能优化

    其实不然,其中的细节操作十分精妙,渐进时间复杂度肯定是 O(n) 无法再减少,但如果深究算法的执行速度,仍然有优化空间。 接下来,我们想办法优化这两个算法,使这两个算法只需要固定的1.5n次比较。 最大值和最小值 为啥一般的解法还能优化呢?肯定是因为没有充分利用信息,存在冗余计算。 对于这个问题,还有另一种优化方法,那就是分治算法。大致的思路是这样: 先将数组分成两半,分别找出这两半数组的最大值和最小值,然后max就是两个最大值中更大的那个,min就是两个最小值中更小的那个。 PS:其实这个分治算法可以再优化,比较次数可以进一步降到 n + log(n),但是稍微有点麻烦,所以这里就不展开了。 如果你能明白这个递归关系(归纳假设),就有可能想到每次前进 2 步的优化解法。

    1.2K20发布于 2021-09-23
  • 来自专栏分布式|微服务|性能优化|并发编程|源码分析

    性能优化|讲的清楚的垃圾回收算法

    结论:使用标记-清除算法,清理垃圾后会发现存活对象分布的位置比较零散,如果有有大对象需要分配的话,很难有连续的空间进行分配;缺点:效率低、空间碎片 复制算法 为了解决内存碎片问题,jvm大师们研究出了复制算法 ,复制算法的原理是将内存空间分为两块,当其中一块内存使用完之后,就会将存活对象复制到另外一块内存上,将之前的内存块直接清理掉,这样就不会产生内存碎片的问题了。 使用复制算法,内存前后对比 ? ? 结论:解决了内存碎片的问题,但是会导致内存空间缩减一半,适用于存活对象少的区域。 标记整理算法 标记整理算法的步骤和标记-清除是一样的,不过最后多加一步就是整理,用来整理存活对象造成的内存碎片,使用标记-整理后内存前后对比: ? ? 分代收集算法 分代收集算法主要就是将内存分为两个年代,一个是年轻代,一个是老年代,在年轻代中使用复制算法,因为年轻代存活的对象少,比较适合使用复制算法,老年代使用标记整理算法,因为老年代垃圾比较少,所以适用于标记整理算法

    1.1K20发布于 2020-11-19
  • 算法之冒泡排序:直观的排序哲学与优化智慧

    8] } } 三、性能分析 指标 数值 说明 时间复杂度 平均O(n²) 双重循环结构 最优O(n) 输入已排序时(优化版) 空间复杂度 O(1) 原地排序 算法特性: 稳定排序(相同元素保持原序 ) 实现简单但效率较低 优化后对部分有序数据敏感 四、应用场景 教学演示:理解排序算法的基础教学案例 硬件限制环境:内存有限的嵌入式设备 数据监控:检测数据是否已有序(优化版只需 true; } } start++; } } 六、哲学启示 冒泡排序教会我们: 耐心观察:通过多轮遍历逐步解决问题 简单力量:基础的算法也能蕴含深刻思想 优化智慧:提前终止机制体现效率意识 当你能在面试白板上5分钟写出优化版冒泡排序时,说明掌握了算法工程师的基本功——在简单中见真章。 记住:算法优化的本质是在理解问题特征后做针对性改进,就像这个优化版本通过检测交换状态提前终止不必要的遍历。

    26810编辑于 2025-10-14
  • 来自专栏决策智能与机器学习

    近端策略优化算法(PPO):RL经典的博弈对抗算法之一「AI核心算法

    作者:Abhishek Suran 转载请联系作者 提要:PPO强化学习算法解析及其TensorFlow 2.x实现过程(含代码) 在本文中,我们将尝试理解Open-AI的强化学习算法:近端策略优化算法 算法的步骤 游戏n步,存储状态,动作概率,奖励,完成变量。 基于上述经验,应用广义优势估计方法。我们将在编码部分看到这一点。 通过计算各自的损失,训练神经网络在某些时期的运行。 call(self, input_data): x = self.d1(input_data) a = self.a(x) return a 行动选择: 我们定义代理类并初始化优化器和学习率 s2}") sur1.append(s1) sur2.append(s2) sr1 = tf.stack(sur1) sr2 = tf.stack(sur2) #closs = tf.reduce_mean(tf.math.square(td))

    8.2K20发布于 2020-12-14
  • 来自专栏GiantPandaCV

    SSE图像算法优化系列2-高斯滤波

    算法原理 或许大多数人对于高斯滤波的印象都停留在使用一个高斯在图像滑动然后计算结果。这的确没错,但从速度上考虑这种模式是难以优化的。也导致在极大分辨率图像上进行高斯滤波是压根不可行的。 算法具体过程 1、CalGaussCof 计算高斯模糊中使用到的系数 2、ConvertBGR8U2BGRAF 将字节数据转换为浮点数据 3、GaussBlurFromLeftToRight 水平方向的前向传播 /blob/master/speed_gaussian_filter_sse.cpp 速度优化 1、对ConvertBGR8U2BGRAF的SSE优化 这里需要对BGR图像新增一个通道(Alpha), = LinePS[2]; } } } 速度测试 普通版和SSE优化版(没有最后一个颜色通道转换的优化)完整的代码可以在我的github找到,现在我给出我的时间测试表,Corei7 8770 后记 这个算法的加速比确实不大,但是这是SSE算法优化系列的第2篇,只是想表达算法优化算法具有同等重要的作用,算法是谁都能做,但没有耐心,是很难做优化工作的,因此和寄存器/底层打交道是大多数人比较反感的

    1.3K20发布于 2019-12-04
  • 来自专栏北京马哥教育

    史上简单!冒泡、选择排序的Python实现及算法优化详解

    冒泡排序、简单选择排序、直接插入排序就是简单排序算法。 评价排序算法优劣的标准主要是两条:一是算法的运算量,这主要是通过记录的比较次数和移动次数来反应;另一个是执行算法所需要的附加存储单元的的多少。 2、简单排序之冒泡法Python实现及优化 原理图 2.1、基本实现 2.2、优化实现 思路:如果本轮有交互,就说明顺序不对;如果本轮无交换,说明是目标顺序,直接结束排序。 原理图 3.1、基本实现 3.2、优化实现——二元选择排序 思路:减少迭代次数,一轮确定2个数,即最大数和最小数。 3.4、等值情况优化进阶 思路: [1, 1, 1, 1, 1, 1, 1, 1, 2] 这种情况,找到的最小值索引是-2,最大值索引8,上面的代码会交换2次,最小值两个1交换是无用功,所以,增加一个判断 还可能存在一些特殊情况可以优化,但是都属于特例的优化了,对整个算法的提升有限。

    2.2K40发布于 2018-05-02
  • 来自专栏红色石头的机器学习之路

    吴恩达《优化深度神经网络》精炼笔记(2)-- 优化算法

    接着,我们介绍了防止过拟合的两种方法:L2 regularization和Dropout。然后,介绍了如何进行规范化输入,以加快梯度下降速度和精度。 最后,我们介绍了梯度检查,来验证梯度下降算法是否正确。 本节课,我们将继续讨论深度神经网络中的一些优化算法,通过使用这些技巧和方法来提高神经网络的训练速度和精度。 这样,相当于结合了Batch gradient descent和Stachastic gradient descent各自的优点,既能使用向量化优化算法,又能叫快速地找到最小值。 这些都是2的幂。之所以这样设置的原因是计算机存储数据一般是2的幂,这样设置可以提高运算速度。 7 RMSprop RMSprop是另外一种优化梯度下降速度的算法

    53010编辑于 2022-01-12
  • 来自专栏文武兼修ing——机器学习与IC设计

    神经网络优化算法总结优化算法框架优化算法参考

    优化算法框架 优化算法的框架如下所示: $$ w_{t+1} = w_t - \eta_t \ \eta_t = \cfrac{\alpha}{\sqrt{V_t}} \cdot m_t $$ ,g_t) \ g_t = \nabla f(w_t) $$ 一阶动量和二阶动量均是历史梯度和当前梯度的函数 优化算法 固定学习率优化算法 学习率固定的优化算法均有一个特点:不考虑二阶动量(即$M _2(g_i) = I$) 随机梯度下降(SGD) 随机梯度下降时简单的优化算法,有:$m_t = g_t,V_t = I$,带入公式有优化公式为:$\eta_t = \alpha \cdot g_t m_{t-1}) \ m_t = \beta \cdot m_{t-1} + (1-\beta)\cdot g_t \ \eta_t = \alpha \cdot m_t $$ 自适应学习率优化算法 自适应学习率的优化算法考虑二阶动量,一般来说,一阶动量决定优化方向,二阶动量自适应学习率 AdaGrad 二阶动量取梯度平方和:$V_t = \sum\limits^t_{i=1} g^2_i$,此时

    1.3K80发布于 2018-04-27
  • 来自专栏全栈程序员必看

    优化算法】粒子群优化算法简介

    在此基础上,提出了一种基于元启发式( metaheuristic)的粒子群优化算法来模拟鸟类觅食、鱼群移动等。这种算法能够模拟群体的行为,以便迭代地优化数值问题。 例如,它可以被分类为像蚁群算法、人工蜂群算法和细菌觅食这样的群体智能算法。 J. )的强大算法,受鸟群中的规则启发,连续优化过程允许多目标和更多的变化。 ---- 粒子群优化算法伪代码: 其中: V i ( k + 1 ) V_i(k+1) Vi​(k+1) 是下一个迭代速度; W W W 是惯性参数。 为了测试算法,Rastrigin函数将被用作误差函数,这是优化问题中最具挑战性的函数之一。在平面上有很多余弦振荡会引入无数的局部极小值,在这些极小值中,boid会卡住。

    1.9K20编辑于 2022-11-10
  • 来自专栏hotarugaliの技术分享

    优化算法

    简介 深度学习网络中参数更新的优化方法主要分为两种: 调整学习率,使得优化更稳定 梯度估计修正,优化训练速度 2. 常用优化方法汇总 image.png 3. L​,⋯,∂Wt​∂L​)​ 其中, 是第 步的梯度, 是第 步的学习率(可以进行衰减,也可以不变); 是学习率缩放函数,可以取 1 或者历史梯度的模的移动平均; 是优化后的参数更新方向

    1.7K10编辑于 2022-03-10
  • 来自专栏计算机视觉

    深度学习500问——Chapter13:优化算法2

    2)包装法:根据目标函数(通常说预测效果评分),每次选择若干特征,或者排除若干特征。 (3)嵌入法:先使用某些机器学习的算法和模型进行训练,得到各个特征的权值系数,根据系数从大到小选择特征。 反向传播,即根据损失评价函数计算的误差,计算得到梯度,通过梯度反向传播的方式,指导深度网络权值的更新优化。 ,满足 Loss=L(g(x), F(x))取得极小值点,比如简单的损失函数: ,假设损失函数的数据空间是下图这样的,我们最优的权值就是为了寻找下图中的最小值点,对于这种数学寻找最小值问题,采用梯度下降的方法再适合不过了 13.11 深度学习为什么不用二阶优化 目前深度学习中,反向传播主要是依靠一阶梯度。 二阶梯度在理论和实际上都是可以应用都网络中的,但相比于一阶梯度,二阶优化会存在以下一些主要问题: (1)计算量大,训练非常慢。 (2)二阶方法能够更快地求得更高精度的解,这在浅层模型是有益的。

    40710编辑于 2024-09-09
  • 来自专栏SimpleAI

    【DL碎片2】神经网络中的优化算法

    本文继续讨论如何进一步优化我们的梯度下降算法,使得我们的学习更快,学习效果更佳。 虽然每一步没有batch GD的一步走的准,但是我5000步加起来,怎么样也比你走一步的效果好的多,因此可以加快训练速度,更快到达值点。 这就是mini-batch GD方法。 有意思的是,据吴恩达说,mini-batch size 通常取2的指数,主要是16,32,64,128,256,512,1024这几个值,因为计算机是二进制,这样的数字计算起来效率会更高一些。 这个超参数β调了我半天,开始0.9,然后0.95,再0.99,再0.999,终于有了上面的这么一点点的提升,准确率到了92%。可见momentum有一些效果,但是此处还不太明显。 总结一下: Mini-batch GD比传统GD效果更好,训练更快 Momentum动量法可以减小Mini-batch带来的振动 梯度下降的最佳优化方法是Adam算法 Adam算法中的超参数β1和β2以及

    52741发布于 2018-10-25
  • 来自专栏全栈程序员必看

    多目标优化算法(一)NSGA-Ⅱ(NSGA2

    多目标优化算法(一)NSGA-Ⅱ(NSGA2) 注:没有想到这篇博客竟然有很多人查看,这是我去年写的算法,里面难免会有一些错误,大家可以看看评论区,这里的matlab代码写的不太好,是以C语言思维写的, 前言 这个算法是本人接触科研学习实现的第一个算法,因此想在这里和大家分享一下心得。 1. 算法简介 NSGA-Ⅱ算法,即带有精英保留策略的快速非支配多目标优化算法,是一种基于Pareto最优解的多目标优化算法。 end 从二目标优化问题来看,就像是该个体在目标空间所能生成的最大的矩形(该矩形不能触碰目标空间其他的点)的边长之和。拥挤度示意图如图2所示。 算法实现框图 NSGA-Ⅱ算法的基本思想为:首先,随机产生规模为N的初始种群,非支配排序后通过遗传算法的选择、交叉、变异三个基本操作得到第一代子代种群;其次,从第二代开始,将父代种群与子代种群合并,进行快速非支配排序

    15.7K44编辑于 2022-07-21
  • 来自专栏具身小站

    基于ORB-SLAM2算法优化工作

    二值的描述子采用汉明距离表示 随机抽样一致性匹配(RANSAC)法:在一个给定的数据集中,随机选取一组数据点模型拟合,把与模型的拟合程度在阈值内的点归到一组,再用这组数据拟合,直至找出最优的模型参数 ORB-SLAM2算法 :使用 DBOW2 词袋方法建图,对场景中的特征点进行识别与分类,并在此基础上对全局图进行优化,具有线程追踪、地图重构和回环探测等多种功能 2. ORB-SLAM2优化 线特征提取模型优化:在数据预处理阶段,分别使用 ORB和 LSD 提取点、线特征后,对于线特征,提取二进制描述子后,根据外观一致性和几何一致性校验对线特征进行匹配,参考点特征的重投影误差 LSD 线特征提取算法优化:边缘绘制算法一般基于最小二乘线拟合原理检测直线,而线特征检测器 (LSD) 算法合并相似梯度的像素点为线段,然后对所有线段选检测直线。 :在某些情况下,一条完整的线段可能会被误检为多条较短的线段,使用最小长度阈值来限制提取到的线特征的最短长度 其中, 为长度系数,可以通过调整系数筛选掉 LSD 算法提取到的长度过短的线特征 线特征的描述子格式优化

    25510编辑于 2025-12-17
  • 来自专栏红色石头的机器学习之路

    Coursera吴恩达《优化深度神经网络》课程笔记(2)-- 优化算法

    最后,我们介绍了梯度检查,来验证梯度下降算法是否正确。本节课,我们将继续讨论深度神经网络中的一些优化算法,通过使用这些技巧和方法来提高神经网络的训练速度和精度。 1. 2. 这样,相当于结合了Batch gradient descent和Stachastic gradient descent各自的优点,既能使用向量化优化算法,又能叫快速地找到最小值。 RMSprop RMSprop是另外一种优化梯度下降速度的算法。 一般只需要对β1\beta_1和β2\beta_2进行调试。 实际应用中,Adam算法结合了动量梯度下降和RMSprop各自的优点,使得神经网络训练速度大大提高。 9.

    1.3K00发布于 2017-12-28
  • 来自专栏YoungGy

    优化2】整数优化

    或的逻辑约束 三个选择的或 只有才 更多或 整数可除 多边形组合 固定花费 分段线性 组合型 set covering set packing 食堂定位 地图填色 Julia例子 9数独 概述 整数优化就是线性优化 x1被选中当且仅当x2被选中。 x2或x3被选中,可以都被选中。 x2或x3被选中,不可以都被选中。 对应的IP约束为: x1-x3<=0 x1+x5<=1 x1-x2=0 x2+x3>=1 x2+x3=1 或的逻辑约束 或的逻辑问题,可以用用bigM方法去解决,其思想是通过添加新的变量,将部分约束变成多余的 例如,对于问题 [图片] 或 [图片] (两者可以都出现),y1、y2的定义域是[0,5]。 and column j to j+2 @constraint(m, sum{x[r,c,k], r=i:i+2, c=j:j+2} == 1) end for i = 1:9, j = 1:

    1.8K50发布于 2018-01-05
  • 来自专栏张俊红

    懒惰的算法—KNN

    总第77篇 本篇介绍机器学习众多算法里面基础也是“懒惰”的算法——KNN(k-nearest neighbor)。你知道为什么是懒的吗? 如果K=3,由于红色三角形所占比例为2/3,绿色圆将被赋予红色三角形那个类,如果K=5,由于蓝色四方形比例为3/5,因此绿色圆被赋予蓝色四方形类。 二维平面上两点a(x1,y1)与b(x2,y2)间的欧氏距离: 三维空间两点a(x1,y1,z1)与b(x2,y2,z2)间的欧氏距离: 两个n维向量a(x11,x12,…,x1n)与 b(x21,x22 训练算法:KNN没有这一步,这也是为何被称为算法的原因。 测试算法:将提供的数据利用交叉验证的方式进行算法的测试。 使用算法:将测试得到的准确率较高的算法直接应用到实际中。 2、准备数据 3、分析数据 4、测试算法 通过测试最后得出,如果一部电影中含有18次打斗次数,90次接吻次数,那么可以判定为该电影是爱情片。

    2.5K50发布于 2018-04-11
  • 来自专栏全栈程序员必看

    gbdt算法_双色球简单的算法

    解释一下GBDT算法的过程 1.1 Boosting思想 1.2 GBDT原来是这么回事 3. GBDT的优点和局限性有哪些? 3.1 优点 3.2 局限性 4. 解释一下GBDT算法的过程 GBDT(Gradient Boosting Decision Tree),全名叫梯度提升决策树,使用的是Boosting的思想。 /ML-NLP/Machine Learning/3.2 GBDT 代码补充参考for——小白: Python科学计算——Numpy.genfromtxt pd.DataFrame()函数解析(清晰的解释 ) iloc的用法(简单) scikit-learn 梯度提升树(GBDT)调参小结(包含所有参数详细介绍) 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。

    2K20编辑于 2022-11-07
  • 来自专栏技术小站

    吴恩达深度学习笔记 course2 week2 优化算法

    从图中可以看出mini batch 会出现震荡现象,原因:每个子集情况不同,例如可能第一个子集(X {1} ,Y {1} ) 是好的子集,而第二个子集(X {2} ,Y {2} ) 包含了一些噪声noise 如果样本数量小于等于2000,可以直接使用batch gradient descent 数量比较大,size的选取一般为2的幂,推荐常用的有64,128,256,512,选择2的幂的原因:计算机存储数据一般都为 RMSprop是另一种优化梯度下降的算法,它的表达式如上图所示 原理:我们把水平方向看作w,垂直方向看作b,由图中可以看出b方向震荡大,w方向震荡小,即dw小,db大,即上式中的Sdw小,Sdb大 ? 这个相除就较小,所加的ξ是为了防止分母为0 8.Adam optimization algorithm adam优化算法  ? 算法实现如上图,结合动量梯度下降算法和Rmsprop算法特征 各个参数一般设置如下: ? 一般只要对β1,β2进行调试 2.9 Learning rate decay 学习率下降 ?

    71310发布于 2018-09-03
  • 来自专栏null的专栏

    优化算法——遗传算法

    遗传算法的基本概念 遗传算法(Genetic Algorithm, GA)是由Holland提出来的,是受遗传学中的自然选择和遗传机制启发发展起来的一种优化算法,它的基本思想是模拟生物和人类进化的方法求解复杂的优化问题 二进制编码 二进制编码是原始的编码方式,遗传算法最初是在二进制编码的方式下进行运算的。二进制编码也是遗传算法中使用最为直接的运算编码方式。二进制编码是指利用00和11对问题的解向量进行编码。 在对这样的优化问题进行二进制编码的过程中,是将问题的可能解编码为二进制位串,例如问题的可能解为实数对(x1,x2),首先必须将x1和x2分别使用二进制位串表示,然后将他们的二进制位串组合在一起。 其中,前1818位表示的是x1x_1,后1515位表示的是x2x_2。 Gray编码 这种编码方式在求解优化问题时,本人基本上没做过任何研究。 我在这里简单介绍了遗传算法,遗传算法是一个研究较多的算法,还有利用遗传算法求解组合优化问题,带约束的优化问题,还有一些遗传算法的理论知识,如模式定理,积木块假设,在这里就不一一列举了,希望我的博文对你的学习有帮助

    4.4K61发布于 2018-03-20
领券