アルゴリズムを理解するパート 2 - シーケンス テーブル

アルゴリズムを理解するパート 2 - シーケンス テーブル

[[407946]]

この記事はWeChatの公開アカウント「Front-end Gravitation」から転載したもので、著者はYichuanです。この記事を転載する場合は、Frontend Gravity の公開アカウントにご連絡ください。

序文

開発において、配列はよく扱うデータ型ですが、その内部の格納構造はどうなっているのでしょうか?詳しく紹介します。

リニアテーブル

線形リストは、最も基本的かつ最も単純で、最も一般的に使用されるデータ構造です。線形リストは、同じ特性を持つ n 個のデータ要素の順序付けられたシーケンスです。

先行要素: 要素 A が要素 B の前に来る場合、A は B の先行要素と呼ばれます。

後続要素: 要素 B が要素 A の後にある場合、B は A の後続要素と呼ばれます。

線形テーブルの分類: 線形テーブル内のデータ保存方法は、シーケンシャル保存とリンク保存に分けられます。

  • シーケンシャル ストレージは、連続したアドレスを持つ一連のストレージ ユニットを使用して、線形リストのデータ要素を順番に格納します。
  • チェーンストレージとは、不連続なアドレスを持つストレージユニットにデータを保存し、ノードを使用してアドレスを接続して照会することです。

ランダム アクセス: 線形リストは連続したメモリ位置に格納されるため、インデックスを通じてメモリ アドレスを計算し、データにランダムにアクセスできます。

シーケンステーブル

シーケンシャルリストの格納方法は、実際にはメモリ内の空き位置を見つけてそこを占有し、その空き位置にデータ要素を 1 つずつ格納するというものです。

配列の構造に少し似ているように聞こえますか? はい、データは線形テーブル構造です。したがって、配列を使用して連続リストを表すことができます。線形リスト内の論理的に隣接するデータ要素は、隣接する物理ストレージ ユニットに格納されます。つまり、データ要素間の論理的な隣接関係は、データ要素の物理ストレージの隣接関係によって反映されます。

配列の長さは線形リストのストレージ スペースの長さであり、この量は通常、ストレージの割り当て後も変更されません。線形リストの長さは、線形リスト内のデータ要素の数です。この量は、線形リスト内で挿入および削除操作が実行されるたびに変化します。覚えておいてください、線形リストの長さは常に配列の長さ以下である必要があります。

  1. クラスSequenceList{
  2.   
  3. コンストラクタ(){
  4. // 要素を格納する配列
  5. this.elemList = [];
  6. // 現在のシーケンスリスト内の要素数
  7. this.elemLength = 0;
  8. }
  9. // 線形テーブルを空のテーブルに設定する
  10. クリア(){
  11. this.elemLength = 0;
  12. }
  13. // 現在の線形テーブルが空のテーブルかどうかを判定します
  14. 空です(){
  15. this.elemLength === 0を返します
  16. }
  17. // 現在の線形テーブルの長さを取得します
  18. 長さ(){
  19. this.elemLengthを返します
  20. }
  21. // 線形リストに要素を追加する
  22. 挿入(要素){
  23. this.elemList[this.elemLength++] = elem;
  24. }
  25.  
  26. // i番目の要素に要素 elem を挿入する
  27. 挿入インデックス(i,要素){
  28. // まず、インデックス位置 i の要素とそれ以降の要素を 1 つずつ後方に移動します
  29. for (let index = this.elemLength - 1; index > i; index --) {  
  30. this.elemList[インデックス] = this.elemList[インデックス-1];
  31. }
  32. // インデックス位置 i の elem 要素を格納します
  33. this.elemList[i] = elem;
  34. }
  35.  
  36. // 指定された位置iの要素を削除した後、要素を返す
  37. 削除(i){
  38. //インデックス i の値を記録する
  39. 現在のものを this.elemList[i] とします。
  40. // インデックス i の後の要素を 1 つずつ前方に移動します
  41. for (let index = i; index < this.elemList - 1; index ++) {
  42. this.elemList[インデックス] = this.elemList[インデックス+1];
  43. }
  44. // 要素数 - 1
  45. this.elemLength --;  
  46. 戻る 現在;
  47. }
  48.  
  49. // シーケンスリスト内の elem 要素の最初の位置を検索します
  50. インデックスOf(要素){
  51. ( i = 0 とします; i< this.elemLength; i++){
  52. if (this.elemList[i] === elem) {
  53. iを返します
  54. }
  55. -1 を返します
  56. }
  57. }
  58. }

配列の利点と欠点

アドバンテージ:

  • メモリスペースの高利用率
  • 要素のインデックスによるアクセス、要素のクエリの効率が高い

欠点:

  • 要素の挿入と削除は非効率的です。 (配列の途中で要素を挿入または削除する場合は、要素を操作して順序を変更する前に、テーブル全体を移動する必要があります)
  • スペースの長さには制限があり、線形テーブルの長さを拡張することはできません。 (アクセス要素の長さがシーケンス リスト内の要素数より大きい場合、「オーバーフロー」が発生します。要素の長さが事前に割り当てられたスペースより小さい場合、スペースが大幅に無駄になります)

まとめ

この記事は、「アルゴリズムを理解する」シリーズの第 2 回目です。主に線形リストの 1 つ目のタイプのシーケンシャル ストレージについて説明し、シーケンシャル ストレージの実装方法を紹介します。

<<:  AI はどのようにしてソフトウェアおよびハードウェア製品のイノベーションを実現するのでしょうか? Baidu Brain オープンデー 西安駅の暗号解読

>>:  2021年なのに、出会い系アプリのアルゴリズムはなぜこんなにも悪いのでしょうか?

ブログ    
ブログ    
ブログ    

推薦する

AIが本当に成功する方法

[[412385]]人工知能は現在、特に自動運転車でより広く深く活用されています。人工知能を使用して...

科学者はロボットに人間に近い触覚を与える人工指先を開発

ロボットは車を持ち上げたり、手術を手伝ったりするようにプログラムできますが、卵など、これまで扱ったこ...

...

アルゴリズムの大きな進歩! AIニューラルネットワークは量子システムをシミュレートする

[[269803]]最近、研究者たちはニューラルネットワークに基づく新しいアルゴリズムを使用して量子...

2024年に人工知能はどこへ向かうのでしょうか?

2023年はテクノロジー分野にとって波乱に富んだ年であり、言語学習モデルが爆発的に増加し、人工知能...

第19回全国大会報告書に人工知能が盛り込まれました!私の国のAIの4つの大きな利点と唯一の欠点

[[206874]]昨日、中国共産党第19回全国代表大会が開幕した。 AIの重要なポイントを強調して...

5G + AI はカスタマー サービス業界にどのような大きな影響を与えるでしょうか?

最近、工業情報化部は通信事業者4社に5G商用ライセンスを発行し、5G商用時代の到来を告げた。 AIと...

iPhoneXの顔認識はどのようなデータセキュリティの考え方を誘発するのでしょうか?

[[204618]]今年のAppleカンファレンスでは、iPhone Xの「フロントバン」が観客の...

ChatGPT は来週 6 つの主要なアップデートを予定しています。

公式発表では来週6つのメジャーアップデートが予定されているとのこと。早速見ていきましょう。写真1. ...

ビッグニュース! Googleが突然発表!百度と滴滴出行は混同されている

21 金融ニュースは、日刊金融ニュース (ncjs111)、網易科技、創業報 (ichuangye...

マイクロソフトCEOナデラ氏:私は4つの大きな変革を経験してきたが、AIは5番目だ

マイクロソフトのサティア・ナデラCEOは10月23日、メディアのインタビューで、同社はこれまで4つの...

異常検出のためのいくつかのグラフ分割アルゴリズム

セキュリティ分野では、アカウント取引の異常や異なるイベント間の相関関係など、さまざまなシナリオで「グ...

将来スマートフォンは消滅するのでしょうか? Huaweiがそれに代わるスマートフォンを発売します!

スマートフォンの登場と普及は人々の生活に大きな楽しさと便利さをもたらしました。携帯電話がもっとスマー...