Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
Yuto Takei
PDF, PPTX
1,866 views
[Basic 3] 計算量 / 配列, 連結リスト / ハッシュ テーブル / スタック, キュー
早稲田大学 高度データ関連人材育成コンソーシアム D-DATa ブロックチェーン エンジニアリング 基礎編 第3回 2018/2/18
Education
◦
Read more
1
Save
Share
Embed
Embed presentation
Download
Download as PDF, PPTX
1
/ 39
2
/ 39
3
/ 39
4
/ 39
5
/ 39
6
/ 39
7
/ 39
8
/ 39
9
/ 39
10
/ 39
11
/ 39
12
/ 39
13
/ 39
14
/ 39
15
/ 39
16
/ 39
17
/ 39
18
/ 39
19
/ 39
20
/ 39
21
/ 39
22
/ 39
23
/ 39
24
/ 39
25
/ 39
26
/ 39
27
/ 39
28
/ 39
29
/ 39
30
/ 39
31
/ 39
32
/ 39
33
/ 39
34
/ 39
35
/ 39
36
/ 39
37
/ 39
38
/ 39
39
/ 39
More Related Content
PDF
リクルートライフスタイル流!分析基盤との賢い付き合い方
by
Recruit Lifestyle Co., Ltd.
PPTX
Apache Avro vs Protocol Buffers
by
Seiya Mizuno
PPTX
20170902 power bi 勉強会 takiz
by
yuuki takizawa
PDF
セグメント?クラスタリング? ユーザーを分類し、サービスの改善に活かすポイント
by
Naoto Tamiya
PDF
Pythonによる黒魔術入門
by
大樹 小倉
PDF
(修正)機械学習デザインパターン(ML Design Patterns)の解説
by
Hironori Washizaki
PPTX
データモデリング・テクニック
by
Hidekatsu Izuno
PDF
ゼロから始める転移学習
by
Yahoo!デベロッパーネットワーク
リクルートライフスタイル流!分析基盤との賢い付き合い方
by
Recruit Lifestyle Co., Ltd.
Apache Avro vs Protocol Buffers
by
Seiya Mizuno
20170902 power bi 勉強会 takiz
by
yuuki takizawa
セグメント?クラスタリング? ユーザーを分類し、サービスの改善に活かすポイント
by
Naoto Tamiya
Pythonによる黒魔術入門
by
大樹 小倉
(修正)機械学習デザインパターン(ML Design Patterns)の解説
by
Hironori Washizaki
データモデリング・テクニック
by
Hidekatsu Izuno
ゼロから始める転移学習
by
Yahoo!デベロッパーネットワーク
What's hot
PDF
CV分野におけるサーベイ方法
by
Hirokatsu Kataoka
PDF
Python 3.9からの新定番zoneinfoを使いこなそう
by
Ryuji Tsutsui
PPTX
ゲームエンジニアのためのデータベース設計
by
sairoutine
PPTX
XAI (説明可能なAI) の必要性
by
西岡 賢一郎
PDF
計算量
by
Ken Ogura
PPTX
心理的安全性と、Veinの紹介 Psychological safety and introduction of Vein
by
Tokoroten Nakayama
PPTX
backbone としての timm 入門
by
Takuji Tahara
PDF
JDLA主催「CVPR2023技術報告会」発表資料
by
Morpho, Inc.
PDF
研究室リテラシー教育スライド
by
Nobutaka Shimada
PPTX
ベイズ最適化によるハイパラーパラメータ探索
by
西岡 賢一郎
PPTX
フィーチャモデルの描き方
by
H Iseri
PDF
Surveyから始まる研究者への道 - Stand on the shoulders of giants -
by
諒介 荒木
PPTX
え?まだフルスクラッチで開発してるの!?Power Platform をフル活用すると普通にシステムができるんですよ
by
Yugo Shimizu
PPTX
上司が信用できない会社の内部統制~第32回WebSig会議「便利さと、怖さと、心強さと〜戦う会社のための社内セキュリティ 2013年のスタンダードとは?!...
by
WebSig24/7
PDF
推薦アルゴリズムの今までとこれから
by
cyberagent
PDF
心理的安全性を 0から80ぐらいに上げた話
by
Yusuke Hisatsu
KEY
『繋がり』を見る: Cytoscapeと周辺ツールを使ったグラフデータ可視化入門
by
Keiichiro Ono
PDF
SIX ABEJA 講演資料 もうブラックボックスとは呼ばせない~機械学習を支援する情報
by
Takayuki Itoh
PDF
目grep入門 +解説
by
murachue
PDF
楽しい研究のために今からできること 〜新しく研究を始める皆さんへ〜
by
諒介 荒木
CV分野におけるサーベイ方法
by
Hirokatsu Kataoka
Python 3.9からの新定番zoneinfoを使いこなそう
by
Ryuji Tsutsui
ゲームエンジニアのためのデータベース設計
by
sairoutine
XAI (説明可能なAI) の必要性
by
西岡 賢一郎
計算量
by
Ken Ogura
心理的安全性と、Veinの紹介 Psychological safety and introduction of Vein
by
Tokoroten Nakayama
backbone としての timm 入門
by
Takuji Tahara
JDLA主催「CVPR2023技術報告会」発表資料
by
Morpho, Inc.
研究室リテラシー教育スライド
by
Nobutaka Shimada
ベイズ最適化によるハイパラーパラメータ探索
by
西岡 賢一郎
フィーチャモデルの描き方
by
H Iseri
Surveyから始まる研究者への道 - Stand on the shoulders of giants -
by
諒介 荒木
え?まだフルスクラッチで開発してるの!?Power Platform をフル活用すると普通にシステムができるんですよ
by
Yugo Shimizu
上司が信用できない会社の内部統制~第32回WebSig会議「便利さと、怖さと、心強さと〜戦う会社のための社内セキュリティ 2013年のスタンダードとは?!...
by
WebSig24/7
推薦アルゴリズムの今までとこれから
by
cyberagent
心理的安全性を 0から80ぐらいに上げた話
by
Yusuke Hisatsu
『繋がり』を見る: Cytoscapeと周辺ツールを使ったグラフデータ可視化入門
by
Keiichiro Ono
SIX ABEJA 講演資料 もうブラックボックスとは呼ばせない~機械学習を支援する情報
by
Takayuki Itoh
目grep入門 +解説
by
murachue
楽しい研究のために今からできること 〜新しく研究を始める皆さんへ〜
by
諒介 荒木
Similar to [Basic 3] 計算量 / 配列, 連結リスト / ハッシュ テーブル / スタック, キュー
PDF
[Basic 1] ブロックチェーンと計算機科学 / ブール代数 / 情報理論
by
Yuto Takei
PDF
[Basic 2] 計算機の構成 / プログラム実行の仕組み
by
Yuto Takei
PPTX
Cryptocurrency1
by
TomokiUmino
PDF
[Basic 4] 整列アルゴリズム / 木 / 探索アルゴリズム
by
Yuto Takei
PDF
[アルゴリズムイントロダクション勉強会] ハッシュ
by
Rei Takami
PPTX
Blockchainを支える技術
by
Takumi Seike
PPTX
ブロックチェーン書き換え不可能な記録によって社会はどう変化するか?
by
Yoshiharu Ikutani
PDF
ブロックチェーン系プロジェクトで着目される暗号技術
by
MITSUNARI Shigeo
PDF
ブロックチェーン連続講義 第4回 暗号技術のリテラシー
by
Kenji Saito
PDF
【暗号通貨輪読会#14】confidential transaction
by
shigeyuki azuchi
PPT
アルゴリズムとデータ構造9
by
Kenta Hattori
PDF
[Basic 15] ソフトウェアと知的財産権 / ブロックチェーンと計算機科学 / MinChain の紹介
by
Yuto Takei
PDF
Data-Intensive Text Processing with MapReduce ch4
by
Sho Shimauchi
PDF
neo4jを使ったブロックチェーンデータの解析
by
shigeyuki azuchi
PDF
ブロックチェーン技術概論1 輪読
by
Hiroki Takemura
PDF
ブロックチェーン連続講義 第6回 ブロックチェーン 2.0
by
Kenji Saito
PDF
Gt technology(j)-201305
by
GuardtimeJ
PDF
BMXUG女子部 ブロックチェーン
by
K Kimura
PDF
Bitcoinを技術的に理解する
by
Kenji Urushima
PPT
既存 IBM Notes アプリにブロックチェーンを適用するよ! (きっと)動くよ!!
by
K Kimura
[Basic 1] ブロックチェーンと計算機科学 / ブール代数 / 情報理論
by
Yuto Takei
[Basic 2] 計算機の構成 / プログラム実行の仕組み
by
Yuto Takei
Cryptocurrency1
by
TomokiUmino
[Basic 4] 整列アルゴリズム / 木 / 探索アルゴリズム
by
Yuto Takei
[アルゴリズムイントロダクション勉強会] ハッシュ
by
Rei Takami
Blockchainを支える技術
by
Takumi Seike
ブロックチェーン書き換え不可能な記録によって社会はどう変化するか?
by
Yoshiharu Ikutani
ブロックチェーン系プロジェクトで着目される暗号技術
by
MITSUNARI Shigeo
ブロックチェーン連続講義 第4回 暗号技術のリテラシー
by
Kenji Saito
【暗号通貨輪読会#14】confidential transaction
by
shigeyuki azuchi
アルゴリズムとデータ構造9
by
Kenta Hattori
[Basic 15] ソフトウェアと知的財産権 / ブロックチェーンと計算機科学 / MinChain の紹介
by
Yuto Takei
Data-Intensive Text Processing with MapReduce ch4
by
Sho Shimauchi
neo4jを使ったブロックチェーンデータの解析
by
shigeyuki azuchi
ブロックチェーン技術概論1 輪読
by
Hiroki Takemura
ブロックチェーン連続講義 第6回 ブロックチェーン 2.0
by
Kenji Saito
Gt technology(j)-201305
by
GuardtimeJ
BMXUG女子部 ブロックチェーン
by
K Kimura
Bitcoinを技術的に理解する
by
Kenji Urushima
既存 IBM Notes アプリにブロックチェーンを適用するよ! (きっと)動くよ!!
by
K Kimura
More from Yuto Takei
PDF
51% 攻撃の原理とシミュレーション
by
Yuto Takei
PDF
これから始めるAzure Kubernetes Service入門
by
Yuto Takei
PDF
ブロックチェーンと仮想通貨 -- 新しいビジネスに挑戦
by
Yuto Takei
PDF
開発チームにおける多様性のススメ
by
Yuto Takei
PDF
ブロックチェーン神話に迫る - 本当に使える? 使えない?
by
Yuto Takei
PDF
ブロックチェーン技術者が夢見る未来
by
Yuto Takei
PDF
ブロックチェーン技術の課題と社会応用
by
Yuto Takei
PDF
Windows コンテナを AKS に追加する
by
Yuto Takei
PDF
ブロックチェーンの不動産登記への応用に関する検討
by
Yuto Takei
PDF
51% 攻撃の原理とシミュレーション
by
Yuto Takei
PDF
[Intermediate 04] ブロックチェーンの動作原理
by
Yuto Takei
PDF
[Intermediate 03] MinChain - 教育用ブロックチェーンの紹介
by
Yuto Takei
PDF
[Intermediate 02] シェルの使い方 / Git, GitHub について
by
Yuto Takei
PDF
[Intermediate 01] イントロダクション / Bitcoin を動作させる
by
Yuto Takei
PDF
[Basic 14] 暗号について / RSA 暗号 / 楕円曲線暗号
by
Yuto Takei
PDF
[Basic 13] 型推論 / 最適化とコード出力
by
Yuto Takei
PDF
[Basic 12] 関数型言語 / 型理論
by
Yuto Takei
PDF
[Basic 11] 文脈自由文法 / 構文解析 / 言語解析プログラミング
by
Yuto Takei
PDF
[Basic 10] 形式言語 / 字句解析
by
Yuto Takei
PDF
[Basic 9] 並列処理 / 排他制御
by
Yuto Takei
51% 攻撃の原理とシミュレーション
by
Yuto Takei
これから始めるAzure Kubernetes Service入門
by
Yuto Takei
ブロックチェーンと仮想通貨 -- 新しいビジネスに挑戦
by
Yuto Takei
開発チームにおける多様性のススメ
by
Yuto Takei
ブロックチェーン神話に迫る - 本当に使える? 使えない?
by
Yuto Takei
ブロックチェーン技術者が夢見る未来
by
Yuto Takei
ブロックチェーン技術の課題と社会応用
by
Yuto Takei
Windows コンテナを AKS に追加する
by
Yuto Takei
ブロックチェーンの不動産登記への応用に関する検討
by
Yuto Takei
51% 攻撃の原理とシミュレーション
by
Yuto Takei
[Intermediate 04] ブロックチェーンの動作原理
by
Yuto Takei
[Intermediate 03] MinChain - 教育用ブロックチェーンの紹介
by
Yuto Takei
[Intermediate 02] シェルの使い方 / Git, GitHub について
by
Yuto Takei
[Intermediate 01] イントロダクション / Bitcoin を動作させる
by
Yuto Takei
[Basic 14] 暗号について / RSA 暗号 / 楕円曲線暗号
by
Yuto Takei
[Basic 13] 型推論 / 最適化とコード出力
by
Yuto Takei
[Basic 12] 関数型言語 / 型理論
by
Yuto Takei
[Basic 11] 文脈自由文法 / 構文解析 / 言語解析プログラミング
by
Yuto Takei
[Basic 10] 形式言語 / 字句解析
by
Yuto Takei
[Basic 9] 並列処理 / 排他制御
by
Yuto Takei
[Basic 3] 計算量 / 配列, 連結リスト / ハッシュ テーブル / スタック, キュー
1.
ブロックチェーン講座基礎編 第3回 2018/2/18 前回からの質問 ●
クロック逓倍器はどうやっている? ○ 電圧制御発振器 (VCO) トランジスタ技術 2004年5月号 バックナンバー http://toragi.cqpub.co.jp/Portals/0/backnumber/2004/05/p098-099.pdf ● ASIC が作りにくいハッシュ関数とはどういうこと? ○ SHA256 のような単純計算であれば演算装置だけですむが、メモリを大幅に必要とするロジックで あれば、純粋に ASIC 化のコストに見合わなくなる。単にコンピュータを使ったほうが安くなる ● ハッシュ関数にはほかにどういうのがある? ○ SHA256 (SHA2 系)、SHA3 (Keccak)、scrypt など ● scrypt を使っているコインは? ○ Litecoin, Dodgecoin など 1
2.
ブロックチェーン講座基礎編 第3回 2018/2/18 前回からの質問 ●
GPU と CPU の違いは? ○ GPU (Graphics Processing Unit) は SIMD (Single Instruction Multiple Data) と言って、一つの命 令で複数のデータを演算するような命令がある。これはグラフィック処理で頻繁に使われるベクトル 演算を効果的に行うため。シェーダ言語などを使って操作する ● マイニングが GPU などで行われいた経緯は? ○ もともと、CPU でマイニングするのが最初だったが、 SHA256 のようなハッシュ関数はひたすら同 一の演算を繰り返すだけなので GPU 化が容易。しかし、さらに高速化するため FPGA で組み、そ こから回路量産できるほどのコスト投資できる企業が ASIC 化していった 2
3.
ブロックチェーン講座基礎編 第3回 2018/2/18 第3回 アルゴリズムとデータ構造 1.
イントロダクション / 計算量 2. 配列, 連結リスト (Linked List) 3. ハッシュ テーブル 4. スタック, キュー 今回の内容の参考書 : データ構造とアルゴリズム / 五十嵐 健夫 (著) ISBN: 978-4901683494 画像は https://www.amazon.co.jp/dp/4901683497 より引用 その他、以下の学習アプリも非常におすすめ https://itunes.apple.com/jp/app/アルゴリズム図鑑/id1047532631 3
4.
ブロックチェーン講座基礎編 第3回 2018/2/18 3-1イントロダクション
/ 計算量 4
5.
ブロックチェーン講座基礎編 第3回 2018/2/18 データ構造とは 一言でいえば ●
データを、計算や保存を目的として、どのように格納するか定めたルール 定義 ● データを、読み出しや書き込みする際の操作や格納の一定の規則 例 ● 配列、連結リスト (このあと 3-2 で登場) 5
6.
ブロックチェーン講座基礎編 第3回 2018/2/18 アルゴリズムとは 一言でいえば ●
物事を処理するための決まった手順のこと 定義 ● ある値を入力としてとり、ある値を出力するような、明確に定義された計算手順のこ と 6
7.
ブロックチェーン講座基礎編 第3回 2018/2/18 アルゴリズムの例 1.
整列アルゴリズム ● 入力 ○ N 個の数列 <a1 , a2 , …, an > ● 出力 ○ a’1 ≤ a’2 ≤ … ≤ a’n を満たすように並び替えられた N 個の数列 <a’1 , a’2 , …, a’n > 2. 検索アルゴリズム ● 入力 ○ 互いに異なる N 個の数列 <a1 , a2 , …, an > と、1 つの数 x ● 出力 ○ x が数列の i 番目に見つかった (ai = x) 場合は i ○ 見つからなかった場合は “No” 7
8.
ブロックチェーン講座基礎編 第3回 2018/2/18 計算量 アルゴリズムを評価するときには、次のような方法で評価する ●
時間計算量 (Computational complexity) アルゴリズムの実行にあたって、どれだけの時間が必要となるかを示す。一般的に アルゴリズムの質を測るのにもっとも重要な尺度 ● 空間計算量 (Space complexity) アルゴリズム実行中に、どれだけの記憶領域を必要とするかを示す ● その他 ○ 通信複雑性 (Communication complexity) ○ 回路計算量 (Circuit complexity) 8
9.
ブロックチェーン講座基礎編 第3回 2018/2/18 計算量を評価する上での計算機のモデル アルゴリズムを評価する上で、通常は以下のような計算機をモデルとして考える ●
メモリ : 無限の大きさをもち、遅延なく読み書きできる ● CPU : 以下のような単純な命令セットを持つ ○ 最低限の ALU ○ 制御構造 (比較、条件分岐など ) ○ メモリの読み書き (形式言語理論の回で、チューリング機械などを触れる際にまた戻ってきます) 9
10.
ブロックチェーン講座基礎編 第3回 2018/2/18 時間計算量 計算機がアルゴリズムを実行するのにかかる時間。実行する命令の数とかんがえられ る 例
(数列の合計アルゴリズム) ● 入力: n 個の整数の数列 ● 出力: 入力の数列すべてを加算したもの ● 実装: (右のフローチャートを参照) ○ 合計値を格納する変数 sum を 0 で初期化する ○ 数列の値をひとつずつ取得し、 sum に加算 ○ sum を出力 合計で (3n + 4) 個の命令を実行することになる sum = 0 sum += i 番目の数 i < n i = 0 i++ sum を出力 10
11.
ブロックチェーン講座基礎編 第3回 2018/2/18 ランダウの漸近記法 アルゴリズムの計算量を表示するためには、ランダウの漸近記法を用いる ●
Θ 表記 … 上下から抑える ● Ω 表記 … 下から抑える ● Ο 表記 … 上から抑える 通常、Ο 表記 (aka. ビッグ オー ノーテーション) をよく用いる 11
12.
ブロックチェーン講座基礎編 第3回 2018/2/18 Ο
表記 Ο 表記は、それが表示する関数によって上から抑えることができる、ということを示すの に用いる。オーダーともいう 次の性質がある ● 定数倍 ● 和 ● 積 例 (数列の合計アルゴリズム, 続き) 合計で (3n + 4) 個の命令で抑えられるということは O(n) クラス 12
13.
ブロックチェーン講座基礎編 第3回 2018/2/18 さまざまな計算量 オーダー
名称 例 O(1) 定数時間 (constant) ハッシュ テーブル O(log n) 対数時間 (logarithmic) 二分探索 O(n) 線形時間 (linear) 配列の走査 O(n log n) 準線形時間 (quasilinear) 整列 O(n2 ) 二乗時間 (quadratic) 遅い整列 O(n3 ) 以上 多項式時間 (polynomial) 行列演算など O(2n ) 指数時間 NP クラスの問題 O(n!) 階乗時間 13
14.
ブロックチェーン講座基礎編 第3回 2018/2/18 3-2配列,
連結リスト 14
15.
ブロックチェーン講座基礎編 第3回 2018/2/18 ポインタの導入 メモリ上の番地をあらわす値、およびそのデータ型。ポインタが示す番地をたどって値を 取得できる。便宜上、0
はどこも指さないポインタとみなす たとえば右のようなメモリを想定すると ● 整数ポインタ (int*) として 0x10 番地をみれば 0x12 番地 (整数) を示しているので 72 ● 文字ポインタ (char*) として 0x14 番地をみれば 0x11 番地 (文字) を示しているので 'Q' ● 文字ポインタのポインタ (char**) として 0x15 番地をみれば 0x10 番地 (文字ポインタ) が 0x12 番地 (文字) を示しているので 'Q' 番地 値 0x10 0x12 0x11 0x51 0x12 0x48 0x13 0x95 0x14 0x11 0x15 0x10 15
16.
ブロックチェーン講座基礎編 第3回 2018/2/18 配列
(Array) 連続した一連のデータ構造。計算機科学的には通常、最初の要素を 0 番目として数え る 以下の操作が定義される ● i 番目の値を取得する ● i 番目に値を追加する ● i 番目の値を削除する ● i 番目の値を更新する 2 3 5 7 11 長さ 5 の整数配列 (例) 0 1 2 3 4 0x02 0x03 0x05 0x07 0x0B メモリ上のデータ 0x0100 0x0101 0x0102 0x0103 0x0104 16
17.
ブロックチェーン講座基礎編 第3回 2018/2/18 配列
(例) 2 3 5 7 11 長さ 5 の配列 a 0 1 2 3 4値を変更 (a[4] = 10) 値を参照 (x = a[1]) 配列の先頭番地がわかれば、 n 番 目の番地もすぐにわかる。定数時間 で取得できる。O(1) 値の参照 (上記) と同じ。O(1) 値を削除 (a.RemoveAt(0)) 値を追加 (a.InsertAt(4, 100)) 1 番目以降をひとつずつ前にずら す。すなわち、i+1 番目の値を読み、 i 番目に書き込む。配列の長さが n なら、最悪、n-1 回分の読み書き。 O(n) 1 番目以降をひとつずつ後にずら す。すなわち、i 番目の値を読み、 i+1 番目に書き込む。配列の長さが n なら、最悪 n 回分の読み書き。 O(n) 17
18.
ブロックチェーン講座基礎編 第3回 2018/2/18 連結リスト
(Linked List) ひとつの値と、次の値へのポインタとを持ったデータ構造。連結していった値を順番に読 んでリストとみなす 以下の操作が定義される ● i 番目の値を取得する ● i 番目に値を追加する ● i 番目の値を削除する ● i 番目の値を更新する 12 1 56 長さ 3 の連結リスト (例) 0x00 0x0C 0x16 0x07 0x38 メモリ上のデータ 0x11 番地に連結リストが入っている 0x10 0x11 0x12 0x13 0x14 0x00 0x01 0x14 0x15 0x16 0x17 18
19.
ブロックチェーン講座基礎編 第3回 2018/2/18 連結リスト
(例) 12 1 56 長さ 3 の連結リスト (例) 値を参照, 変更 (int x = b[2]) 連結リストの先頭から i 番目の要素まで、ポ インタをたどらなければいけない。 i 回分の ポインタ参照。O(n)47 値を追加, 削除 (b.Insert(1, 47)) 追加する位置、削除する位置があらかじめわかって いれば、前後のポインタを操作するだけですむ O(1) 19
20.
ブロックチェーン講座基礎編 第3回 2018/2/18 配列および連結リストの走査 配列でも連結リストでも、全要素を走査する
(値の検索、合計など) ときには、長さが n としたら O(n) の時間がかかってしまう int sum = 0; int[] a = new int[] { 1, 2, 3 }; for (int i = 0; i < a.Length; i++) { sum += a[0]; } 20
21.
ブロックチェーン講座基礎編 第3回 2018/2/18 配列と連結リストとの時間計算量まとめ 操作
配列 連結リスト 要素の追加・挿入 O(n) O(1) 要素の参照 O(1) O(n) 要素の編集 O(1) O(n) 要素の削除 O(n) O(1) 全走査 O(n) O(n) * 要素数を n とする 21
22.
ブロックチェーン講座基礎編 第3回 2018/2/18 3-3ハッシュ
テーブル 22
23.
ブロックチェーン講座基礎編 第3回 2018/2/18 ハッシュ
テーブル あるキーに紐づけて値を保存するデータ構造 (aka. 辞書、マップ)。ハッシュ関数を使う 以下の操作が定義される ● キー x に対して値 y を保存・更新する ● キー x の紐付けられた値を参照する りんご キャベツ 牛乳 0x02 0x04 0x01 ハ ッ シ ュ 関 数 200 円 150 円 350 円 0 1 2 3 4 値の配列ハッシュ テーブル (例) 5 23
24.
ブロックチェーン講座基礎編 第3回 2018/2/18 ハッシュ関数 ハッシュ関数は、与えられた値から別の値に変換する関数である あらかじめ入力される値がすべてわかっている場合には、各入力値に対して異なる値を 返す
(単射) ことができる。この場合のハッシュ関数を完全ハッシュ関数と呼ぶ 定義域が値域よりも大きい場合や完全ハッシュ関数が利用できない場合には、ハッシュ 関数の出力値が同一になる (衝突) ことがある りんご 0x02 24
25.
ブロックチェーン講座基礎編 第3回 2018/2/18 ハッシュ
テーブルにおけるハッシュ関数の衝突 ハッシュ テーブルの実装において、ハッシュ関数が衝突する可能性がある このような場合を避ける方法として次がある ● 連鎖法 ● 開番地法 レタス キャベツ 0x04 0x04 ハ ッ シ ュ 関 数 200 円 150 円 350 円 0 1 2 3 4 値の配列ハッシュ テーブル (例) 5 25
26.
ブロックチェーン講座基礎編 第3回 2018/2/18 開番地法
(Open Addressing) ハッシュ値の出た場所からもっとも近い配列の空きがある場所を利用する方法 配列がうまっていくにつれて、効率が悪くなる また、完全に埋まると値がそれ以上、追加できなくなる レタス キャベツ 0x04 0x04 ハ ッ シ ュ 関 数 牛乳 りんご キャベツ 0 1 2 3 4 キーと値の配列ハッシュ テーブル (例) レタス5 200 円 150 円 350 円 180 円 26
27.
ブロックチェーン講座基礎編 第3回 2018/2/18 連鎖法
(Separate Chaining) 値の保存する部分を連結リストにする方法 値を参照する場合には、連結リストを走査し、 求めるキーが書かれた連結リストの要素までたどる必要がある レタス キャベツ 0x04 0x04 ハ ッ シ ュ 関 数 0 1 2 3 4 連結リストハッシュ テーブル (例) レタス 350 円 りんご 150 円 牛乳 200 円 キャベツ 180 円 5 27
28.
ブロックチェーン講座基礎編 第3回 2018/2/18 ハッシュ
テーブルのリサイズ キーと値とを保管する配列が埋まってきた場合、参照にかかる時間が遅くなる。より大き な配列のハッシュ テーブルを作成し、かつハッシュ関数の値域を拡大することで、空き 領域を増やすことができる。既存のハッシュ テーブルのエントリ (キーと値との組) をす べて再度追加していくことになるので、大きなコストがかかる 牛乳 りんご キャベツ 0 1 2 3 4 200 円 150 円 350 円 0 1 2 3 4 再ハッシュ キャベツ 5 6 7 350 円 りんご 150 円 牛乳 200 円 ⋮ 28
29.
ブロックチェーン講座基礎編 第3回 2018/2/18 ハッシュ
テーブルの時間計算量まとめ 操作 ハッシュ テーブル キーに対する値の追加 O(1) キーに対する値の参照 O(1) (リサイズ) O(n) * リサイズ前の要素数を n とする 29
30.
ブロックチェーン講座基礎編 第3回 2018/2/18 ブロックチェーンのデータ構造 ハッシュ Block 500002 Block 500001 前のブロック 00000000000000000024fb37… (ブロック
500000 のダイジェスト) 内容 ... 前のブロック 0000000000000000005c9959… (ブロック 500001 のダイジェスト) 内容 ... 中身 第1回 P.15 より #{10} #{12} 0x01 0x04 ハ ッ シ ュ 関 数 #{10} #{11} #{12} 0 1 2 3 4 Block ID とブロック データの配列 5 Block 10 のデータ Block 11 のデータ Block 12 のデータBlock ID はすでに「質の良いハッシュ関数」の 出力なので、下位24 ビットとる、などでも 十分意味がある #{500002} #{500001} #{1} 最新ブロック ブロックチェーンはその性質 上、連結リストに似た構造を している。各ブロックの保管 にはハッシュ テーブルが使 えるかもしれない 30
31.
ブロックチェーン講座基礎編 第3回 2018/2/18 (課題)
ハッシュ テーブルを実装する 1 … 231 -1 までの範囲の値をキー、任意の数値を値としてとるようなエントリを、合計で 100 まで格納できるハッシュ テーブルを実装せよ 31
32.
ブロックチェーン講座基礎編 第3回 2018/2/18 3-4スタック,
キュー 32
33.
ブロックチェーン講座基礎編 第3回 2018/2/18 スタック 後入れ先出し
(LIFO, Last-In First-Out) のデータ構造 以下の操作が定義される ● 値を追加する (push) ● 値を取り出す (pop) 45 45 12 45 12 89 45 12 45 Push 45 Push 12 Push 89 Pop 89 Pop 12 Pop 45 スタック (例) 33
34.
ブロックチェーン講座基礎編 第3回 2018/2/18 スタックの利用 ●
スタック領域 : 計算機がプログラムを実行するとき、関数を呼び出すときに、実行中 のレジスタをメモリ中に保存しておく (Push)。呼び出し関数が終了したら、メモリか ら呼び出し前のレジスタ状態を復元する (Pop) 0x02 0x15 0x80 $v0 $v1 $fp 0x10PC ... ... ... 0x7E 0x7F 0x80 0x10 0x02 0x15 0x7E 0x7F 0x80 ⋮ 0x7D$fp 0x20PC 関数呼び出し前 関数呼び出し後 ⋮ ... ... $v0 $v1 ⋮ ⋮ https://en.wikipedia.org/wiki/Call_stack より引用 34
35.
ブロックチェーン講座基礎編 第3回 2018/2/18 スタックの利用 ●
スタック マシン : 記憶領域がスタックとして実装されている計算機のモデル。中間 言語の実行環境でよく用いられる。Bitcoin の移動を表すトランザクションで、アドレ スの記述や、電子署名の検証に利用されている 参照: https://chainflyer.bitflyer.jp/Transaction/1ce0f4a2a7ba2ba5ecedf4c3a038df7c7bff9ca941580ba9f8f7ebdf0df750eb https://chainflyer.bitflyer.jp/Transaction/c2df6b674903aa39729d3b0b87b80a50e44a9f045155e76a3b2900e0738dfed6 消費される側のスクリプト (例)消費する側のスクリプト (例) 35
36.
ブロックチェーン講座基礎編 第3回 2018/2/18 先入れ先出し
(FIFO, First-In First-Out) のデータ構造 以下の操作が定義される ● 値を追加する (enqueue) ● 値を取り出す (dequeue) キュー キュー (例) 47 47 23 23 23 59 23 59 31 Enqueue 47 Enqueue 23 Dequeue 47 Enqueue 59 Enqueue 31 36
37.
ブロックチェーン講座基礎編 第3回 2018/2/18 優先度付きキュー キューに入れる値に優先度をパラメータとして付属させることができるデータ構造 以下の操作が定義される ●
優先度を指定して値を追加する (enqueue) ● もっとも優先度が高い値を取り出す (dequeue) 37
38.
ブロックチェーン講座基礎編 第3回 2018/2/18 (課題)
スタックおよびキューの配列での実装 スタックおよびキューを、計算機で実装するには、どのようにメモリ上に値を配置すれば よいか。それぞれの操作に対して、どうデータを処理すればよいか考えよ 38
39.
ブロックチェーン講座基礎編 第3回 2018/2/18 第3回
まとめ 1. イントロダクション / 計算量 ● アルゴリズム : 入出力が定義され、明確に記述された計算手順のこと ● データ構造 : データを読み書きする際の操作や格納の一定の規則 ● 計算量 : 実行に必要な資源の尺度。時間計算量、空間計算量など。O 記法 2. 配列, 連結リスト ● 配列 : 記憶領域上の連続したデータ構造 ● 連結リスト : ポインタによって値がつながれたデータ構造 3. ハッシュ テーブル ● 定数時間によってキーと紐付けて値を保存するデータ構造 ● 衝突回避の方法 : 開番地法、連鎖法 4. スタック, キュー ● スタック (LIFO) : Push, Pop ● キュー (FIFO) : Enqueue, Dequeue 39
Download