美文网首页My favorite
Kata06:这是算法吗!

Kata06:这是算法吗!

作者: 梁杰_numbbbbb | 来源:发表于2014-12-04 09:13 被阅读113次

Kata06地址

前几天事情比较多,Kata没有按照一天一个的进度完成。做之前问了一下小伙伴,他说这次是个算法题,挺麻烦。我听完就是心头一紧,这才第6个Kata就要搞算法,那后面岂不是没法做下去了。

直到看完题目我才松了一口气,以这个作者的尿性就不可能出纯算法题嘛!

任务

这次的任务是从一串单词中找到所有异构单词。好吧我也不知道这么翻译对不对,反正化学上学过异构我就叫它异构了。

异构简单来说就是组成元素相同但是结构不同,比如说fresher和refresh就是一对异构单词。

我们的目标就是找出输入单词中的所有异构单词。

这题乍一看上去还是挺唬人的,似乎一下就会想到什么公共子序列啊逆序对啊K(看)M(毛)P(片)算法啊这些东西,很遗憾的是这作者装得不像,还在文章结尾说

大家好我用ruby实现了一个hack版本可以在i7的电脑上1.8秒执行完成哦

我一看这个输入列表有30W+个单词,我就明白他啥意思了,这题根本不是算法题,就是个脑筋急转弯。

思路

思路其实很简单,关键是别掉进算法的圈套。

简单来说,我们需要一个hash函数,这个函数对于异构单词的hash结果是相同的,我采用的方法是计算单词中的所有字符以及每个字符的出现次数,然后用这个信息构建一个字符串当作结果。

举例来说,fresher中出现了5个字母:fresh,出现次数分别是:12211,我们可以按照字典序构造一个字符串:e2f1h1r2s1,这就是hash结果。我们可以对refresh应用同样的过程,由于最后会按照字典序排序,所以消除了字符出现位置对结果的影响。

这个函数搞定之后下面就简单了,直接用结果当作dict的key,value是一个array,存储这个key对应的所有字符串,这些字符串都是异构的。

代码

仍然是我喜欢的Python,只有10行哦:

import collections

all_results = {}

with open("wordlist.txt") as f:
    for i in f.readlines():
        temp = i.strip()
        count_list = list(i)
        temp_list = list(set(temp))
        all_results.setdefault("".join([j + str(count_list.count(j)) for j in temp_list]), []).append(temp)

这段代码在我的电脑上执行时间大概是3.6秒,不过我的是i5,这段代码性能瓶颈主要都是CPU运算,所以换成i7的话应该不输作者的1.8秒。

总结

我最喜欢的就是这类旁门左道,又好玩又高效,何乐而不为呢?不过最近感觉是该捡捡算法了,等21个Kata全部做完就开始做算法题,基础还是不能丢啊。

相关文章

  • Kata06:这是算法吗!

    Kata06地址 前几天事情比较多,Kata没有按照一天一个的进度完成。做之前问了一下小伙伴,他说这次是个算法题,...

  • 主动工作就是1优点吗

    主动工作精神抖擞吗 subscribe接口能获取到数据变化吗 原来算法才是软件价值吗 算法是世界上的最难问题吗 为...

  • 还有人在质疑数据挖掘是泡沫吗?千万不要叶公好龙

    数据挖掘会饱和吗?学大数据还有机会吗?这是很多计算机专业的学生,编程和算法技术员考虑的问题。 数据挖掘不是独立市场...

  • 回溯算法

    回溯算法 回溯算法介绍   回溯算法并不是非常复杂的算法, 很多人接触过但是未必知道这是回溯算法; 典型的回溯算法...

  • 数据结构第二季 Day12 图 Bellman-Ford、Flo

    一、Bellman-Ford 算法 1、Bellman-Ford 支持负权边吗?能检测出是否有负权环吗?算法核心原...

  • java虚拟机(三) - 垃圾回收算法

    # 垃圾收集算法 1、标记-清除(Mark-Sweep)算法 这是最基础的算法,标记-清除算法就如同它的名字样,分...

  • 抽奖算法

    有大佬能写出优于以上算法的更好算法吗?共同学习,欢迎留言交流

  • 算法(8):动态规划

    这是我最想写的一篇文章之一了~ 因为这玩意真难...... 目录:算法:附录算法(1):递归算法(2):链表算法(...

  • 垃圾回收器

    一、如何回收? 1.1 垃圾收集算法: (1)标记-清除(Mark-Sweep)算法 这是最基础的算法,就像它名字...

  • 数据结构第一季 Day01 算法复杂度

    一、 初识算法 1. 算法用来做什么?解决同一个问题,不同的算法效率可能差距会很大吗? 算法是用来解决特定问题的一...

网友评论

    本文标题:Kata06:这是算法吗!

    本文链接:https://www.haomeiwen.com/subject/cdwgtttx.html