1

signcryption のスキームを開発しました。剰余累乗にかかる時間をテストしたいと思います。私はsigncryption部分に以下のコードを使用しています

start = time.clock()
gamma  =    pow(g , x, p)
print ('The value of gamma is : '),gamma
Time_signcrypt = time.clock() - start

unsigncryption 部分については、このコード行にかかる時間を計算しています

start = time.clock()
seed =  (XA + x - XA) 
gamma_new = pow(g , seed, p)
Time_new_gamma = time.clock() - start

問題は同じ値を使用していることです。両方のタイミング関数から得られる結果は異なります。

Signcryption values: 
0.035299674 
0.025940017 

Unsigncryption values: 
0.019342944
0.01727206

同じ関数が同じパラメーターで両端に適用されるため、値は同じである必要があります。もう 1 つの重要なことは、unsigncryption 部分では 1 つのステップが追加されますが、それでも所要時間は signcryption 部分よりも短いということです。何が悪いのかわかりません。ほぼ35回テストしましたが、ほとんどの場合、結果は異なります:(

どこが間違っているのかアドバイスしてください。

4

3 に答える 3

4

メソッドの時間を計測するには、累積時間が10 秒以上になるまでメソッドを何度も実行し、その時間を実行回数で割ります。

そうしないと、さまざまな理由により、タイミングが非常に不正確になります。

  1. CPU を取得するその他のプロセス
  2. バックグラウンドで実行中の割り込み
  3. 熱効果
  4. 宇宙放射線
  5. あなたはアイデアを得る.. ;-)
于 2010-06-28T12:05:29.577 に答える
3

まさにこの種のことを行うためのtimeitモジュールがあります。コードを複数回 (デフォルトでは 100 万回) 実行し、その実行の統計を報告します。コードがあらゆる種類の問題にさらされる可能性がある単一の実行の時間を計るよりもはるかに正確です。

于 2010-06-28T12:08:27.563 に答える
2

CPU は常に異なるプロセス間でスケジューリングを行っているため、同じコードが実行されるたびに異なる時間がかかります。

最初の関数は、「かなりの」時間がかかる print ステートメントのため、一般的に遅くなります。

于 2010-06-28T12:08:20.073 に答える