2018/05/28

[読書] 退屈すれば脳はひらめく(マヌーシュ・ゾモロディ著)


待ち時間が数十秒あれば、スマホを取り出しメールをチェック、返信、続けて情報収集。できるビジネスパースンは、1秒たりとも無駄にしない\(^o^)/

と、言いたいところですが、私の現実はこんな感じ。

昼休み。14時から会議があるんか。もうちょっとましな時間に設定せえよ。というても、遅れるとカッコ悪いから13時50分にアラームを設定しとこ。スマホのロックを解除。メール、LINE、Facebookに未読がある。未読を一通りチェックしたから、スマホを机に置いて、・・・・・

何か忘れとる。スマホで何するんやったんか、脳みそを振り絞って、・・・・・・

思い出しました、アラームの設定でした\(^o^)/

スマホのロックを解除して、そういえば、Twitterをチェックしてへんかった・・・・・

このようなことを繰り返しているとアホになる、がこの本の主張です。

1.時間を無駄にしている。
 上の例の場合、アラームを設定するだけなのに5分以上の時間がかかっています。

2.集中力がなくなる。
 長い文章を読めなくなったり、理解できなくなります。

3.新しいアイデアが浮かばなくなる。
 これは意外でした。何もすることがなく時間を持て余すと、脳のデフォルト・モード・ネットワークが活動するそうです。この時に新しいアイデアが浮かんできます。いわゆる「三上」です。

ちょっとしたスキマ時間にスマホを取り出して何かしていると、デフォルト・モード・ネットワークが活動することはありませんので、新しいアイデアが出てこなくなります。この本の冒頭で著者も告白していますが、私にとっても死活問題です。

スマホを捨てたいところですが、スマホなしでは色々と差し障りが出てきます。著者も繰り返し述べていますが、スマホを遠ざけるデジタル・デトックスは現実的ではなく、スマホを意識的に使うことが必要となります。

この本では、スマホを意識的に使えるようになる方法を7つのステップで示しています。私は、運良くスマホへの依存度が低かったようで、次の3つだけで済みました。

1)スマホを使う時は何をするか意識し、最初にそれを片付けることを心がける。
2)未読が少しぐらい溜まっても死ぬことはない、と腹をくくる。
3)すべてのアプリについて通知を一旦OFFにし、通知の必要性を慎重に吟味する。

スマホ、というよりアプリの向こうにいる企業に、
 A)どれぐらいの時間を吸い取られているか、
 B)吸い取られた時間に対し十分な見返りをアプリから受け取っているか、
を定期的に振り返りたいものです。


2018/02/02

[読書] 太平洋の試練 真珠湾からミッドウェイまで(上) イアン・トール 著


アメリカでは第二次世界大戦に関する書籍はヨーロッパ戦線が中心で、太平洋戦争、特に海戦に関する書籍は少ないそうです。著者は海軍史家であり、そのような不満を解消するためにこの本を書きました。また、著者がアメリカ人であることから、太平洋戦争を米軍の視点で描いています。

この本では、マハンから語り起こしています。19世紀後半、船の動力が風から石炭に変わり、海軍の能力が大幅に向上しました。当時、軍隊の中心は陸軍であり、海軍については十分に考察されておらず、海軍を運用するための理論が求められていました。そのような時期に、マハンが「海上権力史論」を発表し、熱狂的に迎えられました。

マハンの主張を乱暴にまとめると、「主力となる強力な戦艦を中心として艦隊を組み、敵の艦隊を海上から一掃せよ」、となります。いわゆる大艦巨砲主義、艦隊決戦主義です。

日本もマハンを理論的支柱に据え、海軍の増強に努めた結果が日露戦争に現れます。僅か50年で近代的な海軍を造り上げた日本に対して、米国は尊敬と同時に脅威を感じます。米軍もマハンの主張に従っており、日本を仮想敵国とした海軍の増強に努めます。

続けて、この本ではアメリカの読者のために、日本の状況、陸軍と海軍の確執、パイロットの訓練(日中でも星が見える)、山本五十六の海軍での立ち位置と人柄について記述があります。また、真珠湾攻撃について次のような記述があります。

「海軍の名誉のためにいうが、山本は日本の宣戦布告が攻撃の少なくとも一時間前になるよう要求していた。」
(p.225から引用)

太平洋戦争は、真珠湾攻撃によって幕を開けます。世の中には、「米国は真珠湾攻撃を事前に知っていた」、との言説があるようですが、この本を読む限りでは、米軍は完全に不意を打たれています。

まず、米国はマハンの主張に従い、戦艦を中心とした艦隊を造り上げていました。それを有効な反撃もできずに撃沈させるなど、認められません。

また、真珠湾攻撃後、ハワイでの米軍の混乱ぶりからも実戦の準備はできていませんでした。例えば、偵察から戻った米軍機が飛行場へ着陸しようとしたところ、米軍の対空砲火により撃墜されています。

真珠湾攻撃を許した背景には、日本軍に対しての侮りがありました。「日本人がまともな航空機を作ることもできないし、良いパイロットに成れるわけがない」、といった具合です。

例えば、真珠湾攻撃の1年ぐらい前から、零戦は中国戦線に投入されており、絶大な戦果を上げていました。当時、その性能に並ぶものは無く、米軍にも報告されていましたが、米軍の上層部は報告に対して行動を取りませんでした。

このような要因が重なって、日本軍による真珠湾攻撃は戦術的には成功を収めます。敗北を喫した米軍の太平洋艦隊司令長官であったキンメルは解任され、ニミッツが任命されます。

ハワイに着任したニミッツは、被害の状況を調査した結果、まだまだ戦えると判断します。その理由は次のとおりです。

1.燃料タンクが無事であった。
 450万バレルの燃料が無傷のまま残っていました。これを失った場合、ヨーロッパ戦線も維持しなくてはならないため、米軍は太平洋での戦いを数年程度、延期していたでしょう。

2.修理工場群も無傷であった。
 真珠湾に沈んだ艦船を引き上げ修理することで、短期間の内に前線へ復帰できました。

3.訓練を受けた多くの将兵が生き残った。
 真珠湾攻撃により、米軍は死者2000名、負傷者700名を出しました。もし、戦闘が外洋で行われていたならば、2万の将兵を失ったことでしょう。人員の補充には時間がかかります。

4.戦艦は損害を受けたが、米海軍としては損失ではなく、むしろ利益である。
 真珠湾攻撃により、戦艦は航空機に対して無力であることが証明されました。その戦艦が沈められたのですから、航空部隊と潜水艦への切り替えが進みました。一方、日本軍は、大和、武蔵を始め、威風堂々たる艦隊が無傷で残っていたため、航空部隊への切り替えが遅れました。

5.空母は無傷で残った。
 偶然、真珠湾への帰港が遅れたため、4隻の空母は被害を免れました。これら空母が太平洋艦隊の中心となります。

ニミッツは、残った空母と航空機を用いて、マーシャル諸島にある日本軍の基地を攻撃します。日本軍は不意を打たれ、米軍の被害は軽微でした。この攻撃以降、日本軍は占領した島の防衛に悩まされます。つまり、どこを攻撃されるか分からないが、使える戦力は限られている。

2017/12/12

[SICP] 問題 1.37 : 連分数

a. 無限の連分数(continued fraction)は
の形の式である. 例えばNiとDiがすべて1の無限連分数展開が1/φになることが示せる. φは(1.2.2節で示した)黄金比. 無限連分数の近似値のとり方の一つは, 与えられた項数で展開を中断することで, そういう中断--- k項有限連分数(k-term finite continued fraction)という---は
の形である. nとdを一引数(項の添字i)で連分数の項のNiとDiを返す手続きとする. (cont-frac n d k)がk項有限連分数を計算するような手続きcont-fracを定義せよ.

(cont-frac (lambda (i) 1.0)
           (lambda (i) 1.0)
           k)
のkの順次の値で1/φの近似をとり, 手続きを調べよ. 4桁の精度の近似を得るのに, kはどのくらい大きくしなければならないか.

b. cont-fracが再帰的プロセスを生成するなら, 反復的プロセスを生成するものを書け. 反復的プロセスを生成するなら, 再帰的プロセスを生成するものを書け.
連分数を求める手続きを定義します.
;; 再帰的プロセスを生成
(define (cont-frac-r n d k)
  (define (iter i)
    (if (> i k)
        0
        (/ (n i)
           (+ (d i) (iter (+ i 1))))))
  (iter 1))

;; 反復的プロセスを生成
(define (cont-frac-i n d k)
  (define (iter i result)
    (if (= i 0)
        result
        (iter (- i 1)
              (/ (n i)
                 (+ (d i) result)))))
  (iter k 0))

(define (phi-r k)
  (/ 1 (cont-frac-r (lambda (i) 1.0)
                    (lambda (i) 1.0)
                    k)))

(define (phi-i k)
  (/ 1 (cont-frac-i (lambda (i) 1.0)
                    (lambda (i) 1.0)
                    k)))
再帰的プロセスを生成する手続きは, 上の方から計算しています. 反復的プロセスを生成する手続きは, 下の方から計算するようにしています.
黄金比Φの計算をしてみます.
ようこそ DrRacket, バージョン 6.1 [3m].
言語: Pretty Big; memory limit: 2048 MB.
> (phi-r 15)
1.6180327868852458
> (phi-i 15)
1.6180327868852458
> 
kの値を15にすれば良さそうです.

2017/12/07

[SICP] 問題 1.36 : x^x=1000

問題1.22で示した基本のnewlineとdisplayを使い, 生成する近似値を順に印字するようfixed-pointを修正せよ. 次にx log(1000)/log(x)の不動点を探索することで, xx = 1000の解を見つけよ. (自然対数を計算するSchemeの基本log手続きを使う.) 平均緩和を使った時と使わない時のステップ数を比べよ. ({ fixed-pointの予測値を1にして始めてはいけない. log(1)=0による除算を惹き起すからだ.)
近似値を表示するための処理をfixed-pointに追加しなくてはなりません. 追加する場所は, 内部手続tryが適切でしょう. 修正した手続きは次のとおりです.
(define (average x y)
  (/ (+ x y) 
     2))

(define tolerance 0.00001)

(define (fixed-point f first-guess)
  (define (close-enough? v1 v2)
    (< (abs (- v1 v2)) tolerance))
  (define (try guess)
    (let ((next (f guess)))
      (display guess)
      (newline)
      (if (close-enough? guess next)
          next
          (try next))))
  (try first-guess))
xx=1000を満たすxを求めてみます.
ようこそ DrRacket, バージョン 6.1 [3m].
言語: Pretty Big; memory limit: 2048 MB.
> (fixed-point (lambda (x) (/ (log 1000) (log x))) 
               2.0)
2.0
9.965784284662087
3.004472209841214
6.279195757507157
3.759850702401539
5.215843784925895
4.182207192401397
4.8277650983445906
4.387593384662677
4.671250085763899
4.481403616895052
4.6053657460929
4.5230849678718865
4.577114682047341
4.541382480151454
4.564903245230833
4.549372679303342
4.559606491913287
4.552853875788271
4.557305529748263
4.554369064436181
4.556305311532999
4.555028263573554
4.555870396702851
4.555315001192079
4.5556812635433275
4.555439715736846
4.555599009998291
4.555493957531389
4.555563237292884
4.555517548417651
4.555547679306398
4.555527808516254
4.555540912917957
4.555532270803653
> (expt 2 3)
8
> (expt 4.555532270803653 4.555532270803653)
999.9913579312362
> 
期待した結果が得られているようです.
平均緩和を使ってみます.
ようこそ DrRacket, バージョン 6.1 [3m].
言語: Pretty Big; memory limit: 2048 MB.
> (fixed-point (lambda (x) (average x (/ (log 1000) (log x)))) 
               2.0)
2.0
5.9828921423310435
4.922168721308343
4.628224318195455
4.568346513136242
4.5577305909237005
4.555909809045131
4.555599411610624
4.5555465521473675
4.555537551999825
> 
ステップ数が1/3以下になっています.

2017/12/04

[SICP] 問題 1.35 : 不動点の探索による黄金比の計算

(1.2.2節の)黄金比φが変換 x → 1 + 1/x の不動点であることを示し, この事実を使いfixed-point手続きによりφを計算せよ.
黄金比の定義は次のとおりです.
  φ2 = φ + 1
この両辺をφで割ります.
  φ = 1 + 1/φ
この結果から,
  変換 x → 1 + 1/x
が得られます.
不動点を求める手続きは次のとおりです.
(define tolerance 0.00001)

(define (fixed-point f first-guess)
  (define (close-enough? v1 v2)
    (< (abs (- v1 v2)) tolerance))
  (define (try guess)
    (let ((next (f guess)))
      (if (close-enough? guess next)
          next
          (try next))))
  (try first-guess))
実行してみます.
ようこそ DrRacket, バージョン 6.1 [3m].
言語: Pretty Big; memory limit: 2048 MB.
> (fixed-point (lambda (x) (+ 1 (/ 1 x)))
               1.0)
1.6180327868852458
> 
p.21から黄金比の値は約1.6180ですから, 求める結果が得られています.

2017/11/29

[SICP] 問題 1.34 : (f f)の評価

手続き

(define (f g)
  (g 2))

を定義したとする. その時


(f square)
4

(f (lambda (z) (* z (+ z 1))))
6

解釈系に組合せ(f f)を(意地悪く)評価させるとどうなるか. 説明せよ. 

問題文の手続きを定義して実行してみます. 手続きは次の通り.
(define (f g)
  (g 2))

(define (square x) (* x x))
実行結果は次のとおりです.
ようこそ DrRacket, バージョン 6.1 [3m].
言語: Pretty Big; memory limit: 2048 MB.
> (f square)
4
> (f (lambda (z) (* z (+ z 1))))
6
> (f f)
. . application: not a procedure;
 expected a procedure that can be applied to arguments
  given: 2
  arguments...:
   2
> 
(f f)を評価するとエラーが生じています. その理由を考えます.
手続きfの定義から(f f)を評価した場合の置き換えは次のようになります.
  (f f)
= (f 2)
= (2 2)
「2」は手続きではないのでエラーが生じます.

2017/11/26

[SICP] 1.2.6 : expmodでbaseのexp乗をmで割った余りが求まる理由

baseのexp乗をmで割った余りを求める手続きexpmodは次のような定義になります.
(define (expmod base exp m)
  (cond ((= exp 0) 1)
        ((even? exp)
         (remainder (square (expmod base (/ exp 2) m))
                    m))
        (else
         (remainder (* base (expmod base (- exp 1) m))
                    m))))
法演算について馴染みがないと, なぜ, この手続で余りが求まるか分からないと思います. ここで簡単に計算の仕組みを説明します.
まず, 整数aをmで割った余りをr, 整数bをmで割った余りをtとします. すると整数aとbは次のように表現できます.
   a = qm + r
   b = sm + t
このaとbの和をmで割った余りを求めます.
   a + b = (qm + r) + (sm + t)
         = (q + s)m + (r + t)
(q + s)mはmで割り切れるので, a + bをmで割った余りはr+tをmで割った余りと等しくなります.
aにある整数cを掛けた値をmで割った余りも求めてます.
   ca = cqm + cr
caをmで割った余りはcrをmで割った余りと等しくなります.
続けて, aとbの積をmで割った余りを求めます.
   ab = (qm + r)(sm + t)
      = qsm^2 + (qt + rs)m + rt
abをmで割った余りはrtをmで割った余りと等しくなります.
積についての結果から, aのx乗をmで割った余りはrのx乗をmで割った余りと等しくなります.
ここで, 手続きの定義に戻り, baseのexp乗をmで割った余りを考えます.
1)expが偶数のときを考えます.
baseの(exp/2)乗をmで割った余りをrとします. 上で計算した結果から, rの2乗をmで割った余りは, baseのexp乗をmで割った余りと等しくなります.
2) expが奇数のときを考えます.
baseの(exp-1)乗をmで割った余りをrとします. 上で計算した結果から, base*rをmで割った余りは, baseのexp乗をmで割った余りと等しくなります.
これらの結果から, 手続きexpmodによりbaseのexp乗をmで割った余りを求められることが分かります.

ヒューマン・リソース・マシーン 入社41年目−並べ替えよ

目次 1)課題 0を終端とした文字列がいくつか流れてきます。各文字列に対してソート(並べ替え)を行い、小さい順(昇順)に右側へ運んでください。 2)状況の確認 この問題では, 予めコードが入っています. このコードを実行して, 何をするコードなのか確かめます.  左のコンベアから...