繁体   English   中英

数数 O(n)中的单词数

[英]Count no. of words in O(n)

我在这里接受采访。 我遇到了另一个面试问题。

“一朵玫瑰是一朵玫瑰是一朵玫瑰”编写一种算法,打印出一个字符/单词出现的次数。 例如A – 3玫瑰– 3是– 2

另外,在打印结果时,请确保它们与原始句子中显示的顺序一致。 所有这些按顺序n

我确实得到了解决方案,可以按照原始句子中显示的顺序对句子中每个单词出现的次数进行计数。 我用Dictionary<string,int>来做到这一点。 但是我不明白n阶的含义。 那是我需要你们的解释。

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

编辑:通过单词,每个人都可以想到的第一件事,就是使用哈希表并在哈希中插入单词,并以此方式对它们进行计数,并且可以将它们按O(n)排序,因为所有数字都在1..n之内您可以通过计算O(n)中的排序来对它们进行排序,对于它们的出现,您还可以遍历字符串并更改相同值的位置。

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

阶数N是指Big O计算复杂度分析,您可以在其中获得很好的算法上限。 这是我们在数据结构课程中较早讲到的一种理论,所以我们可以折磨,我的意思是帮助我们在以平衡的方式遍历时,通过不同的知识树堆,帮助学生获得便利。 在您的情况下,他们希望您的算法在计算时间上的增长与文本的大小成正比。

它是对Big O符号的引用。 基本上,面试官意味着您必须使用O(N)算法来完成任务。

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

说您的函数必须为n阶并不意味着您的函数必须等于O(n),Big O小于O(n)的函数也被认为是可接受的。 在遇到问题的情况下,这是不可能的(因为要计算字母,您必须“触摸”该字母,因此必须根据输入大小进行一些操作)。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM