内部元素一一对应的集合的算法优化,从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怎么写。以后再研究吧。

 


目录
相关文章
|
4天前
|
存储 算法 数据处理
公司局域网管理中的哈希表查找优化 C++ 算法探究
在数字化办公环境中,公司局域网管理至关重要。哈希表作为一种高效的数据结构,通过哈希函数将关键值(如IP地址、账号)映射到数组索引,实现快速的插入、删除与查找操作。例如,在员工登录验证和设备信息管理中,哈希表能显著提升效率,避免传统线性查找的低效问题。本文以C++为例,展示了哈希表在局域网管理中的具体应用,包括设备MAC地址与IP分配的存储与查询,并探讨了优化哈希函数和扩容策略,确保网络管理高效准确。
|
2天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于生物地理算法的MLP多层感知机优化matlab仿真
本程序基于生物地理算法(BBO)优化MLP多层感知机,通过MATLAB2022A实现随机数据点的趋势预测,并输出优化收敛曲线。BBO模拟物种在地理空间上的迁移、竞争与适应过程,以优化MLP的权重和偏置参数,提升预测性能。完整程序无水印,适用于机器学习和数据预测任务。
|
3天前
|
算法 数据安全/隐私保护
基于二次规划优化的OFDM系统PAPR抑制算法的matlab仿真
本程序基于二次规划优化的OFDM系统PAPR抑制算法,旨在降低OFDM信号的高峰均功率比(PAPR),以减少射频放大器的非线性失真并提高电源效率。通过MATLAB2022A仿真验证,核心算法通过对原始OFDM信号进行预编码,最小化最大瞬时功率,同时约束信号重构误差,确保数据完整性。完整程序运行后无水印,展示优化后的PAPR性能提升效果。
|
6天前
|
机器学习/深度学习 数据采集 算法
基于PSO粒子群优化的CNN-LSTM-SAM网络时间序列回归预测算法matlab仿真
本项目展示了基于PSO优化的CNN-LSTM-SAM网络时间序列预测算法。使用Matlab2022a开发,完整代码含中文注释及操作视频。算法结合卷积层提取局部特征、LSTM处理长期依赖、自注意力机制捕捉全局特征,通过粒子群优化提升预测精度。适用于金融市场、气象预报等领域,提供高效准确的预测结果。
|
2月前
|
算法 数据可视化 安全
基于DWA优化算法的机器人路径规划matlab仿真
本项目基于DWA优化算法实现机器人路径规划的MATLAB仿真,适用于动态环境下的自主导航。使用MATLAB2022A版本运行,展示路径规划和预测结果。核心代码通过散点图和轨迹图可视化路径点及预测路径。DWA算法通过定义速度空间、采样候选动作并评估其优劣(目标方向性、障碍物距离、速度一致性),实时调整机器人运动参数,确保安全避障并接近目标。
156 68
|
21天前
|
算法
基于遗传优化算法的风力机位置布局matlab仿真
本项目基于遗传优化算法(GA)进行风力机位置布局的MATLAB仿真,旨在最大化风场发电效率。使用MATLAB2022A版本运行,核心代码通过迭代选择、交叉、变异等操作优化风力机布局。输出包括优化收敛曲线和最佳布局图。遗传算法模拟生物进化机制,通过初始化、选择、交叉、变异和精英保留等步骤,在复杂约束条件下找到最优布局方案,提升风场整体能源产出效率。
|
27天前
|
机器学习/深度学习 存储 算法
近端策略优化(PPO)算法的理论基础与PyTorch代码详解
近端策略优化(PPO)是深度强化学习中高效的策略优化方法,广泛应用于大语言模型的RLHF训练。PPO通过引入策略更新约束机制,平衡了更新幅度,提升了训练稳定性。其核心思想是在优势演员-评论家方法的基础上,采用裁剪和非裁剪项组成的替代目标函数,限制策略比率在[1-ϵ, 1+ϵ]区间内,防止过大的策略更新。本文详细探讨了PPO的基本原理、损失函数设计及PyTorch实现流程,提供了完整的代码示例。
231 10
近端策略优化(PPO)算法的理论基础与PyTorch代码详解
|
11天前
|
数据采集 人工智能 编解码
算法系统协同优化,vivo与港中文推出BlueLM-V-3B,手机秒变多模态AI专家
BlueLM-V-3B是由vivo与香港中文大学共同研发的多模态大型语言模型,专为移动设备优化。它通过算法和系统协同优化,实现了高效部署和快速生成速度(24.4 token/s),并在OpenCompass基准测试中取得优异成绩(66.1分)。模型小巧,语言部分含27亿参数,视觉编码器含4000万参数,适合移动设备使用。尽管如此,低端设备可能仍面临资源压力,实际应用效果需进一步验证。论文链接:https://arxiv.org/abs/2411.10640。
31 9
|
20天前
|
机器学习/深度学习 数据采集 算法
基于WOA鲸鱼优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目基于MATLAB 2022a实现时间序列预测,采用CNN-GRU-SAM网络结构,结合鲸鱼优化算法(WOA)优化网络参数。核心代码含操作视频,运行效果无水印。算法通过卷积层提取局部特征,GRU层处理长期依赖,自注意力机制捕捉全局特征,全连接层整合输出。数据预处理后,使用WOA迭代优化,最终输出最优预测结果。
|
23天前
|
算法
基于SOA海鸥优化算法的三维曲面最高点搜索matlab仿真
本程序基于海鸥优化算法(SOA)进行三维曲面最高点搜索的MATLAB仿真,输出收敛曲线和搜索结果。使用MATLAB2022A版本运行,核心代码实现种群初始化、适应度计算、交叉变异等操作。SOA模拟海鸥觅食行为,通过搜索飞行、跟随飞行和掠食飞行三种策略高效探索解空间,找到全局最优解。