Skip to content

49. Group Anagrams#12

Open
tom4649 wants to merge 1 commit intomainfrom
49.Group-Anagrams
Open

49. Group Anagrams#12
tom4649 wants to merge 1 commit intomainfrom
49.Group-Anagrams

Conversation

@tom4649
Copy link
Copy Markdown
Owner

@tom4649 tom4649 commented Mar 14, 2026

- 計算量はO(nl)
- 入力がアルファベット小文字以外のときには例外処理で対応
- 実行時間はsol1の方が速い
- pythonのsortedが高速でloglが定数倍より速い?
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Native code の部分だというだけで感覚10-20倍程度速いです。

下につけたのは適当に拾ってきたソートの速度の比較ですが、ネイティブコードにすると10-20倍くらいは簡単に変わるんですね。
C 言語と Python は50-100倍くらい違い、ただしネイティブコードでもガーベージコレクションなど Python Object の操作をしないといけないので、C 言語並までにはならないだろうくらいの推測です。
https://discord.com/channels/1084280443945353267/1367399154200088626/1372840818397810701

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

なるほど、そう考えると色々な組み込み関数は知っておくと良さそうです。(基数ソートをRadix sortというの知らなかったです。これが一番速いんですね)

def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
anagram_sets = defaultdict(list)
for orig_str in strs:
sorted_str = sorted(orig_str)
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

私は "".join まで上の行でしてしまうかもしれません。まあ、どちらでもいいです。

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sorted_key = "".join(sorted(orig_str))
anagram_sets[sorted_key].append(orig_str)

この方が見やすいですね

@tom4649 tom4649 changed the title 9. Group Anagrams 49. Group Anagrams Mar 14, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants