如何让性能提升10万倍以上

2024-05-06 06:58
文章标签 性能 提升 以上 万倍

本文主要是介绍如何让性能提升10万倍以上,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

      从100万个数字中找最大的10个数(提前是元素都是int)?

     首先指明原作者:这是《java特种兵》 谢宇 在书本出的一个题,给出了思路,这个思路特别妙。

     思路演化阐述:

      1、从10个数中找出最大的数?

            思路1:先排序啊。

           这也是我的第一思路,用冒泡呢?还是 直接插入   还希尔呢?我在脑子转了一圈,在比较那个排序更优。

           其实你做了之后发现,这些排序都的循环套循环,时间复杂度O(nxn)。下面给的冒泡排序

          

package BubbleSort;
/*
* 冒泡排序 从小到大排序
* 2016年7月22日15:00:46
* 唐凌峰
*/
public class BubbleSort2 {
/*
* 从小到大排序  如何让这个算法实现转换成 从大到小呢? 其实很简单 
*/
public void bubbleSortTest(){
int bubble[] ={8,18,4,78,11,96,88,99};
for(int i=0;i<bubble.length;i++){
for(int j=0;j<bubble.length-i-1;j++){
//比较相邻两个元素的大小,一定要相邻元素比较,为什么原理就只这样的。
if (bubble[j+1]>bubble[j]){
int temp =bubble[j];
bubble[j]=bubble[j+1];
bubble[j+1]=temp;
};								
} 
};
//打印出排序好的数组				
for(int i=0;i<bubble.length;i++){
System.out.println("Index: "+i+"  value: "+bubble[i]);
}
}
public static void main(String[]  args){
BubbleSort2  bubbleSort= new BubbleSort2();
bubbleSort.bubbleSortTest();
}
}

           思路2: 假设第一个元素就是最大。

           再遍历以后的9个元素,跟第一个比,比第一大就交互。这样的时间复杂度就是O(n)。

           请看下面代码:

          

package MaxAndMin;
/*
* 查找最大值 
* 时间:2016年7月30日19:12:47
* 编辑:唐凌峰
*/
public class FindMax {
public static void findMaxTest1(){
int[] arrayTest1=new int[]{100,4564,333333,666,9999,5,66,89,77,99,22};
//假设第一个是最大的或最小的
int minValue=arrayTest1[0];		
for(int i=1;i<arrayTest1.length;i++){
if(arrayTest1[i]>minValue){
minValue=arrayTest1[i];				
}			
};
System.out.print(minValue);
}
public static void main(String[] args){
FindMax.findMaxTest1();
}
}

            这样不用排序也能找出最大的,而且性能提高了,是不是能妙。


  2、如何从100万个元素中找出10最大的元素?

         思路1:还先排序,不用了吧,我们模仿从10元素个中找最大的。那个中不用排序的思路。

                      假设这100万个无序序列的前10个元素是最大 。

                      从i=10开始遍历这100万个元素,跟前面的10个元素比较,只要比这个10个元素中的任何一个大就交换

                      请看下面代码实现:

package MaxAndMin;
/*
* 从100万无序数中,找出最大的10个 int取值范围: -2147483648~2147483647
* 唐凌峰
* 2016年7月30日17:03:43
* 这个时间复杂度虽然是o(nxn) 其实比排序快多了  排序是100万x 100万 这个只有 10x100万。一下性能提高了10万倍!
*/
public class FindTenMax {
public static void findTenNode(){
int[] arrayNode=new int[]{11,4,515,55,66,111,71,77,99,22,222,123,345,7899,124,156,167,1677,176,178,189,999,10000,11111,7777,788787,168888};
//假定前10个数是最大的,然后拿后面的元素更这10个元素一一对比,只要比其中任何一个大就换进去
int[] arrayAssume={11,4,515,55,66,111,71,77,99,22};
for(int i=10;i<arrayNode.length;i++){
for(int j=0;j<arrayAssume.length;j++){
if(arrayNode[i]>arrayAssume[j]){
int temp =arrayAssume[j];
arrayAssume[j]=arrayNode[i];
arrayNode[i]=temp;					
}
}		
}
for(int k=0;k<10;k++){
System.out.print(""+arrayAssume[k]+",");
}
}
public static void  main(String[]  args){
FindTenMax.findTenNode();
}
}

    这样表面上看时间复杂度还是O() 其实你指向看这样做的计算机值最坏的时候了 就:10x100万步

    如果你先排序,就是:100万x100万步。

    性能一下提升了 10万倍,如果只找最大的5个,性能提高的可不是10万倍

    思路决定出路,现在对这话,理解的更有感悟。


   这里面思路妙在:假设  假设。

   其实想想我们的直接插入排序,类似用的这个思路。

   记得以前在铁科院给动车做的一个项目,每张表的数据至少100万以上。现在看来有些地方可以深度优化的。

                     

          


    




这篇关于如何让性能提升10万倍以上的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/963701

相关文章

Springboot中分析SQL性能的两种方式详解

《Springboot中分析SQL性能的两种方式详解》文章介绍了SQL性能分析的两种方式:MyBatis-Plus性能分析插件和p6spy框架,MyBatis-Plus插件配置简单,适用于开发和测试环... 目录SQL性能分析的两种方式:功能介绍实现方式:实现步骤:SQL性能分析的两种方式:功能介绍记录

Tomcat高效部署与性能优化方式

《Tomcat高效部署与性能优化方式》本文介绍了如何高效部署Tomcat并进行性能优化,以确保Web应用的稳定运行和高效响应,高效部署包括环境准备、安装Tomcat、配置Tomcat、部署应用和启动T... 目录Tomcat高效部署与性能优化一、引言二、Tomcat高效部署三、Tomcat性能优化总结Tom

使用DeepSeek API 结合VSCode提升开发效率

《使用DeepSeekAPI结合VSCode提升开发效率》:本文主要介绍DeepSeekAPI与VisualStudioCode(VSCode)结合使用,以提升软件开发效率,具有一定的参考价值... 目录引言准备工作安装必要的 VSCode 扩展配置 DeepSeek API1. 创建 API 请求文件2.

C#使用yield关键字实现提升迭代性能与效率

《C#使用yield关键字实现提升迭代性能与效率》yield关键字在C#中简化了数据迭代的方式,实现了按需生成数据,自动维护迭代状态,本文主要来聊聊如何使用yield关键字实现提升迭代性能与效率,感兴... 目录前言传统迭代和yield迭代方式对比yield延迟加载按需获取数据yield break显式示迭

Java实现任务管理器性能网络监控数据的方法详解

《Java实现任务管理器性能网络监控数据的方法详解》在现代操作系统中,任务管理器是一个非常重要的工具,用于监控和管理计算机的运行状态,包括CPU使用率、内存占用等,对于开发者和系统管理员来说,了解这些... 目录引言一、背景知识二、准备工作1. Maven依赖2. Gradle依赖三、代码实现四、代码详解五

正则表达式高级应用与性能优化记录

《正则表达式高级应用与性能优化记录》本文介绍了正则表达式的高级应用和性能优化技巧,包括文本拆分、合并、XML/HTML解析、数据分析、以及性能优化方法,通过这些技巧,可以更高效地利用正则表达式进行复杂... 目录第6章:正则表达式的高级应用6.1 模式匹配与文本处理6.1.1 文本拆分6.1.2 文本合并6

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

黑神话,XSKY 星飞全闪单卷性能突破310万

当下,云计算仍然是企业主要的基础架构,随着关键业务的逐步虚拟化和云化,对于块存储的性能要求也日益提高。企业对于低延迟、高稳定性的存储解决方案的需求日益迫切。为了满足这些日益增长的 IO 密集型应用场景,众多云服务提供商正在不断推陈出新,推出具有更低时延和更高 IOPS 性能的云硬盘产品。 8 月 22 日 2024 DTCC 大会上(第十五届中国数据库技术大会),XSKY星辰天合正式公布了基于星