×

containskey时间复杂度

containskey时间复杂度(Java 如何实现日文新旧字体之间的转换)

admin admin 发表于2024-03-28 19:57:48 浏览22 评论0

抢沙发发表评论

大家好,containskey时间复杂度相信很多的网友都不是很明白,包括Java 如何实现日文新旧字体之间的转换也是一样,不过没有关系,接下来就来为大家分享关于containskey时间复杂度和Java 如何实现日文新旧字体之间的转换的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!

本文目录

Java 如何实现日文新旧字体之间的转换

实现思路一:采用字符串的方式实现 view plain copypackage com.bzu.converter; import java.util.Scanner; /** * 思路一:采用字符串的方式实现 */ public class JianFanConvert1 { public static final String jianti = "万与丑专业丛东丝"; public static final String fanti = "万与丑专业丛东丝"; public static void main(String args) { Scanner input = new Scanner(System.in); System.out.println("请输入你想转换的句子"); String words = input.next(); for (int i = 0; i 《 words.length(); i++) { char tempChar = words.charAt(i); int position = jianti.indexOf(tempChar);//此方法调用时间复杂度为O(n) char fantiChar; if (position == -1) { fantiChar = tempChar; } else { fantiChar = fanti.charAt(position); } System.out.print(fantiChar); } } } 分析上述实现,时间复杂度为O(n*n),当问题规模扩大时会非常耗时。实现思路二:采用哈希算法实现1.哈希方法哈希方法在就是在键和值之间建立一个确定的对应函数关系hash(),就是key向value的换算关系,使得每一个键与结构中的一个唯一的存储位置相对应:值的存储位置=hash(键)即Value的位置=hash(key)例如有一组“键值对”:、、、、,我们按照如下哈希函数对键进行计算:hash(x)=x%17+3,得出如下结果:hash(5)=8、hash(8)=11、hash(12)=15、hash(17)=3、hash(20)=6。我们把、、、、分别放到地址为8、11、15、3、6的位置上。当要检索17对应的值的时候,只要首先计算17的哈希值为3,然后到地址为3的地方去取数据就可以找到17对应的数据是“Lily”了。使用哈希方法,查询的时间复杂度为O(1),能够直接定位其位置,大大加快数据的查询速度。2.哈希表将数据采用哈希算法进行保存的数据结构就是哈希表,常见操作put、get、remove。Java中的HashMap使用(Java内置的哈希表数据结构)HashMap的主要方法int size():得到Map中“键-值对”的数量boolean isEmpty():Map是否是空的,也就是是否不含有任何“键-值对”boolean containsKey(Object key):Map中是否含有以key为键的“键-值对”boolean containsValue(Object value):Map中是否含有以value为值的“键-值对”Object get(Object key):从Map中得到以key为键的值,如果Map中不含有以key为键的“键-值对”则返回nullObject put(Object key, Object value):向Map中存储以key为键、value为值的“键-值对”Object remove(Object key):从Map中移除以key为键的“键-值对”void clear():清除所有“键-值对”Set keySet():得到所有的键Collection values():得到所有的值Set entrySet():得到所有的“键-值对”,Set中的类型是Map.Entry view plain copypackage com.bzu.converter; import java.util.HashMap; import java.util.Map; import java.util.Scanner; /** * 思路二:采用哈希算法实现 */ public class JianFanConvert2 { public static final String jianti = "万与丑专业丛东丝"; public static final String fanti = "万与丑专业丛东丝"; public static void main(String args) { Map map=new HashMap(); for(int i=0;i《jianti.length();i++){ map.put(jianti.charAt(i),fanti.charAt(i)); } Scanner input = new Scanner(System.in); System.out.println("请输入你想转换的句子"); String words = input.next(); /** * 为了测试随着问题规模的扩大用时 */ for(int i=0;i《10;i++){ words=words+words; } long begin=System.currentTimeMillis(); for (int i = 0; i 《 words.length(); i++) { char tempChar = words.charAt(i); Character character=map.get(tempChar); char fantiChar; if (character == null) { fantiChar = tempChar; } else{ fantiChar=character; } System.out.print(fantiChar); } long end=System.currentTimeMillis(); System.out.println("\n用时:"+(end-begin)); } } 分析上述算法实现,时间复杂度变为o(n)问题探讨:为什么算法复杂度由O(n*n)变成O(n),但是实际执行时间没有明显的变化?print,数据在CPU、内存中运算都非常快,一旦与外设(打印机、网络(网卡)、显示设备(显卡))交换数据,速度就会慢很多

sqlserver中有一张非法过滤词库表,表中5000+条数据,后台用C#,如何以最快速度对一篇文章进行非法过滤

先把词库读到内存中的字典:以第一个字符为Key的字典,以List《string》为Value(考虑到可能有词汇第一个字符是相同的)

Dictionary《char, List《String》》 词库 = new Dictionary《char, List《String》》();

再用 System.IO.FileStream类 读取文件。

先读取一行string line = FileStream1.ReadLine()

然后一个一个字符Read,判断是不是ContainsKey(’字符’),如果含有,再把这个字符开头的列表中完整字符串读出来,然后进行比对

foreach (string 字符串 in 列表)

{

int 开始位置 = 当前字符在行中位置

int 搜索长度 = 要比较的字符串长度

使用line.IndexOf(字符串, 开始位置, 搜索长度) 》 0 或者使用

line.Contains(字符串) //哪种效率高要试试才知道

这样只需要把文件扫描一次,每次调用哈希表来判断字符,时间复杂度O(1),匹配时搜索当前行的小范围,性能比多次扫描大大提升。

}

我只提供思路,具体代码的自己写把。

如满意,请采纳,谢谢。

如何判断map容器的key是否存在

首先,不推荐使用重载大致是这样一个内容:data_type& operator( const key_type& k ){value_type v(k, data_type());iterator it = insert(v).first;} 大致是这样,如果没有找到的话就插入一个,然后返回它的second。 正确的判断方法是使用map的find函数,由于map是一个红黑树,find的时间复杂度是logn,可以接受。 bool i***ist(constStri

以上就是我们为大家找到的有关“containskey时间复杂度(Java 如何实现日文新旧字体之间的转换)”的所有内容了,希望可以帮助到你。如果对我们网站的其他内容感兴趣请持续关注本站。