Submit Search
Upload
Deque with Haskel
•
2 likes
•
1,913 views
Ken Ogura
Follow
Simple Deque implementation with Haskell Haskellで両端キューを書いてみたはなし JOIss2015 珠玉班
Read less
Read more
Science
Report
Share
Report
Share
1 of 93
Download now
Download to read offline
Recommended
Rパッケージ“KFAS”を使った時系列データの解析方法
Rパッケージ“KFAS”を使った時系列データの解析方法
Hiroki Itô
DNNの曖昧性に関する研究動向
DNNの曖昧性に関する研究動向
Naoki Matsunaga
Word2vecの並列実行時の学習速度の改善
Word2vecの並列実行時の学習速度の改善
Naoaki Okazaki
数学カフェ 確率・統計・機械学習回 「速習 確率・統計」
数学カフェ 確率・統計・機械学習回 「速習 確率・統計」
Ken'ichi Matsui
Union find(素集合データ構造)
Union find(素集合データ構造)
AtCoder Inc.
fastTextの実装を見てみた
fastTextの実装を見てみた
Yoshihiko Shiraki
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)
mosa siru
エキスパートPythonプログラミング改訂3版の読みどころ
エキスパートPythonプログラミング改訂3版の読みどころ
Takayuki Shimizukawa
Recommended
Rパッケージ“KFAS”を使った時系列データの解析方法
Rパッケージ“KFAS”を使った時系列データの解析方法
Hiroki Itô
DNNの曖昧性に関する研究動向
DNNの曖昧性に関する研究動向
Naoki Matsunaga
Word2vecの並列実行時の学習速度の改善
Word2vecの並列実行時の学習速度の改善
Naoaki Okazaki
数学カフェ 確率・統計・機械学習回 「速習 確率・統計」
数学カフェ 確率・統計・機械学習回 「速習 確率・統計」
Ken'ichi Matsui
Union find(素集合データ構造)
Union find(素集合データ構造)
AtCoder Inc.
fastTextの実装を見てみた
fastTextの実装を見てみた
Yoshihiko Shiraki
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)
mosa siru
エキスパートPythonプログラミング改訂3版の読みどころ
エキスパートPythonプログラミング改訂3版の読みどころ
Takayuki Shimizukawa
【LT資料】 Neural Network 素人なんだけど何とかご機嫌取りをしたい
【LT資料】 Neural Network 素人なんだけど何とかご機嫌取りをしたい
Takuji Tahara
Curriculum Learning (関東CV勉強会)
Curriculum Learning (関東CV勉強会)
Yoshitaka Ushiku
4 データ間の距離と類似度
4 データ間の距離と類似度
Seiichi Uchida
ウェーブレット木の世界
ウェーブレット木の世界
Preferred Networks
SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法
SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法
SSII
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング
mlm_kansai
スパースモデリング入門
スパースモデリング入門
Hideo Terada
Tensor コアを使った PyTorch の高速化
Tensor コアを使った PyTorch の高速化
Yusuke Fujimoto
三次元表現まとめ(深層学習を中心に)
三次元表現まとめ(深層学習を中心に)
Tomohiro Motoda
Group normalization
Group normalization
Ryutaro Yamauchi
物体検出の歴史(R-CNNからSSD・YOLOまで)
物体検出の歴史(R-CNNからSSD・YOLOまで)
HironoriKanazawa
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
Takuya Akiba
スパースモデリング、スパースコーディングとその数理(第11回WBA若手の会)
スパースモデリング、スパースコーディングとその数理(第11回WBA若手の会)
narumikanno0918
【プレゼン】見やすいプレゼン資料の作り方【初心者用】
【プレゼン】見やすいプレゼン資料の作り方【初心者用】
MOCKS | Yuta Morishige
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
Ryuji Tsutsui
検定力分析とベイズファクターデザイン分析によるサンプルサイズ設計【※Docswellにも同じものを上げています】
検定力分析とベイズファクターデザイン分析によるサンプルサイズ設計【※Docswellにも同じものを上げています】
Hiroyuki Muto
Project Facilitation
Project Facilitation
Kenji Hiranabe
Sliced Wasserstein Distance for Learning Gaussian Mixture Models
Sliced Wasserstein Distance for Learning Gaussian Mixture Models
Fujimoto Keisuke
PyMCがあれば,ベイズ推定でもう泣いたりなんかしない
PyMCがあれば,ベイズ推定でもう泣いたりなんかしない
Toshihiro Kamishima
アルゴリズムとデータ構造4
アルゴリズムとデータ構造4
Kenta Hattori
Find(1)
Find(1)
akitsukada
More Related Content
What's hot
【LT資料】 Neural Network 素人なんだけど何とかご機嫌取りをしたい
【LT資料】 Neural Network 素人なんだけど何とかご機嫌取りをしたい
Takuji Tahara
Curriculum Learning (関東CV勉強会)
Curriculum Learning (関東CV勉強会)
Yoshitaka Ushiku
4 データ間の距離と類似度
4 データ間の距離と類似度
Seiichi Uchida
ウェーブレット木の世界
ウェーブレット木の世界
Preferred Networks
SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法
SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法
SSII
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング
mlm_kansai
スパースモデリング入門
スパースモデリング入門
Hideo Terada
Tensor コアを使った PyTorch の高速化
Tensor コアを使った PyTorch の高速化
Yusuke Fujimoto
三次元表現まとめ(深層学習を中心に)
三次元表現まとめ(深層学習を中心に)
Tomohiro Motoda
Group normalization
Group normalization
Ryutaro Yamauchi
物体検出の歴史(R-CNNからSSD・YOLOまで)
物体検出の歴史(R-CNNからSSD・YOLOまで)
HironoriKanazawa
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
Takuya Akiba
スパースモデリング、スパースコーディングとその数理(第11回WBA若手の会)
スパースモデリング、スパースコーディングとその数理(第11回WBA若手の会)
narumikanno0918
【プレゼン】見やすいプレゼン資料の作り方【初心者用】
【プレゼン】見やすいプレゼン資料の作り方【初心者用】
MOCKS | Yuta Morishige
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
Ryuji Tsutsui
検定力分析とベイズファクターデザイン分析によるサンプルサイズ設計【※Docswellにも同じものを上げています】
検定力分析とベイズファクターデザイン分析によるサンプルサイズ設計【※Docswellにも同じものを上げています】
Hiroyuki Muto
Project Facilitation
Project Facilitation
Kenji Hiranabe
Sliced Wasserstein Distance for Learning Gaussian Mixture Models
Sliced Wasserstein Distance for Learning Gaussian Mixture Models
Fujimoto Keisuke
PyMCがあれば,ベイズ推定でもう泣いたりなんかしない
PyMCがあれば,ベイズ推定でもう泣いたりなんかしない
Toshihiro Kamishima
What's hot
(20)
【LT資料】 Neural Network 素人なんだけど何とかご機嫌取りをしたい
【LT資料】 Neural Network 素人なんだけど何とかご機嫌取りをしたい
Curriculum Learning (関東CV勉強会)
Curriculum Learning (関東CV勉強会)
4 データ間の距離と類似度
4 データ間の距離と類似度
ウェーブレット木の世界
ウェーブレット木の世界
SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法
SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング
スパースモデリング入門
スパースモデリング入門
Tensor コアを使った PyTorch の高速化
Tensor コアを使った PyTorch の高速化
三次元表現まとめ(深層学習を中心に)
三次元表現まとめ(深層学習を中心に)
Group normalization
Group normalization
物体検出の歴史(R-CNNからSSD・YOLOまで)
物体検出の歴史(R-CNNからSSD・YOLOまで)
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
スパースモデリング、スパースコーディングとその数理(第11回WBA若手の会)
スパースモデリング、スパースコーディングとその数理(第11回WBA若手の会)
【プレゼン】見やすいプレゼン資料の作り方【初心者用】
【プレゼン】見やすいプレゼン資料の作り方【初心者用】
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
検定力分析とベイズファクターデザイン分析によるサンプルサイズ設計【※Docswellにも同じものを上げています】
検定力分析とベイズファクターデザイン分析によるサンプルサイズ設計【※Docswellにも同じものを上げています】
Project Facilitation
Project Facilitation
Sliced Wasserstein Distance for Learning Gaussian Mixture Models
Sliced Wasserstein Distance for Learning Gaussian Mixture Models
PyMCがあれば,ベイズ推定でもう泣いたりなんかしない
PyMCがあれば,ベイズ推定でもう泣いたりなんかしない
Similar to Deque with Haskel
アルゴリズムとデータ構造4
アルゴリズムとデータ構造4
Kenta Hattori
Find(1)
Find(1)
akitsukada
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3
Ransui Iso
解説#74 連結リスト
解説#74 連結リスト
Ruo Ando
データサイエンティスト必見!M-1グランプリ
データサイエンティスト必見!M-1グランプリ
Satoshi Kitajima
Python勉強会3-コレクションとファイル
Python勉強会3-コレクションとファイル
理 小林
Pgunconf14 pg13-psql
Pgunconf14 pg13-psql
Toshi Harada
Similar to Deque with Haskel
(7)
アルゴリズムとデータ構造4
アルゴリズムとデータ構造4
Find(1)
Find(1)
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3
解説#74 連結リスト
解説#74 連結リスト
データサイエンティスト必見!M-1グランプリ
データサイエンティスト必見!M-1グランプリ
Python勉強会3-コレクションとファイル
Python勉強会3-コレクションとファイル
Pgunconf14 pg13-psql
Pgunconf14 pg13-psql
More from Ken Ogura
Amortize analysis of Deque with 2 Stack
Amortize analysis of Deque with 2 Stack
Ken Ogura
Trianguler
Trianguler
Ken Ogura
Npc april fool2014
Npc april fool2014
Ken Ogura
計算量
計算量
Ken Ogura
辺彩色
辺彩色
Ken Ogura
かけざん
かけざん
Ken Ogura
人間対Pc2
人間対Pc2
Ken Ogura
PC解体
PC解体
Ken Ogura
ハッキング実演
ハッキング実演
Ken Ogura
Shio dtm
Shio dtm
Ken Ogura
Cをやりましょう
Cをやりましょう
Ken Ogura
April2013
April2013
Ken Ogura
April2013
April2013
Ken Ogura
Mage
Mage
Ken Ogura
Imo
Imo
Ken Ogura
Hairetu2
Hairetu2
Ken Ogura
Moon
Moon
Ken Ogura
Jissou
Jissou
Ken Ogura
Lunch
Lunch
Ken Ogura
Divisor
Divisor
Ken Ogura
More from Ken Ogura
(20)
Amortize analysis of Deque with 2 Stack
Amortize analysis of Deque with 2 Stack
Trianguler
Trianguler
Npc april fool2014
Npc april fool2014
計算量
計算量
辺彩色
辺彩色
かけざん
かけざん
人間対Pc2
人間対Pc2
PC解体
PC解体
ハッキング実演
ハッキング実演
Shio dtm
Shio dtm
Cをやりましょう
Cをやりましょう
April2013
April2013
April2013
April2013
Mage
Mage
Imo
Imo
Hairetu2
Hairetu2
Moon
Moon
Jissou
Jissou
Lunch
Lunch
Divisor
Divisor
Deque with Haskel
1.
データ構造 with Haskell
2.
目次 ● Stack ● Queue ● Deque
3.
目次 ● Stack ● Queue ● Deque ●
全部配列を使えば一瞬じゃないか! いいかげんにしろ!
4.
残念ながら 配列なんて無いよ
5.
Haskellのデータ構造 ● 配列は一応あるよ – ただし代入に
O(N) かかる
6.
Haskellのデータ構造 ● リストというのを使います ● 次の操作が可能 –
先頭に値を追加 O(1) – 先頭から削除 O(1) – n番目にアクセス O(n) ● 厳密にはちょっと違うけどだいたいあってる
7.
Haskellのリスト ● [3, 1, 4,
1, 5] –-リストの例 ● 追加 – 9 : [3, 1, 4, 1, 5] → [9, 3, 1, 4, 1, 5] ● 先頭を得る – head [3, 1, 4, 1, 5] → 3 ● 先頭以外を得る – tail [3, 1, 4, 1, 5] → [1, 4, 1, 5] – tail [1] → [ ] –- 空のリスト
8.
Haskellのリスト ● 先頭にくっつける (:) ●
先頭を参照する head ● 先頭以外を参照する tail ● これらは以降たくさん出てくるのでよく覚えて いてね
9.
1つめのデータ構造 Stack
10.
Stack ● 次の操作に対応したデータ構造 – 列の先頭に値を追加
(push) – 列の先頭から値を取り出す (pop)
11.
Stack:図示 ● 空のStackがあるじゃろ – 左側が先頭
12.
Stack:図示 ● push(4) 4
13.
Stack:図示 ● push(4), push(1) 41
14.
Stack:図示 ● push(4), push(1),
push(1) 411
15.
Stack:図示 ● push(4), push(1),
push(1), pop() 41 1
16.
Stack:図示 ● push(4), push(1),
push(1), pop(), push(5) 4155
17.
Stack ● 次の操作に対応したデータ構造 – 列の先頭に値を追加
(push) – 列の先頭から値を取り出す (pop)
18.
Stack ● 次の操作に対応したデータ構造 – 列の先頭に値を追加
(push) – 列の先頭から値を取り出す (pop) ● すごい既視感
19.
Haskellのデータ構造 (再掲) ● リストというのを使います ●
次の操作が可能 – 先頭に値を追加 O(1) – 先頭から削除 O(1) – n番目にアクセス O(n) ● 厳密にはちょっと違うけどだいたいあってる
20.
Haskellのデータ構造 (再掲) ● リストというのを使います ●
次の操作が可能 – 先頭に値を追加 O(1) – 先頭から削除 O(1) – n番目にアクセス O(n) ● 厳密にはちょっと違うけどだいたいあってる
21.
Stack ● スタック ● リストをそのまま使える –
やったぜ
22.
Stack: 実装 (ソースコードをここに書く) (説明をここに書く)
23.
Stack: 実装 Data Stack
a = S [a] Stack型の定義
24.
Stack: 実装 Data Stack
a = S [a] push (S xs) x = S (x:xs) pushの定義
25.
Stack: 実装 Data Stack
a = S [a] push (S xs) x = S (x:xs) pop (x:xs) = (x, S xs) popの定義
26.
Stack: 実装 Data Stack
a = S [a] push (S xs) x = S (x:xs) pop (x:xs) = (x, S xs) 空のStackをpopしないことは 良心にまかせる
27.
Stack: 実装 Data Stack
a = S [a] push (S xs) x = S (x:xs) pop (x:xs) = (x, S xs) 完成
28.
1つめのデータ構造 Queue
29.
Queue ● 次の操作に対応したデータ構造 – 列の先頭に値を追加
(push) – 列の末尾から値を取り出す (pop)
30.
Queue: 図示 ● 空のQueueがあるじゃろ –
左側から入って、右側から出る
31.
Queue: 図示 ● push(3) 3
32.
Queue: 図示 ● push(3),
push(7) 37
33.
Queue: 図示 ● push(3),
push(7), push(2) 372
34.
Queue: 図示 ● push(3),
push(7), push(2), pop() 3 72
35.
Queue: 図示 ● push(3),
push(7), push(2), pop() 72
36.
Queue: 図示 ● push(3),
push(7), push(2), pop(), push(9) 729
37.
Queue: 図示 ● push(3),
push(7), push(2), pop(), push(9) pop() 7 29
38.
Queue ● 次の操作に対応したデータ構造 – 列の先頭に値を追加
(push) – 列の末尾から値を取り出す (pop)
39.
Queue ● 次の操作に対応したデータ構造 – 列の先頭に値を追加
(push) – 列の末尾から値を取り出す (pop) – リストの末尾の操作は厄介
40.
Queue ● 次の操作に対応したデータ構造 – 列の先頭に値を追加
(push) – 列の末尾から値を取り出す (pop) – リストの末尾の操作は厄介 – しかしデータ構造の申し子である皆さんな ら対処法をすぐに思いつくはず
41.
有名なことわざ QueueはStack2つで作れる
42.
Queue: 図示 ● 空のQueueの下に2つのStackがあるじゃろ
43.
Queue: 図示 ● push(3) 3 3
44.
Queue: 図示 ● push(3),
push(5) 3 3 5 5
45.
Queue: 図示 ● push(3),
push(5), push(1) 3 35 5 1 1
46.
Queue: 図示 ● push(3),
push(5), push(1), pop() 3 35 5 1 1
47.
Queue: 図示 ● push(3),
push(5), push(1), pop() ● pop時右側が空だったらエイヤッする 3 35 5 1 1
48.
Queue: 図示 ● push(3),
push(5), push(1), pop() 3 35 5 1 1
49.
Queue: 図示 ● push(3),
push(5), push(1), pop() 5 5 1 1
50.
Queue: 図示 ● push(3),
push(5), push(1), pop(), push(2) 5 5 1 1 2 2
51.
Queue: 図示 ● push(3),
push(5), push(1), pop(), push(2), pop() 5 5 1 1 2 2
52.
Queue(Stack×2) ● Stackはさっき実装したばかりだしやるだけ じゃん! ● 一番ややこしいのはpopするときに右側の Stackが空だった時
53.
Queue(Stack×2) ● Stackはさっき実装したばかりだしやるだけ じゃん! ● 一番ややこしいのはpopするときに右側の Stackが空だった時 351
54.
Queue(Stack×2) ● Stackはさっき実装したばかりだしやるだけ じゃん! ● 一番ややこしいのはpopするときに右側の Stackが空だった時 351 エイヤッ
55.
Queue(Stack×2) ● Stackはさっき実装したばかりだしやるだけ じゃん! ● 一番ややこしいのはpopするときに右側の Stackが空だった時 ● Stackがただのリストであったことを思い出す と、エイヤッはただのリスト反転 –
標準で reverseという関数がある
56.
Queue: 実装 (実装をここに書く) (説明をここに書く)
57.
Queue: 実装 Queue a
= Q [a] [a] Queueの型を定義 リスト2つ
58.
Queue: 実装 Queue a
= Q [a] [a] push (Q xs ys) x = Q (x:xs) ys push の実装 (Stackと同様)
59.
Queue: 実装 Queue a
= Q [a] [a] push (Q xs ys) x = Q (x:xs) ys pop (Q xs y:ys) = (y (Q xs ys)) 右側が空じゃない時のpop
60.
Queue: 実装 Queue a
= Q [a] [a] push (Q xs ys) x = Q (x:xs) ys pop (Q xs y:ys) = (y (Q xs ys)) pop (Q xs []) = pop(Q [] (reverse xs)) 右側が空の時のpop
61.
3つめのデータ構造 Deque
62.
Deque ● 次の操作に対応したデータ構造 – 列の先頭に値を追加
(pushF) – 列の末尾に値を追加 (pushB) – 列の先頭から値を取り出す (popF) – 列の末尾から値を取り出す (popB)
63.
Deque: 図示 ● ここに空のDequeがあるじゃろ –
左が先頭(Front), 右が末尾 (Back)
64.
Deque: 図示 ● pushF(3) 3
65.
Deque: 図示 ● pushF(3),
pushB(4) 3 4
66.
Deque: 図示 ● pushF(3),
pushB(4), pushF(5) 3 45
67.
Deque: 図示 ● pushF(3),
pushB(4), pushF(5), popB() 3 4 5 4
68.
Deque: 図示 ● pushF(3),
pushB(4), pushF(5), popB() 35
69.
Deque: 図示 ● pushF(3),
pushB(4), pushF(5), popB(), popF() 3 5
70.
Deque: 図示 ● pushF(3),
pushB(4), pushF(5), popB(), popF() 3
71.
Deque: 図示 ● pushF(3),
pushB(4), pushF(5), popB(), popF() pushB(4) 3 4
72.
Deque: 図示 ● pushF(3),
pushB(4), pushF(5), popB(), popF() pushB(4), pushF(3) 3 433
73.
Deque ● 次の操作に対応したデータ構造 – 列の先頭に値を追加
(pushF) – 列の末尾に値を追加 (pushB) – 列の先頭から値を取り出す (popF) – 列の末尾から値を取り出す (popB)
74.
Deque ● 次の操作に対応したデータ構造 – 列の先頭に値を追加
(pushF) – 列の末尾に値を追加 (pushB) – 列の先頭から値を取り出す (popF) – 列の末尾から値を取り出す (popB)
75.
Queue ● 次の操作に対応したデータ構造 – 列の先頭に値を追加
(pushF) – 列の末尾に値を追加 (pushB) – 列の先頭から値を取り出す (popF) – 列の末尾から値を取り出す (popB)
76.
有名なことわざ DequeはStack2つで作れる
77.
Deque(Stack×2): 図示 ● 空のDequeの下にStackが2つあるじゃろ –
左が先頭(Front), 右が末尾 (Back)
78.
432 Deque(Stack×2): 図示 ● pushF(1),
pushF(2), pushF(3), pushF(4) 4321 1
79.
432 Deque(Stack×2): 図示 ● pushF(1),
pushF(2), pushF(3), pushF(4) popB() 4 321 1
80.
32 Deque(Stack×2): 図示 ● pushF(1),
pushF(2), pushF(3), pushF(4) popB() 4 321 1 エイヤッ 4
81.
32 Deque(Stack×2): 図示 ● pushF(1),
pushF(2), pushF(3), pushF(4) popB() 4 321 1 4
82.
32 Deque(Stack×2): 図示 ● pushF(1),
pushF(2), pushF(3), pushF(4) popB() 321 1
83.
Deque(Stack×2) ● Stackはさっき実装したばかりだしやるだけ じゃん!(デジャヴ) ● 一番ややこしいのはpopするときにしたい方 のStackが空だった時
(デジャヴ) 4321
84.
321 4 Deque(Stack×2) ● Stackはさっき実装したばかりだしやるだけ じゃん!(デジャヴ) ●
一番ややこしいのはpopするときにしたい方 のStackが空だった時 (デジャヴ) エイヤッ
85.
Deque(Stack×2) ● Stackはさっき実装したばかりだしやるだけじゃん! (デジャヴ) ● 一番ややこしいのはpopするときにしたい方のStack が空だった時 (デジャヴ) ● エイヤッは空じゃないStackの中身を半分ずつにわけ る操作 – リストの最初
k 個分をとりだす take – リストの最初 k 個を除いたリストを得る drop – これらを使えば便利
86.
Deque(Stack×2) ● Stackはさっき実装したばかりだしやるだけ じゃん!(デジャヴ) ● 一番ややこしいのはpopするときにしたい方 のStackが空だった時
(デジャヴ) ● エイヤッは空じゃないStackの中身を半分ずつに わける操作 – 空じゃない方の奥側半分を逆転して空の 方につっこむ –
87.
Deque: 実装 (実装をここに書く) (説明をここに書く)
88.
Deque: 実装 Deque a
= D [a] [a] pushF (D xs ys) x = D (x:xs) ys pushB (D xs ys) y = D xs (y:ys) pushFとpushB (簡単)
89.
Deque: 実装 Deque a
= D [a] [a] popF (D x:xs ys) = (x, (D xs ys)) 左側が空じゃない時のpopF
90.
Deque: 実装 Deque a
= D [a] [a] popF (D x:xs ys) = (x, (D xs ys)) popF (D [] ys) = popF (D lh rh) where lh = take h ys rh = reverse (drop h ys) h = (length ys) `div` 2 左側が空の時のpopF
91.
Deque: 実装 Deque a
= D [a] [a] popB (D xs y:ys) = (y, (D xs ys)) popB (D xs []) = popB (D lh rh) where lh = reverse (drop h xs) rh = take h xs h = (length xs) `div` 2 popBも同様
92.
クリックしてタイトルを挿入! やったぜ
93.
サンプルコード ● サンプルコードはこちら ● https://github.com/catupper/JOISS2015/blob/master/Queue /Deque.hs
Download now