ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript のヒープのメモリ不足の問題を解決して素数を見つけるにはどうすればよいですか?

JavaScript のヒープのメモリ不足の問題を解決して素数を見つけるにはどうすればよいですか?

王林
王林転載
2023-08-27 18:01:021259ブラウズ

JavaScript のヒープのメモリ不足の問題を解決して素数を見つけるにはどうすればよいですか?

「ヒープ不足」エラー メッセージが示すように、このエラーは、JavaScript コードが割り当てられたメモリを超えるメモリを占有する場合に発生します。 JavaScript プログラムを実行すると、コンピューターは JavaScript プログラムに特定のメモリを割り当てます。

JavaScript またはその他のプログラミング言語でコードを実行すると、コンピューターはプロセスを作成し、固定量のメモリを割り当てます。プログラムがより多くのメモリ領域を必要とする場合、ヒープ メモリ不足などのエラーがスローされます。たとえば、サイズ 1020 の配列を作成し、各配列インデックスを特定の値で初期化しようとすると、ヒープのメモリが不足してエラーがスローされます。

このチュートリアルでは、非常に大きな値のセットの素因数を見つけるときに発生する JavaScript ヒープ メモリの枯渇問題を解決する方法を学びます。

ユーザーは次の例に従って、ヒープ メモリ オーバーフロー エラーを視覚化できます。

例 (可視化エラー)

以下の例では、任意の数の素因数を返す getPrimeFactors() 関数を作成します。小さな数値 (103 に近い) を渡すと完全に機能しますが、素因数を見つけるために引数として大きな数値 (109 に近い) を渡すと、エラーが発生し、ブラウザ ウィンドウが黒くなります。

この例では、2 つのネストされたループを使用して配列を走査するため、メモリ エラーが発生し、プログラムの時間計算量は O(N2) となり、割り当てられた時間よりも高速になります。メモリ。

リーリー

上記の出力例では、ヒープ メモリ オーバーフロー エラーが確認できます。この問題を解決するには、コードの時間と空間の複雑さを最適化する必要があります。

以下では、例 1 のコードの時間計算量を最適化して、指定された数値の一意の素因数をすべて見つけます。

###文法###

ユーザーは、次の構文に従って最適化コードを記述して、特定の値の一意の素因数を見つけることができます。

リーリー

上記の構文では、for ループを使用して、m*m が値より小さくなるまで繰り返します。これは、値の平方根が m より大きくなるまで繰り返すことを意味します。

ステップ

ステップ 1

*-for ループを使用して、値の平方根が m より大きくなるまで繰り返します。ここで、m は for ループの初期化変数です。

ステップ 2

- for ループで、値が m で割り切れる場合、m が値の素因数であることを意味し、それを係数配列に格納します。

ステップ3

-この後、値をmで除算し、複数回除算できる場合はwhileループを使用してmで複数回除算します。ここでは、一意の素因数を格納する必要があるため、m の値を配列に 1 回だけ格納します。

ステップ 4

- for ループのすべての反復が完了したら、値が 2 より大きいかどうかを確認します。そうであれば、その値が最大の素因数であることを意味し、それを配列に格納します。 例 (エラーの解決)

次の例では、配列を使用して素因数を格納します。さらに、素因数を見つけるために上記のアルゴリズムを実装しました。

ユーザーは、大きな値 (1020 など) の一意の素因数を見つけて、コードがエラーなく出力できるかどうかを確認できます。

リーリー

Example

の中国語訳は次のとおりです:

Example

次の例では、一意の素因数を取得する必要があるため、配列を使用する代わりに set を使用して素因数を保存します。さらに、for-of ループを使用して、セットに格納されているすべての素因数を出力しました。

リーリー

数値の素因数を求める際のヒープ オーバーフロー エラーを解決する方法を学びました。ヒープ オーバーフローなどのエラーが発生した場合は、このチュートリアルで行ったようにコードを最適化する必要があります。

以上がJavaScript のヒープのメモリ不足の問題を解決して素数を見つけるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。