算不了。 O(n)中的单词

时间:2011-03-06 06:07:36

标签: string algorithm

我正在接受采访。还有一个我遇到困难的面试问题。

  “玫瑰是玫瑰是玫瑰”写道   打印数量的算法   一个字符/单词出现的次数。例如。     A - 3 Rose - 3 Is - 2

     

同时确保打印时   结果,他们是按顺序   原件中有什么   句子。 所有这些按顺序

我确实得到了解决原始句子中存在的顺序中每个单词出现次数的解决方案。我用Dictionary<string,int>来做。但是我不明白n的顺序是什么意思。这是我需要你们解释的东西。

6 个答案:

答案 0 :(得分:2)

有26个字符,因此您可以使用counting sort对它们进行排序,在您的计数排序中,您可以拥有一个索引,该索引确定特定字符何时第一次访问以保存发生顺序。 [它们可以按照它们的计数和它们的出现进行排序,类似于基数排序]。

编辑:通过单词首先每个人都可以考虑它,使用哈希表并在哈希中插入单词,并以这种方式计算它们,并且它们可以在O(n)中排序,因为所有数字都在1..n钢之内,你可以通过计算O(n)中的排序对它们进行排序,也可以为它们的出现,你可以遍历字符串并改变相同值的位置。

答案 1 :(得分:1)

n的顺序意味着您只遍历字符串一次或n的一些较小的倍数,其中n是字符串中的字符数。 因此,存储String及其出现次数的解决方案是O(n),n的顺序,因为只循环完整字符串一次。 但是,它会以您创建的列表的形式使用额外的空间。

答案 2 :(得分:1)

命令N指的是Big O计算复杂度分析,您可以在算法上获得良好的上限。这是我们在数据结构课程的早期所涵盖的一个理论,所以我们可以折磨,我的意思是帮助学生在我们以平衡的方式遍历各种知识树的各种不同的树木时获得它的便利。在您的情况下,他们希望您的算法在计算时间内与文本大小成比例增长。

答案 3 :(得分:1)

这是对Big O notation的引用。基本上,面试官意味着你必须用O(N)算法完成任务。

答案 4 :(得分:1)

“订单n”指的是Big O notation。 Big O是数学家和计算机科学家描述函数行为的一种方式。当某人指定在“按顺序n”中搜索字符串时,这意味着该函数执行所花费的时间随着该字符串的长度增加而线性增长。换句话说,如果您绘制执行时间与输入长度,您会看到一条直线。

假设你的函数必须是Order n并不意味着你的函数必须等于O(n),那么Big O小于O(n)的函数也被认为是可接受的。在您的问题情况下,这是不可能的(因为为了计算一个字母,您必须“触摸”该字母,因此必须有一些操作取决于输入大小)。

答案 5 :(得分:1)

一种可能的方法是线性遍历字符串。然后创建一个哈希和列表。我们的想法是使用单词作为哈希键,并为每次出现增加值。如果散列中的值不存在,请将该单词添加到列表的末尾。遍历字符串后,按顺序浏览列表,使用哈希值作为计数。

算法的顺序是O(n)。哈希查找和列表添加操作是O(1)(或非常接近它)。