【项目总结】性能优化之算法优化

KNN算法在IT项目中的性能优化:从理论到实战 阅读详情

源头

            GroupPassRate groupPassRate = new GroupPassRate();
            groupPassRate.Groups = arrClass;
            groupPassRate.Files = arrFile;
            groupPassRate.PassRateArray = new PassRateBase[arrClass.Count][];
            for (int nRow = 0; nRow < arrClass.Count; nRow++)
            {
                groupPassRate.PassRateArray[nRow] = new PassRateBase[arrFile.Count];
                for (int nCol = 0; nCol < arrFile.Count; nCol++)
                {
                    //计算每个分类每次测量的合格率
                    groupPassRate.PassRateArray[nRow][nCol] = StatPassRate(arrFile[nCol].FileID, arrClass[nRow].ClassID, bFD);
                }
            }
            return groupPassRate;

这里计算每个分类的每次测量的合格率每次都要去数据库查一次这个文件的这个分类的测量数据,假如有20个分类,10个文件,每个文件有1000条数据。因为数据库查找是全表扫描,所以查找一个分类要10*1000次数,所以慢。

办法

这个是名义值的数据结构

    public class DM_ModelNominal
    {
        public UInt32 NominalID;        //ID
        public UInt32 PointID;          //测点ID

        public float Nominal;           //名义值
        public float UpTol;             //上公差
        public float LowTol;            //测量数据类型

        public float CenterCtrl;        //中心线
        public float UpCtrl;            //上控制线
        public float LowCtrl;           //下控制线

        public int NominalType;         //名义值类型
        public int Status;              //修改状态

        public string PointDir;         //测点名称和特征
        public string DirName;	        //方向   
        public string RelationPoint;    //相关点

        public string Description = "";
    }

这个是提前查出来的矩阵数据

    public class DM_MeasureMatrix
    {
        //NominalArray和FileArray必须是有序的,分别按NominalID和FileID排序
        public List<DM_ModelNominal>     NominalArray = null; 
        public List<DM_ModelMeasureFile> FileArray = null;

        protected UInt32[] m_arrNominalID = null;
        protected UInt32[] m_arrFileID = null;
        protected int[] m_arrRowIndex = null;
        protected int[] m_arrColIndex = null;
        protected float[] m_arrData = null;
        private const float NULL_VALUE = -999;
        public int Cols{ ... ... }
        public int Rows{ ... ... }
        //构建矩阵
        public void MakeMatrix(){ ... ...}
        public void Sort(bool bSortDate, bool bSortNominal){ ... ...}
        private void SortFile() { ... ...}
        private void SortNominal(){ ... ... }
        //增加测量值
        public void AddValue(UInt32 nNominalID, UInt32 nFileID, float fValue){ ... ...}
        //查找名义值行索引
        protected int FindNominal(UInt32 nNominalID){ ... ... }
        //取得值
        public float GetValue(int nRow, int nCol){ ... ... }
        public DM_ModelNominal GetNominal(int nRow){ ... ... }
        public DM_ModelNominal GetNominalByID(UInt32 nNominalID){ ... ... }
        public DM_ModelMeasureFile GetFile(int nCol) { ... ... }
        public DM_ModelMeasureFile GetFileByID(UInt32 nFileID){ ... ... }
        //判断测量数据是否为空
        public bool IsDataNull(int nRow, int nCol) { ... ... }
        //查找文件列索引
        protected int FindFile(UInt32 nFileID) { ... ... }
    }

现在就是要得到区域合格率
优化办法就是:
查出ClassPoint表

ClassIDClassPointIDPointID
………

ClassID和PointID的映射关系是多对多
DM_ModelNominal类里面也有PointID映射到NominalID,关系是多对一
可以建立ClassID到NominalID的映射关系

for(int i=0;i<ClassPoint.Count;i++)//20
{
	for( int j=0; j<ModelNomial.Count; j++)//400
	{
		if(ClassPoint[i].PointID == ModelNominal[j].PointID)
		{
			for(查找到NominalID下对应的Nominal值)//1000个nominal值
			{
				Model model = new Model( ){ 分类名称="侧墙" , 总数 =0 , 合格数量=0 };
				//这里是有取数据的操作的,取得复杂度是O(1)使用HashTable时
				HashTable[ClassID].总数++;
				if(合格)
				HasTable[ClassID].合格数量++;
			}
		}
	}
}

总结

1、数组是查找快(连续的内存),更新慢、链表是更新快,查找慢(不连续内存)
2、HashTable的查找快
3、数据结构就是排序、查找两种
归并排序、堆排序、快速排序
分别是稳定、不稳定、很不稳定
NLogN、NLogN、(N~N^2)
内存是归并需要一倍内存、堆需要。。、快速排序不需要内存

C++视觉算法实战:从OpenCV环境搭建到性能优化与项目部署 计算机视觉作为人工智能的核心领域,其核心原理是通过算法让机器“看懂”图像与视频。在工业级应用中,C++因其高性能和资源控制能力成为视觉算法落地的首选语言。OpenCV作为开源视觉库,提供了丰富的算法实现,但实际开发中常面临环境配置复杂、内存管理困难、多线程同步和性能瓶颈等技术挑战。理解cv::Mat的内存模型、掌握智能指针与多线程编程,是构建稳健视觉系统的关键。通过VSCode+CMake搭建跨平台开发环境,结合SIMD指令集与硬件加速,能显著提升算法效率。本文以实时运动目标检测系统为例,系统阐述从环境配置 阅读详情

相关推荐

性能优化案例(一):通过修改路由算法提升系统性能

性能优化案例一通过修改路由算法提升系统性能 概述 系统结构 优化方法 优化效果 性能优化案例(一):通过修改路由算法提升系统性能 概述 一般性能优化方法有两种:一是,从代码层面优化,提升某个方法的性能,从而提升单机性能;二是,从系统结构层面优化,通过减少无用功,来减少资源消耗。这里,我们写一个用第二种方法优化性能的例子。 系统结构 首先,说一下最初的系统结构。我们有一

albon arith 1701

这10种神级性能优化手段,你用过几个?

以ROI的视角看软件开发,初期人力成本的投入,后期的维护成本,计算资源的费用等等,选一个合适的方案而不是一个性能最高的方案。本篇结合个人经验总结了常见的性能优化手段,这些手段只是冰山一角。在初期就设计实现出一个完美的高性能系统是不可能的,随着软件的迭代和体量的增大,利用压测,各种工具(profiling,vmstat,iostat,netstat),以及监控手段,逐步找到系统的瓶颈,因地制宜地选择优化手段才是正道。有利必有弊,得到一些必然会失去一些,有一些手段要慎用。

weixin_42246291的博客 925

【Oracle】Oracle优化53个规则详解

Oracle优化53个规则详解

tttzzzqqq2018的博客 1719

如何进行性能优化和算法优化?

性能优化和算法优化是编程中至关重要的方面,特别是在涉及大规模数据处理、实时系统或资源受限环境下。C语言作为一种底层、高性能的编程语言,对性能的优化有着显著的影响。在本文中,我们将深入探讨如何在C语言中进行性能和算法优化的方法和技术。

weixin_68551689的博客 1326

5、算法优化与Bug报告处理技术探究

本文探讨了基于K-臂赌博机的自适应ETLBO算法(AETLBO-KAB)及其改进版本AETLBO-KABwithDG在非线性连续优化问题中的应用,同时研究了Bug报告自动化分类技术。通过实验对比不同算法在多个测试函数上的性能,分析了特征选择与实例选择顺序对Bug分类准确性的影响。结果表明,提出的加权数据缩减方法有效提升了文本分类器在工业规模Bug报告数据集上的分类效果。

algae的博客 58

Java算法测试实战项目:全面掌握算法设计与性能优化

条件推荐结构只需去重,无序访问HashSet需要自动排序输出TreeSet元素不可比较或未实现Comparable必须用HashSet对性能敏感且数据量大优先HashSet,除非明确需要排序综上所述,合理选择集合类型不仅能提升算法效率,还能简化代码逻辑。开发者应在设计初期就明确数据的操作模式(读多写少?是否排序?),据此作出科学选型。断言是测试的灵魂,决定了验证的精度与表达力。JUnit Jupiter 提供了丰富的Assertions。

weixin_29138345的博客 693

Java中的算法分析:如何评估和优化算法的性能

无论是通过选择合适的数据结构,还是通过优化算法的逻辑,掌握这些技术将有助于开发出更高效、更响应的应用程序。常见的时间复杂度有O(1)、O(log n)、O(n)、O(n log n)、O(n^2)等。例如,递归算法会使用额外的栈空间,而迭代算法可能只使用常量级的额外空间。例如,二叉树的递归遍历会使用O(h)的栈空间,其中h是树的高度。:优化算法的时间复杂度,例如使用快速排序代替冒泡排序,或通过改进算法的逻辑来降低复杂度。:尽量减少算法的内存使用,例如通过使用原地排序算法来减少额外的内存占用。

微赚淘客系统开发者博客 1141

微信小游戏五子棋实战:从零构建高分项目,详解AI算法与性能优化

游戏开发是前端技术栈的重要应用领域,其核心在于将交互逻辑、状态管理与图形渲染高效结合。在移动端,微信小游戏凭借其轻量化、即点即玩的特性,成为开发者实践游戏开发的热门平台。通过Canvas绘图实现动态界面,结合事件驱动模型处理用户输入,能够构建出流畅的交互体验。在技术价值上,一个结构清晰、性能优异的游戏项目不仅能提升用户体验,更是开发者工程能力的体现。本文以五子棋小游戏为具体应用场景,深入探讨了从环境搭建、核心游戏逻辑到AI对手实现的全过程。项目特别关注了**性能优化**,如使用Web Worker分离AI计

weixin_33824363的博客 1160

性能优化——算法优化

背景 由于某种原因,我们系统需要记录另一个系统中一个表里的id。 但是,当我们记录完了以后,别人系统可能会删除那个表里的一些数据,这样的话,我们这边就多了一些无效数据,所以,我们必须的找到这些无效的id,然后将其删除。   开始,我们的实现是这样:我们将记录下来的所有id放在一个list里,然后传到另一个系统,他将他们已经删除的id返回。具体处理代码如下: public String f

梦想起飞的地方,必须用心去经营 3169

程序性能调优技巧(数据优化和算法优化,ByChinasei)

程序性能调优技巧(数据优化和算法优化,ByChinasei) 版权所有 郭可华 很实用的技巧,适合学习!

ADRC自抗扰控制:工程抗扰“黑科技”,附C代码实战!

自抗扰控制(ADRC)是一种革新性的强鲁棒控制策略,通过主动估计和补偿系统扰动,无需精确数学模型即可实现优异控制性能。本文详细解析ADRC三大核心组件:跟踪微分器(TD)实现指令柔化,扩张状态观测器(ESO)实时估计总扰动,非线性状态反馈(NLSEF)完成动态补偿。针对二阶系统,文章提供完整的参数设计方法和C语言实现框架,包括关键函数fhan和fal的代码实现。ADRC将复杂对象"线性化"为积分器串联系统,显著提升抗扰能力,特别适用于电机控制、飞行器姿态等存在模型不确定性和强干扰的场景。

技术工作者 1730

让你眼前一亮的算法优化技巧总结!!!

例如,给你一串字母,让你判断这些字母出现的次数时,我们就可以把这些字母作为下标,在遍历的时候,如果字母a遍历到,则arr[a]就可以加1了,即 arr[a]++;把对应的数值作为数组下标,如果这个数出现过,则对应的数组加1。慢指针一次移动一个节点,而快指针一次移动两个节点,如果该链表没有环,则快指针会先遍历完这个表,如果有环,则快指针会在第二次遍历时和慢指针相遇。有时候我们在进行除数或乘数运算的时候,例如n / 2,n / 4, n / 8这些运算的时候,我们就可以用移位的方法来运算了,这样会快很多。...

weixin_62421895的博客 1760

jetson nano网络配置(有线、无线、USB)

注意:本节内容使用Jetson nano B01 版本或Jetson nano ALT 版本安装方式相同,在安装无线网卡等设备时,由于线材和设备比较脆弱,需要轻拿轻放,接口连接不上时,需要重新对准接口在进行连接,不要强行连接。Jetson nano 需要连接网络来进行更多的操作,本节就来讲解Jetson nano 的三种网络连接方法。有线:我们可以使用网线连接Jetson nano 的RJ45 接口,实现联网。

m0_73841621的博客 1万+

oracle常用优化方法

oracle常用优化方法

qq_19972217的博客 7389

DPM|03Injection设置

摘要:本文介绍了CFD软件Fluent中粒子注入的设置方法。粒子注入是将离散颗粒引入连续相的过程,可用于模拟灰尘、燃料液滴等。设置流程包括:选择粒子类型(质量less、惰性等)、定义注入点属性(坐标、时间、粒径等)、处理多组分粒子、使用文本文件批量定义复杂注入。文中还详细说明了要考虑的湍流影响,包括随机追踪法模拟湍流扩散,以及粒子旋转建模等注意事项。最后介绍了多种注入类型和粒子类型,并强调在湍流系统中需设置足够的尝试次数以确保结果准确性。

qq_28258217的博客 2228

Zemax非序列模式新手入门:从零搭建一个抛物面反射镜系统(含灯丝光源与探测器设置)

本文详细介绍了如何在Zemax非序列模式下从零搭建抛物面反射镜系统,包括灯丝光源配置、反射镜建模和探测器设置等关键步骤。通过实战指南,帮助光学设计新手快速掌握非序列模式的应用技巧,特别适合处理复杂光线传播场景如反射镜系统和杂散光分析。

weixin_28717431的博客 436

算法性能优化的注意点

memset是大家常用的函数,而且一般的编程书籍都会谆谆告诫大家:申请内存后要初始化,防止使用未经初始化的内存导致不可预知的结果,所以我们一般都会按照如下方式编写代码: char* buffer = (char*)malloc(1024); memset(buffer, 0x00, 1024); 代码看起来很标准,也很美观,但这里却隐藏着一个陷进:memset的性能并不高!如果你的内存在1K左右,可能还察觉不到,但如果是1M,那性能影响就很明显了,我们来看实测数据(Redhat EL5 Inte.

weixin_42186805的博客 423

笔试题-2023-紫光展锐-数字芯片设计【纯净题目版】

笔试题-2023-紫光展锐-数字芯片设计【纯净题目版】

w0shishabi的博客 2923

程序性能优化

编写高效的程序需要做到一下几点: 第一:选择一组适当的算法和数据结构; 第二:编写出编译器能够有效优化以转换成高效可执行代码的源代码; 第三:针对处理运算量特别大的计算,将一个任务分成多个部分,这些部分可以在多核和多处理器的某种组合上并行地计算。 程序优化地步骤: 第一:消除不必要的工作,让代码尽可能有效地执行所期望地任务。这包括消除不必要的函数调用,条件测试,内存引用。这些优化不依赖于目标机器的任何具体属性。(编译器收到妨碍优化的因素的阻碍,妨碍优化的因素就是程序...

lipanpan900721的博客 679

什么是垂直同步?电脑快速消除屏幕撕裂与提升游戏性能的方法 垂直同步、游戏画面撕裂、游戏优化、VSync、FPS、FreeSync、G-Sync、显卡驱动更新、游戏画质、输入延迟

看这张动图,左边的画面出现了明显“切开”的断层现象,而右边画面非常流畅,没有撕裂。这正是「垂直同步」开关的区别。:每秒生成多少帧图像。比如 60FPS 表示一秒钟显示 60 张图片。刷新率(Refresh Rate):显示器每秒刷新几次画面,单位是赫兹(Hz)。60Hz 表示每秒刷新 60 次。参数说明FPS显卡渲染速度(逻辑帧率)刷新率显示器的显示频率(物理限制)当 FPS 高于刷新率时,显卡渲染的画面来不及被显示器显示,导致撕裂。屏幕撕裂(Screen Tearing)

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1343

某勾网之登录过程逆向

拉勾网的登录过程逆向,包含请求头(X-S-HEADER、X-K-HEADER、X-SS-REQ-HEADER等) 以及 请求参数/返回数据的加解密。

shanf7921的博客 3万+

万字长文,算法工程师的深度经验总结!

本文对自己的成长和思路进行了总结,总共分了三个角度:模型策略、工作思路以及个人成长,总结了自己在算法岗位三年的心得体会。目录:模型策略篇。讨论算法方案的思考。工作思路篇。工作思维,结果导向。个人成长篇。如何让自己更好地解决更多问题。

2401_85378759的博客 1422

使用 Azure DevSecOps 和 AIOps 构建可扩展且安全的多区域金融科技 SaaS 平台

这家虚构的金融科技 SaaS 组织在 Microsoft Azure 上构建了一个现代化的多区域架构,以实现高可用性、主动安全性和简化的 DevSecOps 工作流。如果您是 DevOps 从业者、SRE 专业人士或致力于创建弹性、可扩展且安全的金融科技解决方案的技术领导者,您将从中获得可直接应用于您自身项目的见解和经验教训。与大多数快速扩张的金融科技公司一样,他们需要确保不间断的正常运行时间、坚不可摧的安全性以及快速的功能交付,以满足全球用户群的需求。即使是短暂的中断也会损害用户的信心和忠诚度。

介绍AWS Azure GCP devops Terraform 等技术 1298

基于神经网络算法的函数寻优和工程优化

文献[1]的研究以生物神经系统和人工神经网络为灵感,提出了一种求解复杂优化问题的元启发式优化算法——神经网络算法(Neural network algorithm, NNA),它是基于人工神经网络(Artificial neural networks, ANNs)的独特结构而发展起来的。为了解决优化问题,需要将决策变量的值表示为一个数组。在解释NNA过程之前,应该先介绍一下用来描述这种算法的关键术语。每个个体或代理,一个包含每个优化变量的值的集合,被称为“模式解”(例如,在GA中,这个数组被称为“染色体”)

心升明月的博客 3772

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

几种常见的性能优化方法

1.使用数据压缩算法,减少落盘数据大小,要针对不同的数据选择不同的压缩算法,考虑压缩率; 2.使用内存映射技术,减少数据拷贝,充分利用pageCache; 3.充分利用顺序读和顺序写,减少磁盘寻道和寻址时间; 4.采用合适的数据结构与算法设计高效的索引; 5.IO与计算分离; 6.GC的优化,内存的优化,充分利用内存,减少GC; 7.池化技术,线程池化,数据库连接池化等; 8.使用NIO,减少IO...

m0_38141821的博客 2107

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

六、内功算法之算法性能优化

3-SUM问题 任给一堆数,从中任选3个,相加和为0. 常规实现 3个for循环 public int count(int[] ids){ int count = 0; int length = ids.length; for (int i = 0; i < length; i++) { for (int j ...

大道至简 461

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

上一篇: 【NET】.NET 插件模型
下一篇: 【NET】分布式系统架构的思路
It_sharp
博客等级 码龄10年 51粉丝 231原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值