0

最近、私はインタビューに行き、インタビュアーは私にこの質問をしました.

size の k+1 スタックがあります1, 2^1, 2^2, 2^3, ...,2^k。それぞれ呼びましょうstack 1, stack 2, ... stack k+1。がinsert(x)呼び出されると、要素は最初のスタック、つまりサイズ 1 のスタックに挿入されます。スタックがいっぱいの場合、そのスタックの要素は次のスタックに移動され、要素は最初のスタックに挿入されます。パイプ操作に似ています。スタック 1 は要素をスタック 2 にプッシュし、スタック 2 はスタック 3 などにプッシュします。すべてのスタックがいっぱいになると、スタック オーバーフローを示すエラーがスローされます。別の操作、delete(x) があります。スタックのスタックから x を削除します。したがって、x が最上位の要素ではない場合、つまりスタック 1 に存在しない場合は、そこから要素をポップし、要素をシフトしてから、要素が見つかるまでポップを試みて削除します。この実装の挿入と削除の償却後の複雑さは?

編集 1 : 挿入と削除がどのように機能するかを示します。
それぞれサイズ 2^0 と 2^1 のスタック 1 とスタック 2 の 2 つのスタックがあるとします。
反復 0 : スタック 1 -> {}、スタック 2 -> {}
反復 1 : Insert(1)。スタック 1 -> {1}、スタック 2 -> {}、トップ -> 1
反復 2 : Insert(2)。スタック 1 -> {2}、スタック 2 -> {1}、トップ -> 2
反復 3 : Insert(3)。スタック 1 -> {3}、スタック 2 -> {2,1}、トップ -> 3
反復 4 : Insert(4)。オーバーフロー例外。スタック 1 -> {3}、スタック 2 -> {2,1}、トップ -> 3
反復 5 : delete(2)。

  • 2!=3 として 3 をポップして続行します。スタック 1 -> {2}、スタック 2 -> {1}、トップ -> 2
  • 2をポップして返します。スタック 1 -> {1}、スタック 2 -> {}、トップ -> 1
    反復 6 : Insert(4)。スタック 1 -> {4}、スタック 2 -> {1}、トップ -> 3
    両方の操作が明確になったことを願っています :)

私は自分のレベルで最善を尽くしましたが、最悪の場合の時間の複雑さ、つまり1+2^1+2^2+..+2^k(幾何学的進行の合計) しかわかりませんでした。最悪の場合の時間の複雑さを探しているわけではありません。償却された複雑さにさえ到達できませんでした。この問題の償却された複雑さを計算する方法を理解するのに役立つ人はいますか?

4

1 に答える 1

0

償却分析の最も一般的なツールは、ウィキペディアで使用できる「潜在的な方法」です。

プログラミングは苦手だけど。代わりに宗教について話しましょう。地獄について話しましょう。

地獄はk同心円状のリングで構成されており、リングは堀で区切られています。ある階から次の階へと堀を渡る唯一の方法は、渡し守を雇うことですが、渡し守は見返りに金貨を欲しがります。もちろん、地獄で金を手に入れる方法はありません。あなたが埋められているものは何でも、それはあなたが使うことができるものです.(地獄の最初のリングに入るにはコインも必要です.

興味深いことに、リング オブ ヘルのルールはスタックのルールと同じです。各リングはその前のリングの 2 倍の大きさです (この形状について考えないようにしてください)。リングがいっぱいになり、誰かがそこに移動したいときはいつでも、まずそのリングの誰かが渡し守を雇って連れて行かなければなりません。次のリングへ。

奇妙なことに、地獄にはフェリーマンが 1 人しかおらず、彼のボートは 1 席しかありません。彼は、雇われている堀で魔法のように実体化し、彼を雇った人を1分間連れて行きます。そのため、一度にフェリーに乗れるのは 1 人だけです。

これは、地獄全体で 1 分間に 1 枚の金貨しか消費されないことを意味します。つまり、新しい誰かが地獄に入りたいと思った場合、最初のいくつかのリングがすべていっぱいになった場合、渡し守が彼を地獄に連れて行くまでに何分もかかるということです。

地獄は今は空っぽだけど、映画でしゃべった人が1023人亡くなったから、1023人で埋まるくらい。最初の 9 つの円は、1、2、4、8、16、32、64、128、256、および 512 人で埋められます。

  1. 512リングに落ちた人は、それぞれ何枚のコインで埋葬されるべきですか? 256 リングにたどり着く各人についてはどうですか?
  2. 集団埋葬には、合計で何枚のコインを使用する必要がありますか?
  3. フェリーマンが全員を所定の位置に運ぶのにどれくらい時間がかかりますか?
  4. 平均して、地獄に入る前に各人はどのくらい待たなければなりませんか?
  5. の償却複雑度はinsert?
于 2015-02-10T16:26:03.420 に答える