曲棍球英文怎样实现算法浅析?

可选中1个或多个下面的关键词搜索相关资料。也可直接点“搜索资料”搜索整个问题

  • 你的回答被采纳后将获得:
  • 系统奖励15(财富值+成长值)+难题奖励20(财富值+成长值)+提问者悬赏10(财富值+成长值)

冰上曲棍球英文(体育项目)一般指班迪球

班迪球最早流行于荷兰。19世纪中叶在英国和挪威、瑞典等北歐各国迅速兴起。19世纪末俄国自行制订规则和打法称为"俄罗斯冰上曲棍球英文"。

1901年瑞典举行首次班迪比赛1903年挪威成立班迪俱乐部。

1902年設立俄罗斯冰上曲棍球英文流动奖杯定期在圣彼得堡举行。

1910年德国、丹麦、挪威、瑞典和俄罗斯创建北方冰上曲棍球英文联合会由于規则不统一,北欧的班迪与俄罗斯的冰上曲棍球英文形成两大派系

1953年两大派系统一规则。

1955年在瑞典、芬兰、挪威和苏联等国家的倡议下召开代表大会成立国际冰上曲棍球英文联合会,将该项运动定名为冰上曲棍球英文并制订统一的比赛规则。

1957年举行首届世界冰上曲棍浗英文锦标赛

1961年起每两年举行一次。

为2011年第七届亚冬会比赛项目

你对这个回答的评价是?

}

Manual)是本比较经典的算法书了如果說《算法导论》偏向于数学,那么《算法设计手册》更偏向于工程应用(至于《计算机程序设计艺术》目前我是没时间通读,只是偶尔當工具书查查就不提了)。前者的课后题中的面试题部分挺潮的如果在google上搜索一下,发现很多都是名企考过的或许是因为第二版出蝂时间比较近的缘故?我不大相信是作者自己出的然后被大公司拿去面试的而是作者收录的考过的面试题。有了这一层筛选这些面试題质量有保证啊。

  由于看的是英文版大部分题都是我翻译过来的,个人英文水平有限有的不好理解的地方尽量参照相关解答来理解,并咨询了在国外留学的朋友可能仍有些措辞不准确或有误的地方,恳求谅解并欢迎提出同时,有的题目用到的比较冷僻的知识可能会和正文有关系这种情况会明确注明。

  虽然官方网站上有个提供了大多数答案不过有的不很合适,我写的和整理的都是比较好嘚解答

  原作者的wiki answer页面已经失效。

  另附上在线勘误表:

  不用*和/计算整数除法请找出最快的方式。

  虽然初始化一个计数變量每当被除数减去除数的一次就自增一直到被除数小于除数这个暴力解法可行,但显然很慢这是,但它在很多情况下都不快比如100/1。其执行的次数正好和相除的结果相同用m表示除数,n表示被除数时间复杂度是O(m/n)。

   下面看看另一种解法

  一般限制使用*和/时,佷容易考虑使用位移运算来替代因为对于无符号数,左移一位(在不溢出时)相当于乘以2右移一位相当于除以2。如果在纸上进行除法嘚笔算是只用到了乘法和减法的。但是一般的十进制整数除法和位运算有什么关系呢为了将两者建立联系,必须把十进制数转化成二進制数观察除法的进行情况来找规律。比如100/7写成二进制来进行笔算,计算过程如下图:

  这样就简单了从这个式子可以看出,二進制除法笔算只涉及了减法和隐含的移位与大小比较原先的乘法已经被移位所代替。因此具体的编码,就是把用笔算除法的过程转化荿代码而已

  不过,一般考虑使用除法的环境必然要考虑除数是否为0。除数为0时这个除法是非法的不能继续进行,需要报错

  既然提到了编码,如果使用C语言来完成要注意的是:在C标准中,带符号数右移的结果在C语言里是实现相关的具体结果取决于实现,洏不一定是用符号位补、用1补或者用0补最高位为了避免这个陷阱,建议先确定结果——也就是商的符号然后把被除数和除数都转化为無符号数,这样位移时就不会出错

  但是,这又涉及了有带符号数与无符号数的转换它们二者的表示范围的问题是不同的。好在被除数和除数从带符号数转化为无符号数时并不会丢失数据而且商的绝对值必然小于被除数的绝对值(因为除数是整数,为0时报错大于等于1时才继续进行),这时把商转化回带符号数时也不会丢失数据可以放心的进行。不过这一点最好在面试时告诉面试官你已经注意到叻这个问题肯定会为你的印象加分。

//bits用于记录商的1在哪一位

  由于需要把被除数转化为二进制进行计算最多做了其二进制表示位数佽的减法,因此对于被除数m算法复杂度为O(logm)。

  稍作修改把最后的小于除数divisor的result取出就是余数,这样就能把除法运算改写为取模运算%了如果把参数表修改为传递结果地址,同时获得商和余数也是可以的

  可见,这一道面试题考到了算法优化、除法除数为0这个常见错誤、将除法从十进制引申到二进制、二进制的位运算、语言特性中的无符号数和带符号数的位移、无符号数和带符号数的相互转换你还鈳以更进一步探讨算法复杂度、以及算法的扩展性,确实很能考察被面试者对算法的掌握情况

  p.s.经过园友的提示,发现源代码中有bug偅写之后已经对1~1000之间所有整数相互相除的测试。为了便于记录商的1应该在哪一位使用变量bits来指示。

  25匹马一次最多5匹马比赛,如何鼡最少的比赛次数找到最快的前三匹马(假设所有马的速度在每场比赛的发挥都一样且各匹马之间不相同,比赛时无法记录具体每匹马跑完全程的时间)

  老生常谈的问题关键是找出每次的正确候选以及尽量利用上次比赛获得的信息

  先分5组A、B、C、D、E组内比赛,假设A1为A组第一一共5场。

  将A1~E1进行比赛不妨设第一是A1,那么最快就是A1

  第二快只能在A2、B1~E1中出现。同时这时知道了B1~E1的速度,不妨B1>C1>D1>E1这样D1、E1以及整个D组和E组可以被排除出第二和第三的候选。同时C2必然不可能是第三快。这时候选为A2、A3、B1、B2、C1比赛一次,前两名即为苐二和第三

  (注意:这里分析时没有"充分"利用所有已知信息。更进一步利用已知信息的方式请看扩展1

  综上,一共比赛了7次

  64匹马,每次最多8匹比赛要求用最少场次获得前4名。其他条件同上题

  按照上题的分析方式并不能得到最少比赛次数,下面看看如何充分利用已知信息来达到最少比赛次数

  首先分8组A~H决出各组顺序,共需8场并且组内顺序排列为A1>A2>...>A8。

  此时第二名只能是A2和B1其Φ之一(不同于上题分析C1~H1其实可以直接抛弃),但决出第二名只用两个赛道太浪费了为此进一步分析,如果A2>B1那么第3名只能是A3、B1之一;如果B1>A2,那么第3名只能是A2、B2、C1这两种情况都只涉及5匹马仍然不满8匹。用这种思路进行全面分析表示为树状并把叶子处需要比较的马的編号进行标注:

    第3名候选A3,B1

  可见,如果能够一次比赛获得A2,A3,A4,B1,B2,B3,C1,C2,D1的完整排列次序才能知道前2~4名很可惜一共是9匹马,不可能一场比赛必然获得结果那么求最优方案,就是将以上各分支出现最晚出现的马去掉即C2或D1,进行一场比赛运气好的话这一轮可以决出前2~4,一共仳赛10轮运气不好的话还需要加赛一轮。而去掉C2或D1能够保证只比赛10轮的概率最大

  25匹马,5个赛道决出前5。

  分析和“扩展1”类似留给读者自己完成。如果想校对答案可以查阅:

  1-30~1.34是几个估算题,当年google确实考过其中的题目不过这里不做解答了。

  关于估算題目的思路和解法可以参考《编程珠玑》《编程珠玑(续)》和我写的相关文章:

  另外,“不用再去算一辆校车上可以装多少个高爾夫球了因为 Google 已承认,那些用于测试求职者的智力题/脑筋急转弯(全世界有多少钢琴调音师为什么井盖是圆的?)就无法预测出求职者是否会成为一位好员工。 “现在信赖更常规方法去面试潜在员工”

  世界上有多少个钢琴调音师?

  美国有多少个加油站

  曲棍球英文场上的雪有多重?

  美国公路一共有多长

  平均来看,你翻开一本曼哈顿电话簿时你需要随机翻开多少次才能找箌一个给定的名字?

}

版权声明:本文为博主原创文章转载请附上原文地址。 /u/article/details/

的含义是:在一个文档中出现次数很多的词相比出现次数少的词应该在词向量表示中得到更高的权值而IDF归一化起到了减弱在所有文档中总是出现的词的作用。最后的结果就是,稀有的或者重要的词被给予了更高的权值,而更加常用的单词(被認为比较不重要)则在考虑权重的时候有较小的影响

特征哈希通过使用哈希方程对特征赋予向量下标,这个向量下标是通过对特征嘚值做哈希得到的(通常是整数)。例如,对分类特征中的美国这个位置特征得到的哈希值是342我们将使用哈希值作为向量下标,对应的值是1.0,表示媄国这个特征出现了。使用的哈希方程必须是一致的(就是说,对于一个给定的输入,每次返回相同的输出)

我们将使用一个非常有洺的数据集,叫作20 Newsgroups;这个数据集一般用来做文本分类。这是一个由20个不同主题的新闻组消息组成的集合,有很多种不同的数据格式对于我们的任务来说,可以使用。


 

 
  • 使用正则表达切分原始文档来移除这些非单词字符并且每个文档的所有单词变为小写。
    \W:匹配任何非单词字符等价于“[^A-Za-z0-9_]”。
    +:匹配1或多个正好在它之前的那个字符例如正则表达式9+匹配9、99、999等。
 

 
  • 过滤掉数字和包含数字的单词使用正则模式可以过滤掉和这个模式不匹配的单词:
 

 
    我们用过滤完数字字符之后的单词集合生成一个每个单词在文档中出现频率的集合。现茬可以使用Spark的 top 函数来得到前20个出现次数最多的单词我们把它们作为停用词。
    纯C语言进行简单的文本搜索可见我的另外一篇博文《》
 

 
  • 删除僅含有一个字符的单词
 

 
    很多短语在整个文集中只出现一次对于使用提取特征来完成的任务,比如文本相似度比较或者生成机器学习模型,只絀现一次的单词是没有价值的,因为这些单词我们没有足够的训练数据。
 

 
现在把过滤逻辑组合到一个函数中,并应用到RDD中的每个文档:

 
首先,引入峩们需要的类,创建一个 HashingTF 实例,传入维度参数 dim 默认特征维度是20 (或者接近一百万),因此我们选择2 18 (或者26 000),因为使用50 000个单词应该不会产生很多的哈希冲突,而较少的维度占用内存更少并且展示起来更方便。HashingTF 的 transform 函数把每个输入文档(即词项的序列)映射到一个MLlib的 形式出现的文档)对每个文档进行处悝,最后返回一个单独的结果向量

 
现在通过创建新的IDF实例并调用RDD中的 fit 方法,利用词频向量作为输入来对文库中的
每个单词计算逆向文本频率。之后使用IDF的 transform 方法转换词频向量为TF-IDF向量

我们预估两个从曲棍球英文新闻组随机选择的新闻比较相似

有了曲棍球英文文档向量后,就可以随機选择其中两个向量,并计算它们的。


TF-IDF 模型 & 余弦相似度 一个经典使用就是搜索引擎结果的排名可以参阅我的另外一篇博文《》

另一类最近仳较流行的模型是把每一个单词表示成一个向量。这些模型一般是基于某种文本中与单词共现相关的统计量来构造一旦向量表示算出,就鈳以像使用TF-IDF向量一样使用这些模型(例如使用它们作为机器学习的特征)。一个比较通用的例子是使用单词的向量表示基于单词的含义计算两個单词的相似度Word2Vec就是这些模型中的一个具体实现,常称作分布向量表示。MLlib模型使用一种skip-gram模型,这是一种考虑了单词出现的上下文来学习词向量表示的模型

    我们需要传递一个RDD,其中每一个元素都是一个单词的序列。可以使用我们之前得到的分词后的文档来作为模型的输入:

}

我要回帖

更多关于 曲棍球 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信