RKo*_*dla 1 java random loops boolean
假设我们有两个文本输入."input1"是小说中的一页."输入2"是一个随机的句子"你好吗?".我需要验证是否可以使用input1中的单词构造此输入2.我能解决这个问题的唯一解决办法是这样的.
步骤0:创建一个布尔标志,并将value设置为true.
step1:将第一个输入拆分为标记,并将每个单词出现的次数存储在hashmap中.
step2:将 第二个输入拆分为标记并迭代标记.
step3:在循环内部,检查当前标记是否存在于地图中.如果没有,请将boolean标志设置为false并退出循环.如果是,请检查从Map返回的条目的值.如果为零,则将布尔标志设置为false并退出循环.如果值为1或更大,则将其减1并继续循环.
step4:完成循环后,返回布尔标志的值.
如您所见,如果输入很大,step1和step3可能需要很长时间.有哪些替代方法可以解决这个问题,可以有更好的运行时间?
你正在成为"过早优化"的牺牲品(查阅它).你的方法是合理的,实现一些东西,看看它是如何表现的.你会惊讶于Java的速度有多快Map
,而且分成标记(单词)也不会很费时.
只有在确定存在性能问题后才会担心优化,然后仅优化分析工作已确定为有问题的代码.任何其他方法都浪费你的时间,这比几万亿个CPU周期贵得多.
根据评论中的额外信息编辑:
如果您知道目标短语(问题中的"随机句子")总是比主要文本短很多,则可以进行一项改进.反转解决方案并将目标词放入其中Map
并在扫描主文本时使用类似的算法.您的搜索空间会更小,只要您在主文本中找到足够的单词,就可以停止搜索.
但是,仅当目标短语始终短于未明确指定的主文本时,此速度才会更快.对于指定数量级(一页和一个句子)的文本大小,性能差异几乎不可测量.
归档时间: |
|
查看次数: |
44 次 |
最近记录: |