Skip to content

2. Add Two Numbers#12

Merged
ryoooooory merged 2 commits intomainfrom
task/2
Jul 20, 2024
Merged

2. Add Two Numbers#12
ryoooooory merged 2 commits intomainfrom
task/2

Conversation

@ryoooooory
Copy link
Copy Markdown
Owner

Copy link
Copy Markdown

@fhiyo fhiyo left a comment

Choose a reason for hiding this comment

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

良いと思います!

ListNode node = new ListNode(sum % 10);
ListNode nextL1 = l1 != null ? l1.next : null;
ListNode nextL2 = l2 != null ? l2.next : null;
node.next = addTwoNumbers(nextL1, nextL2, carry);
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

多分ケアレスミスでしょうが、 addTwoNumbersHelper() ですかね。

スタックフレームサイズは、int が 4byte、ListNode が 8byte (64 ビット JVM のとき)であると見積もると、int 変数が3つ、ListNode が3つなので、4*3+8\*3=36byte くらい?
JVM のデフォルトのスタックサイズは 1MB なので、1M/36byte=27K 回くらい再帰ができるということになる。

ほかに気になったものとして以下のところで番兵(sentinel)をつかっているところがあった。しかし、番兵は条件判定処理の回数を減らすために使われるものなので、今回のケースではあまり意味がないように思えたが、あまり確証はもてませんでした。
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

あ、番兵という言葉はもう少し広いので、ここでいう dummy を指したりもします。

たぶん、「境界条件の判定の簡略化のために使う値」くらいの意味だと思っているようですが、「境界に置く、本来の意味を持たないデータ」くらいの意味で使うので、連結リストの先頭に置いてあるやつも番兵ノードということがあります。

せっかくなので、dummy 抜きで書いてみますか?

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.

そうなんですね!なるほどありがとうございます!
はい、dummyぬきでも実装してみます!

メモリ使用量としては、再帰の深さ D*スタックフレームサイズ M とおおよそ見積もれる。
今回のケースでは再帰の深さは 100
スタックフレームサイズは、int が 4byte、ListNode が 8byte (64 ビット JVM のとき)であると見積もると、int 変数が3つ、ListNode が3つなので、4*3+8\*3=36byte くらい?
JVM のデフォルトのスタックサイズは 1MB なので、1M/36byte=27K 回くらい再帰ができるということになる。
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

戻り先とかも積まれそうですね。単純に実験してみたらどうでしょうか。

@ryoooooory ryoooooory merged commit 00a33fe into main Jul 20, 2024
@rihib rihib mentioned this pull request Aug 6, 2024
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.

4 participants