簡體   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