内部元素一一对应的集合的算法优化,从list到hashmap

说是算法优化,基本上是在吹牛,只不过算是记录下,我写代码时候的思路。毕竟还是小菜鸟。

我要开一个party,与会者都是情侣,但是情侣并不是一起过来的,而是有先有后,但是每位与会者来的时候都拿着一束鲜花,第一件事情就是送给自己的伴侣。

设计一个算法,最高效率的解决这个事情。

最开始的时候,是这样的。

 

Java代码  

  1. import java.util.ArrayList;  
  2. import java.util.List;  
  3.   
  4.   
  5. public class TestParty {  
  6.   
  7.     List<Person> persons = new ArrayList<Person>();  
  8.       
  9.     void onPersonArrived(Person A){  
  10.         persons.add(A);  
  11.         String name = getGirlFriendName();  
  12.         for(Person p:persons){  
  13.             if(p.getName().equals(name)){  
  14.                 sendFlow(p);  
  15.             }  
  16.         }  
  17.     }  
  18.   
  19.     private void sendFlow(Person p) {  
  20.         // TODO Auto-generated method stub  
  21.           
  22.     }  
  23.   
  24.     private String getGirlFriendName() {  
  25.         // TODO Auto-generated method stub  
  26.         return "小丽";  
  27.     }  
  28. }  

相当于A来了以后,挨个问所有到场的人的名字,看看跟自己的女朋友名字一样不一样,如果一样,就把花送给他。

 

但是很明显,挨个问是非常没有效率的事情。

所以应该用hashmap,所以代码变成这样。

 

Java代码  

  1. import java.util.HashMap;  
  2. import java.util.Map;  
  3.   
  4.   
  5. public class TestHashMapParty {  
  6.       
  7.     private Map<String,Person> persons = new HashMap<String,Person>();  
  8.       
  9.     void onPersonArrived(Person A){  
  10.         persons.put(getPositionByName(A.getName()), A);  
  11.         String name = getGirlFriendName();  
  12.         Person B = persons.get(getPositionByName(name));  
  13.         if(B != null){  
  14.             sendFlow(B);  
  15.         }  
  16.     }  
  17.   
  18.     private void sendFlow(Person b) {  
  19.         // TODO Auto-generated method stub  
  20.           
  21.     }  
  22.   
  23.     private String getGirlFriendName() {  
  24.         // TODO Auto-generated method stub  
  25.         return null;  
  26.     }  
  27.   
  28.     private String getPositionByName(String name) {  
  29.         // TODO Auto-generated method stub  
  30.         return null;  
  31.     }  
  32.   
  33. }  

这次我们的party组织的更好了,每个人来了之后,会从组织者那里根据自己名字拿到自己安排的座位,然后坐上去,同时,还可以根据女朋友的名字拿到女朋友的座位,然后直接走过去,把花送给她。

 

故事到这里讲完了吗?对于一个人来说,故事已经结束了,但是对于代码来说,还没有。

代码里有一个方法叫

Java代码  

  1. private String getPositionByName(String name) {  
  2.     // TODO Auto-generated method stub  
  3.     return null;  
  4. }  

我在这里没有实现,但是如果具体实现的话,应该是某种算法,或者数据库记录。因为java对象所有的记忆功能都是我们代码赋予的。如果我们没有赋予它记住自己女朋友的功能,那么每次给女朋友送花的时候,都需要调用一次这个方法,事实上也是低效的。

 

于是贴出最终的代码。Person.java

Java代码  

  1. public class Person {  
  2.     private String name;  
  3.       
  4.     private String position;  
  5.       
  6.     private String girlFriendPosition;  
  7.       
  8.     String getName(){  
  9.         return name;  
  10.     }  
  11.   
  12.     public String getPosition() {  
  13.         return position;  
  14.     }  
  15.   
  16.     public void setPosition(String position) {  
  17.         this.position = position;  
  18.     }  
  19.   
  20.     public String getGirlFriendPosition() {  
  21.         return girlFriendPosition;  
  22.     }  
  23.   
  24.     public void setGirlFriendPosition(String girlFriendPosition) {  
  25.         this.girlFriendPosition = girlFriendPosition;  
  26.     }  
  27.   
  28.     public void setName(String name) {  
  29.         this.name = name;  
  30.     }  
  31.       
  32.       
  33. }  

TestHashMap.java

 

 

Java代码  

  1. import java.util.HashMap;  
  2. import java.util.Map;  
  3.   
  4.   
  5. public class TestHashMapParty {  
  6.       
  7.     private Map<String,Person> persons = new HashMap<String,Person>();  
  8.       
  9.     void onPersonArrived(Person A){  
  10.         String position = getPositionByName(A.getName());  
  11.         persons.put(position, A);  
  12.         A.setPosition(position);  
  13.         A.setGirlFriendPosition(getPositionByName(getGirlFriendName()));  
  14.         Person B = persons.get(A.getGirlFriendPosition());  
  15.         if(B != null){  
  16.             sendFlow(B);  
  17.         }  
  18.     }  
  19.   
  20.     private void sendFlow(Person b) {  
  21.         // TODO Auto-generated method stub  
  22.           
  23.     }  
  24.   
  25.     private String getGirlFriendName() {  
  26.         // TODO Auto-generated method stub  
  27.         return null;  
  28.     }  
  29.   
  30.     private String getPositionByName(String name) {  
  31.         // TODO Auto-generated method stub  
  32.         return null;  
  33.     }  
  34.   
  35. }  

 

我们给了Person两个成员变量,专门用来记住自己的位置和女朋友的位置。这样效率应该是最高了。但是比较繁琐。

终极优化应该是。

 

Java代码  

  1. MyMap = new MyMap();  
  2. B = map.get(A);  
  3. A = map.get(B);  

现在的HashMap是没办法处理null 的,因为A和B不是同时来,所以现在的HashMap如果想用A做B的key,B做A的key会遇到NULL问题。

 

至于MyMap怎么写。以后再研究吧。

 

时间: 2024-10-28 16:41:13

内部元素一一对应的集合的算法优化,从list到hashmap的相关文章

SQL Server 聚合函数算法优化技巧

原文:SQL Server 聚合函数算法优化技巧 Sql server聚合函数在实际工作中应对各种需求使用的还是很广泛的,对于聚合函数的优化自然也就成为了一个重点,一个程序优化的好不好直接决定了这个程序的声明周期.Sql server聚合函数对一组值执行计算并返回单一的值.聚合函数对一组值执行计算,并返回单个值.除了 COUNT 以外,聚合函数都会忽略空值. 聚合函数经常与 SELECT 语句的 GROUP BY 子句一起使用.   v1.写在前面 如果有对Sql server聚合函数不熟或者忘

深入学习SQL Server聚合函数算法优化技巧_MsSql

Sql server聚合函数在实际工作中应对各种需求使用的还是很广泛的,对于聚合函数的优化自然也就成为了一个重点,一个程序优化的好不好直接决定了这个程序的声明周期.Sql server聚合函数对一组值执行计算并返回单一的值.聚合函数对一组值执行计算,并返回单个值.除了 COUNT 以外,聚合函数都会忽略空值. 聚合函数经常与 SELECT 语句的 GROUP BY 子句一起使用. 一.写在前面 如果有对Sql server聚合函数不熟或者忘记了的可以看我之前的一片博客. 本文中所有数据演示都是用

深入学习SQL Server聚合函数算法优化技巧

Sql server聚合函数在实际工作中应对各种需求使用的还是很广泛的,对于聚合函数的优化自然也就成为了一个重点,一个程序优化的好不好直接决定了这个程序的声明周期.Sql server聚合函数对一组值执行计算并返回单一的值.聚合函数对一组值执行计算,并返回单个值.除了 COUNT 以外,聚合函数都会忽略空值. 聚合函数经常与 SELECT 语句的 GROUP BY 子句一起使用. 一.写在前面 如果有对Sql server聚合函数不熟或者忘记了的可以看我之前的一片博客. 本文中所有数据演示都是用

Redis近似LRU算法优化

公有云Redis服务:https://www.aliyun.com/product/kvstore?spm=5176.8142029.388261.37.59zzzj 背景 在前一篇文章<Redis作为LRU Cache的实现>中,我们看到了在Redis 2.8.19中LRU算法的具体实现,Redis使用了24 bit的lru时间戳来模拟一个近似的LRU算法,节省了实现一个严格LRU算法所需要的大量内存空间. 但是,上篇文章我们也挖了一个坑,说过现有的近似算法模拟效果还有待提高,今天这篇文章就

通信网络中OSPF协议应用与算法优化

3G通信技术已被广泛的应用,并日益向4G演进,通信网络中接入站和传输点的数量呈倍数增长,且仍有快速增长的趋势.通信网络的站点网的能力及局部故障恢复保护机制的要求也变得更高.开放最短路径优先(0SPF)属于一类动态路由的选择协议,它能够快速查探运行网络的拓扑改变,并能够经快速的收敛计算无环路新路由,时间短并用数据流很小,已成现代的通信网组网最佳选择.1通信网络和OSPF协议的相关概念1.1通信网络的相关概念传统通信网络,也就是电话交换网络,由交换.传输及终端组成.交换是终端信息交换中介体,传输是信

Java编程中快速排序算法的实现及相关算法优化_java

时间复杂度 平均情况:O(nlgn) 最坏情况:O(n*n),发生在当数据已经是排序状态时 快排算法的基本原理 1.从数据中选取一个值a[i]作为参考 2.以a[i] 为参考,将数据分成2部分:P1.P2,P1中的数据全部≤a[i],P2中的数据全部>a[i],数据变为{{P1}{a[i]}{P2}} 3.将P1.P2重复上述步骤,直到各部分中只剩1个数据 4.数据完成升序排列 基本示例: 原始数据: {3,9,8,5,2,1,6} 第1步:选取第1个数据:3 第2步:将数据分成2部分,左边≤3

【天池直播】同济教授分享应用算法优化航空运营(第一场运筹学领域直播)

本周邀请同济大学教授.航空AI大赛冠军团队导师带来应用算法优化航空运营的分享. 梁老师将从时间维度上简要介绍航空公司运营过程中的规划步骤和关键流程,并以 "机组排班问题"和"飞机维护路由问题"两个核心业务难题为重点详细展开. 从问题的定义,到目标.约束剖析,再到模型的具体形式,以及大规模线性规划问题求解的列生成方法. 直播主题:应用算法优化航空运营 直播时间:10月26日 20:00 直播链接:点击直播 直播嘉宾: 梁哲 天池昵称梁哲 同济大学同济大学管理科学与工程

模拟退火算法优化BP神经网络函数拟合源程序,急求,毕设用 matlab

问题描述 模拟退火算法优化BP神经网络函数拟合源程序,急求,毕设用 matlab 想用模拟退火优化BP神经网络,但误差增大,急求解决. 主函数:需调用函数fx2.evaluate和errorBP clc clear %随机产生200组输入数据x.输出数据y input=10*rand(2,200)-5; output=zeros(1,200); for i=1:200 output(i)=fx2(input(:,i)); end %设置网络节点数 inputnum=2; hiddennum=5;

raphael-Raphael移动元素的效率问题,怎么优化

问题描述 Raphael移动元素的效率问题,怎么优化 我现在知道的有移动元素效果的方法有3个: 1.setViewBox(),改变画布视窗: 2.transform(),变换元素: 3.改变元素attr: 这3个方法在IE11下都特别卡,有没有好的解决办法? 解决方案 http://codego.net/596505/