国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

ホームページ ウェブフロントエンド jsチュートリアル JavaScript における Big O 表記法と時(shí)間計(jì)算量を理解する

JavaScript における Big O 表記法と時(shí)間計(jì)算量を理解する

Jan 03, 2025 am 08:46 AM

JavaScript を使用する場(chǎng)合、関數(shù)コードを記述することは重要ですが、それが効率的に実行されることを確認(rèn)することも同様に重要です。ここで Big O Notation が登場(chǎng)します。Big O Notation は、入力のサイズが増加するにつれてコードのパフォーマンスがどのように拡張されるかを分析する方法を提供し、最適化されたスケーラブルなアプリケーションの作成に役立ちます。

この記事では、JavaScript での初心者向けの例を使用して、Big O Notation の基本と一般的な時(shí)間計(jì)算量について説明します

Understanding Big O Notation and Time Complexity in JavaScript

ビッグオー記法とは何ですか?

Big O Notation は、アルゴリズムの効率を記述する數(shù)學(xué)的表現(xiàn)です。それは次のことを理解するのに役立ちます:

  1. 時(shí)間計(jì)算量: アルゴリズムの実行時(shí)間が入力のサイズによってどのように変化するか。
  2. 空間複雑度: アルゴリズムのメモリ使用量が入力のサイズに応じてどのように変化するか。

目標(biāo)は、最悪のシナリオに焦點(diǎn)を當(dāng)てて、入力サイズの増加に伴うアルゴリズムのパフォーマンスを評(píng)価することです。


なぜ Big O 表記が重要なのでしょうか?

電話帳で名前を見(jiàn)つけるという任務(wù)を與えられているとします。

  • 1 つの方法は、名前が見(jiàn)つかるまですべてのページをめくることです (線形検索)。
  • もう 1 つは、真ん中から始めて體系的に絞り込む方法です (二分探索)。

どちらのアプローチでも問(wèn)題は解決されますが、電話帳のサイズが大きくなるにつれて効率は大きく異なります。 Big O は、これらのアプローチを比較し、最適なものを選択するのに役立ちます。


Big O 記譜法の実例

以下は Big O の一般的な複雑性であり、JavaScript での実際的な例を示して説明されています。


1. O(1) - 一定時(shí)間

入力サイズに関係なく、実行時(shí)間は変わりません。これらの操作が最も効率的です。

例: インデックスによる配列內(nèi)の要素へのアクセス。

const numbers = [10, 20, 30, 40, 50];
console.log(numbers[2]); // Always takes the same time, no matter the array size

2. O(log n) - 対數(shù)時(shí)間

入力サイズが増加すると、ランタイムは対數(shù)的に増加します。これは、二分探索などの分割統(tǒng)治アルゴリズムでよく発生します。

例: ソートされた配列の二分検索。

function binarySearch(arr, target) {
    let start = 0;
    let end = arr.length - 1;

    while (start <= end) {
        const mid = Math.floor((start + end) / 2);

        if (arr[mid] === target) {
            return mid;
        } else if (arr[mid] < target) {
            start = mid + 1; // Search the right half
        } else {
            end = mid - 1; // Search the left half
        }
    }

    return -1; // Target not found
}

const arr = [1, 3, 5, 7, 9];
console.log(binarySearch(arr, 7)); // Output: 3

3. O(n) - 線形時(shí)間

ランタイムは入力サイズに比例して増加します。これは、各要素を 1 回調(diào)べる必要がある場(chǎng)合に発生します。

: ソートされていない配列內(nèi)の項(xiàng)目を検索します。

function linearSearch(arr, target) {
    for (let i = 0; i < arr.length; i++) {
        if (arr[i] === target) {
            return i; // Found
        }
    }
    return -1; // Not found
}

const items = [10, 20, 30, 40, 50];
console.log(linearSearch(items, 30)); // Output: 2

4. O(n2) - 二次時(shí)間

入力サイズが増加するにつれて、ランタイムは二次関數(shù)的に増加します。これは、入れ子になったループを含むアルゴリズムでは一般的です。

: 基本的なバブル ソートの実裝。

const numbers = [10, 20, 30, 40, 50];
console.log(numbers[2]); // Always takes the same time, no matter the array size

5. O(2?) - 指數(shù)時(shí)間

入力が追加されるたびに実行時(shí)間は 2 倍になります。これは、考えられるすべての解決策を考慮して問(wèn)題を再帰的に解決するアルゴリズムで発生します。

: フィボナッチ數(shù)を再帰的に計(jì)算します。

function binarySearch(arr, target) {
    let start = 0;
    let end = arr.length - 1;

    while (start <= end) {
        const mid = Math.floor((start + end) / 2);

        if (arr[mid] === target) {
            return mid;
        } else if (arr[mid] < target) {
            start = mid + 1; // Search the right half
        } else {
            end = mid - 1; // Search the left half
        }
    }

    return -1; // Target not found
}

const arr = [1, 3, 5, 7, 9];
console.log(binarySearch(arr, 7)); // Output: 3

ビッグオーの視覚化

入力サイズの増加に伴う Big O の複雑さの違いを比較すると次のようになります。

Big O Name Example Use Case Growth Rate
O(1) Constant Array access Flat
O(log n) Logarithmic Binary search Slow growth
O(n) Linear Looping through an array Moderate growth
O(n2) Quadratic Nested loops Rapid growth
O(2?) Exponential Recursive brute force Very fast growth

成長(zhǎng)率の図解

問(wèn)題を解決しているときに入力サイズが増大すると想像してください。入力サイズの増加に応じて、さまざまな複雑さのアルゴリズムがどのように拡張されるかを次に示します。

Input Size O(1) O(log n) O(n) O(n2) O(2?)
1 1 ms 1 ms 1 ms 1 ms 1 ms
10 1 ms 3 ms 10 ms 100 ms ~1 sec
100 1 ms 7 ms 100 ms 10 sec ~centuries
1000 1 ms 10 ms 1 sec ~17 min Unrealistic
  • O(1) は入力に関係なく一定のままです。
  • O(log n) はゆっくりと成長(zhǎng)するため、大きな入力に最適です。
  • O(n) は入力サイズに比例して増加します。
  • O(n2) 以上は、大きな入力ではすぐに実用的ではなくなります。

コードを使用して Big O を視覚化する

シンプルなカウンターを使用して、さまざまな複雑さの操作の數(shù)を視覚化する方法を次に示します。

const numbers = [10, 20, 30, 40, 50];
console.log(numbers[2]); // Always takes the same time, no matter the array size

ビッグオーに関するよくある誤解

  1. Big O ≠ 実際のパフォーマンス: Big O は、かかった正確な時(shí)間ではなく、パフォーマンスがどのようにスケールされるかを示します。
    • たとえば、定數(shù)係數(shù)が小さい O(n) アルゴリズムは、入力サイズが小さい場(chǎng)合は O(log n) アルゴリズムよりも優(yōu)れたパフォーマンスを発揮する可能性があります。
  2. 最良のケース vs. 最悪のケース: Big O は通常、最悪のケースのシナリオを説明します。たとえば、リストにない項(xiàng)目を検索します。
  3. すべてのネストされたループが O(n2) であるわけではありません: 複雑さは、內(nèi)部ループが処理する要素の數(shù)によって異なります。

初心者向けの実踐的なヒント

  1. O(1)、O(n)、および O(n2) に注目してください: これらは、遭遇する最も一般的な複雑さです。
  2. パフォーマンスの測(cè)定: Chrome DevTools などのツールを使用して、コードのベンチマークを行います。
  3. 効率化のためのリファクタリング: コードが機(jī)能したら、より複雑な部分を特定して最適化します。
  4. 學(xué)び続ける: LeetCode や HackerRank などのプラットフォームは、Big O を理解するための優(yōu)れた演習(xí)を提供します。

結(jié)論

Big O Notation は、アルゴリズムの効率を評(píng)価し、コードがどのように拡張されるかを理解するために不可欠なツールです?;兢蚶斫猡?、一般的なパターンを分析することで、パフォーマンスの高い JavaScript アプリケーションを作成できるようになります。

コーディングを楽しんでください! ?

以上がJavaScript における Big O 表記法と時(shí)間計(jì)算量を理解するの詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國(guó)語(yǔ) Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負(fù)いません。盜作または侵害の疑いのあるコンテンツを見(jiàn)つけた場(chǎng)合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無(wú)料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無(wú)料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡(jiǎn)単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無(wú)料のコードエディター

SublimeText3 中國(guó)語(yǔ)版

SublimeText3 中國(guó)語(yǔ)版

中國(guó)語(yǔ)版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強(qiáng)力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Java vs. JavaScript:混亂を解消します Java vs. JavaScript:混亂を解消します Jun 20, 2025 am 12:27 AM

JavaとJavaScriptは異なるプログラミング言語(yǔ)であり、それぞれ異なるアプリケーションシナリオに適しています。 Javaは大規(guī)模なエンタープライズおよびモバイルアプリケーション開発に使用されますが、JavaScriptは主にWebページ開発に使用されます。

JavaScriptコメント:短い説明 JavaScriptコメント:短い説明 Jun 19, 2025 am 12:40 AM

JavaScriptcommentsEareEssentialential-formaining、およびGuidingCodeexecution.1)single-linecommentseared forquickexplanations.2)多LinecommentsexplaincomplexlogiCorprovidededocumentation.3)clarifyspartsofcode.bestpractic

JSで日付と時(shí)間を操作する方法は? JSで日付と時(shí)間を操作する方法は? Jul 01, 2025 am 01:27 AM

JavaScriptで日付と時(shí)間を処理する場(chǎng)合は、次の點(diǎn)に注意する必要があります。1。日付オブジェクトを作成するには多くの方法があります。 ISO形式の文字列を使用して、互換性を確保することをお?jiǎng)幛幛筏蓼埂?2。時(shí)間情報(bào)を取得および設(shè)定して、メソッドを設(shè)定でき、月は0から始まることに注意してください。 3.手動(dòng)でのフォーマット日付には文字列が必要であり、サードパーティライブラリも使用できます。 4.ルクソンなどのタイムゾーンをサポートするライブラリを使用することをお?jiǎng)幛幛筏蓼?。これらの重要なポイントを?xí)得すると、一般的な間違いを効果的に回避できます。

なぜの下部にタグを配置する必要があるのですか? なぜの下部にタグを配置する必要があるのですか? Jul 02, 2025 am 01:22 AM

PLACSTHETTHETTHE BOTTOMOFABLOGPOSTORWEBPAGESERVESPAGESPORCICALPURPOSESESFORSEO、userexperience、andDesign.1.IthelpswithiobyAllowingseNStoAccessKeysword-relevanttagwithtagwithtagwithtagwithemaincontent.2.iTimrovesexperiencebyepingepintepepinedeeping

JavaScript vs. Java:開発者向けの包括的な比較 JavaScript vs. Java:開発者向けの包括的な比較 Jun 20, 2025 am 12:21 AM

javascriptispreferredforwebdevelopment、whilejavaisbetterforlge-scalebackendsystemsandroidapps.1)javascriptexcelsininintingtivewebexperiences withitsdynAmicnature anddommanipulation.2)javaofferstruntypyping-dobject-reientedpeatures

JavaScript:効率的なコーディングのためのデータ型の調(diào)査 JavaScript:効率的なコーディングのためのデータ型の調(diào)査 Jun 20, 2025 am 12:46 AM

javascripthassevenfundamentaldatypes:number、string、boolean、undefined、null、object、andsymbol.1)numberseadouble-precisionformat、有用であるため、有用性の高いものであるため、but-for-loating-pointarithmetic.2)ストリングリムムット、使用率が有用であること

DOMでのイベントの泡立ちとキャプチャとは何ですか? DOMでのイベントの泡立ちとキャプチャとは何ですか? Jul 02, 2025 am 01:19 AM

イベントキャプチャとバブルは、DOMのイベント伝播の2つの段階です。キャプチャは最上層からターゲット要素までであり、バブルはターゲット要素から上層までです。 1.イベントキャプチャは、AddEventListenerのUseCaptureパラメーターをTrueに設(shè)定することにより実裝されます。 2。イベントバブルはデフォルトの動(dòng)作であり、UseCaptureはfalseに設(shè)定されているか、省略されます。 3。イベントの伝播を使用して、イベントの伝播を防ぐことができます。 4.イベントバブルは、動(dòng)的なコンテンツ処理効率を改善するためにイベント委任をサポートします。 5.キャプチャを使用して、ロギングやエラー処理など、事前にイベントを傍受できます。これらの2つのフェーズを理解することは、タイミングとJavaScriptがユーザー操作にどのように反応するかを正確に制御するのに役立ちます。

JavaとJavaScriptの違いは何ですか? JavaとJavaScriptの違いは何ですか? Jun 17, 2025 am 09:17 AM

JavaとJavaScriptは、異なるプログラミング言語(yǔ)です。 1.Javaは、エンタープライズアプリケーションや大規(guī)模なシステムに適した、靜的に型付けされ、コンパイルされた言語(yǔ)です。 2。JavaScriptは動(dòng)的なタイプと解釈された言語(yǔ)であり、主にWebインタラクションとフロントエンド開発に使用されます。

See all articles