如何让性能提升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

相关文章

Docker多阶段镜像构建与缓存利用性能优化实践指南

《Docker多阶段镜像构建与缓存利用性能优化实践指南》这篇文章将从原理层面深入解析Docker多阶段构建与缓存机制,结合实际项目示例,说明如何有效利用构建缓存,组织镜像层次,最大化提升构建速度并减少... 目录一、技术背景与应用场景二、核心原理深入分析三、关键 dockerfile 解读3.1 Docke

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱

深度剖析SpringBoot日志性能提升的原因与解决

《深度剖析SpringBoot日志性能提升的原因与解决》日志记录本该是辅助工具,却为何成了性能瓶颈,SpringBoot如何用代码彻底破解日志导致的高延迟问题,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言第一章:日志性能陷阱的底层原理1.1 日志级别的“双刃剑”效应1.2 同步日志的“吞吐量杀手”

Java利用@SneakyThrows注解提升异常处理效率详解

《Java利用@SneakyThrows注解提升异常处理效率详解》这篇文章将深度剖析@SneakyThrows的原理,用法,适用场景以及隐藏的陷阱,看看它如何让Java异常处理效率飙升50%,感兴趣的... 目录前言一、检查型异常的“诅咒”:为什么Java开发者讨厌它1.1 检查型异常的痛点1.2 为什么说

Java慢查询排查与性能调优完整实战指南

《Java慢查询排查与性能调优完整实战指南》Java调优是一个广泛的话题,它涵盖了代码优化、内存管理、并发处理等多个方面,:本文主要介绍Java慢查询排查与性能调优的相关资料,文中通过代码介绍的非... 目录1. 事故全景:从告警到定位1.1 事故时间线1.2 关键指标异常1.3 排查工具链2. 深度剖析:

深入解析Java NIO在高并发场景下的性能优化实践指南

《深入解析JavaNIO在高并发场景下的性能优化实践指南》随着互联网业务不断演进,对高并发、低延时网络服务的需求日益增长,本文将深入解析JavaNIO在高并发场景下的性能优化方法,希望对大家有所帮助... 目录简介一、技术背景与应用场景二、核心原理深入分析2.1 Selector多路复用2.2 Buffer

基于Python Playwright进行前端性能测试的脚本实现

《基于PythonPlaywright进行前端性能测试的脚本实现》在当今Web应用开发中,性能优化是提升用户体验的关键因素之一,本文将介绍如何使用Playwright构建一个自动化性能测试工具,希望... 目录引言工具概述整体架构核心实现解析1. 浏览器初始化2. 性能数据收集3. 资源分析4. 关键性能指

Zabbix在MySQL性能监控方面的运用及最佳实践记录

《Zabbix在MySQL性能监控方面的运用及最佳实践记录》Zabbix通过自定义脚本和内置模板监控MySQL核心指标(连接、查询、资源、复制),支持自动发现多实例及告警通知,结合可视化仪表盘,可有效... 目录一、核心监控指标及配置1. 关键监控指标示例2. 配置方法二、自动发现与多实例管理1. 实践步骤

MySQL深分页进行性能优化的常见方法

《MySQL深分页进行性能优化的常见方法》在Web应用中,分页查询是数据库操作中的常见需求,然而,在面对大型数据集时,深分页(deeppagination)却成为了性能优化的一个挑战,在本文中,我们将... 目录引言:深分页,真的只是“翻页慢”那么简单吗?一、背景介绍二、深分页的性能问题三、业务场景分析四、

MySQL 多列 IN 查询之语法、性能与实战技巧(最新整理)

《MySQL多列IN查询之语法、性能与实战技巧(最新整理)》本文详解MySQL多列IN查询,对比传统OR写法,强调其简洁高效,适合批量匹配复合键,通过联合索引、分批次优化提升性能,兼容多种数据库... 目录一、基础语法:多列 IN 的两种写法1. 直接值列表2. 子查询二、对比传统 OR 的写法三、性能分析