2013-03-23

国際通り、鉄板焼きステーキレストラン「碧」(へき)で昼食

沖縄に来たらステーキ食べないと気が収まらないという事で、最終日の昼食は国際通りの観光を兼ねて鉄板焼きステーキレストラン「碧」という所で食べました。

最初は、去年も行ったキャプテンズインというシェフがちょっとしたパフォーマンスをしながら肉を焼いてくれる店に行ったんですけど、人が多かったので、待ちきれず別の店を探す事にしました。

国際通りを歩いていると、何件も鉄板焼き屋というかステーキやがあって、迷ったんですけど、何となく店構えがよかった「碧」という店に入りました。

入って気づいたのはスタッフが女性ばかりだと言う事。後で置いてあったリーフレットを見てみると、やっぱり女性だけでやっているというのがウリの店だったようです。

テンダーロインとサーロインのステーキセットを1人前ずつ注文しました。

沖縄の国際通り、鉄板焼きステーキレストラン「碧」

テンダーローインの肉は、脂身が少なくて食べやすいんだけど、年齢と共に量が食べられなくなってきた僕にはちょっと不満足でした。

サーロインは、霜降りの脂がのっていて、トロけるような肉ですごいおいしかったです。キャプテンズインよりは値段は高かったけど、けっこうおいしくて良かったです。

飛行機までの時間があまり無かったので、その旨を伝えると対応していただけたのもよかったです。

【2013年2月沖縄旅行】記事一覧

  1. 連休中の突然の沖縄旅行。アメックスのプラチナコンシェルジュが超便利。
  2. スカイマークの安全性とサービスの質
  3. 1泊目。那覇空港近くのリーガロイヤルグラン沖縄に宿泊。
  4. 2日目。むら咲むら見学。
  5. ANAインターコンチネンタル万座近くのアラモアで夕食
  6. 二日目。ANAインターコンチネンタル万座に宿泊。
  7. 3日目。ブセナセラスのグラス底ボートに乗る。
  8. 4日目。ブセナテラスのラティーダで朝食
  9. 沖縄旅行記4日目。美ら海水族館の感想。
  10. 沖縄旅行4日目。ブセナテラスの和食レストラン真南風(まはえ)で寿司を食す
  11. 5日目。首里城の観光。
  12. 国際通り、鉄板焼きステーキレストラン「碧」(へき)で昼食

5日目。首里城の観光。

5日目の最終日は、夕方に那覇空港から飛行機に乗るので、チェックアウトしてからは那覇周辺で遊ぶ事にしました。

ブセナテラスのクラブラウンジでチェックアウトの手続き。最後にこの旅一番のお気に入りになったグァバジュースの炭酸割りを最後にいただきました

ブセナテラスのクラブラウンジでいただいたグァバジュースの炭酸割り

首里城とか国際通りとかは那覇空港から近いので、帰りの飛行機に乗る前に行くと無駄な時間が無くてよかったです。

首里城は、中国文化と日本文化が融合したもので、日本に一般的な城とは大きく雰囲気が異なります。

去年も首里城を観光して、その時に琉球王朝の事が気になって少し調べたのですが、日本と中国の両ばさみになって厳しい最後を迎えているんですよね。

今年、私たちが行った時には、工事をしていて美しい外観を見る事ができませんでした。

首里城は改装工事中でした。

中国の文化も所々に感じる立派なお城です。日本の有名なお城と比較しても見劣りしませんので、当時の琉球王朝がどれだけ栄えていたかが分かります。

高台になっている所に築城されていたようで、上からは那覇か何か分かりませんが、町並みを一望することができます。

首里城の上から見下ろした沖縄の町並み

門構えは、完全に敵の侵入を想定してそれを防ぐための構造になっています。城だから当然なんですけどね。防御の事を一切考えていなかった安土城が例外です。

首里城の門は石垣で堅牢な造り

琉球王朝の事を詳しく知りたければ、昔やってたNHKの大河ドラマ「琉球の風」を見るといいみたいです。ただ、なぜかDVDが発売されていません。原作を本で読むしかないようです。

ちなみに、沖縄観光でおすすめのむら咲むらは「琉球の風」のロケをするために作られた跡地です。だからあんなにリアルに当時の風景が残されているんですね。

首里城から出てくると途中で土産物屋さんがたくさん並んでて、また商売っ気たっぷりのおばちゃんたちが商売に励んでいました(笑)

せっかく沖縄に来たのでブルーシールのアイスクリームをいただきました。京都では真冬の2月に暖かい沖縄で冷たいアイスクリームを食べるっていうのが南国にバカンスに来た事を実感できて最高です。

首里城のブルーシールアイスクリーム&ソフトクリーム

【2013年2月沖縄旅行】記事一覧

  1. 連休中の突然の沖縄旅行。アメックスのプラチナコンシェルジュが超便利。
  2. スカイマークの安全性とサービスの質
  3. 1泊目。那覇空港近くのリーガロイヤルグラン沖縄に宿泊。
  4. 2日目。むら咲むら見学。
  5. ANAインターコンチネンタル万座近くのアラモアで夕食
  6. 二日目。ANAインターコンチネンタル万座に宿泊。
  7. 3日目。ブセナセラスのグラス底ボートに乗る。
  8. 4日目。ブセナテラスのラティーダで朝食
  9. 沖縄旅行記4日目。美ら海水族館の感想。
  10. 沖縄旅行4日目。ブセナテラスの和食レストラン真南風(まはえ)で寿司を食す
  11. 5日目。首里城の観光。
  12. 国際通り、鉄板焼きステーキレストラン「碧」(へき)で昼食

2013-03-18

沖縄旅行4日目。ブセナテラスの和食レストラン真南風(まはえ)で寿司を食す

昼間は美ら海水族館に行ってきて、ホテルに帰ってきてからまた出かけるのは面倒だったのでディナーはブセナテラスの中にある和食レストラン真南風(まはえ)にしました。

実は、前日も真南風(まはえ)に行きたかって予約しようと思ったけど、既に予約が埋まっていて行けませんでした。15時か16時くらいに電話してすでに21時くらいまでいっぱいだったので、けっこう人気なのかも。行くならできるだけ早めに予約しといた方がいいですよ。

ソフトドリンクも沖縄らしく南国のトロピカルカクテル風です。こういうのがけっこううれしい。

ブセナテラス真南風(まはえ)のドリンク

料理は会席料理とかいろんなものがあるけど、握り寿司が好きな僕は握り寿司盛り合わせを注文。

ブセナテラス真南風(まはえ)の握り寿司盛り合わせ

嫁さんが天ぷら好きなので、天ぷらも注文。子どもようにうどんなんかも用意していただきました。メニューには無かったと思いますけど、何でも言ってみれば対応してもらえるものです。

ブセナテラス真南風(まはえ)の天ぷら

ブセナテラス真南風(まはえ)で作ってもらった子供用のうどん

全部食べ終えた後に、沖縄で寿司と天ぷらだけでは雰囲気が出ないので、ゴーヤーチャンプルも食べました。

味そのものは、特別おいしいというわけではありませんけど、値段相応かなという感じです。ブセナテラスは全体のホテルの雰囲気が良いのですが、料理に関しては特別という事は無いと思います。

真南風(まはえ)はブセナテラスという素晴らしいホテルの中にあり行くのも楽ですし、素晴らしい雰囲気の中で料理が食べられるという事を考えると総合的には良いレストランだと思います。

次回行くときは、会席料理を食べてみたいですね。

【2013年2月沖縄旅行】記事一覧

  1. 連休中の突然の沖縄旅行。アメックスのプラチナコンシェルジュが超便利。
  2. スカイマークの安全性とサービスの質
  3. 1泊目。那覇空港近くのリーガロイヤルグラン沖縄に宿泊。
  4. 2日目。むら咲むら見学。
  5. ANAインターコンチネンタル万座近くのアラモアで夕食
  6. 二日目。ANAインターコンチネンタル万座に宿泊。
  7. 3日目。ブセナセラスのグラス底ボートに乗る。
  8. 4日目。ブセナテラスのラティーダで朝食
  9. 沖縄旅行記4日目。美ら海水族館の感想。
  10. 沖縄旅行4日目。ブセナテラスの和食レストラン真南風(まはえ)で寿司を食す
  11. 5日目。首里城の観光。
  12. 国際通り、鉄板焼きステーキレストラン「碧」(へき)で昼食

2013-03-16

下鴨神社近く「加茂みたらし茶屋」のみたらし団子

下鴨神社のすぐ近くに加茂みたらし茶屋というお茶屋さんがある。

いかにも京都らしい雰囲気のお店で、中でも食べられるし、持ち帰りもできる。

中には小さな神社も祭られていて、下鴨神社の近くという土地柄もあって、神聖な空気が流れているように感じる。

いろんな和菓子を食べる事ができるのだが、一番人気はみたらし団子です。

京都下鴨神社近くの加茂みたらし茶屋のみたらし団子の画像

加茂みたらし茶屋で食べるまでは、みたらし団子ってそんなにおいしいというイメージを持ってなかったんだけど、ここのみたらし団子は本当に美味しい。

店内で食べると焼きたての作り立てを出してくれるので、なおさらおいしい。持って買える予定の人も1皿3本セットのみたらし団子があるので、一皿だけでも店で食べる事をおすすめします。

スーパーで売っている安いみたらし団子ってもちもちした食感なんですけど、加茂みたらし茶屋のみたらし団子はけっこう固めの食感でそれがおいしいんですよね。

下鴨神社で心を清らかにしておいしいみたらし団子を食べる。京都ってほんとに素晴らしい所です。

場所は分かりにくい場所ではないのですが、店が小さめなので車などで通ると見過ごしてしまうことがあります。下のグーグルマップのAというピンが立っている所です。右の緑の部分が下鴨神社です。

加茂みたらし茶屋の場所

ちなみに持ち帰った場合でも、ビニールの袋に入っているのでお湯であたためると少しだけおいしくいただけます。

2013-03-15

線形探索改良版 for~elseを使う

前に書いた線形探索法(リニアサーチ)をfor~elseで改良してみました。

#!/usr/bin/env python
#-*- coding: utf-8 -*-

def linearSearch():
    array = [4, 2, 3, 5, 1]
    for i, e in enumerate(array):
        if e == 5:
            print "array[%d] is 5." % i
            break
    else:
        print "5 doesn't exist in the array."

if __name__ == '__main__':
    linearSearch()

elseってif文と組み合わせて使うのが普通だけど、何かの本でfor~elseという書き方ができると知ったので使ってみました。

for~elseと書くと、forループが全部終わった時に実行されます。ただし、breakするとelse以降は実行されません。

前回書いた線形探索法と比べて探している数字が見つかったかどうかを判断するansという変数が不要になり少しスッキリしました。

2013-03-13

ラ・パティスリー・デ・レーヴ(La patisserie des reves)京都高台寺店

花灯路を見に行ったついでに、京都の祇園にできたラ・パティスリー・デ・レーヴ(La patisserie des reves)に行ってきました。

オープンしてすぐの時も行ったので、二回目ですけど、やっぱり美味しいわ。

京都祇園にあるフランス(パリ)の有名パティシエのお店ラ・パティスリー・デ・レーヴ(La patisserie des reves)のケーキ1

京都祇園にあるフランス(パリ)の有名パティシエのお店ラ・パティスリー・デ・レーヴ(La patisserie des reves)のケーキ2

見た目もいいし、食感もいいし、食べてるうちにだんだん味が変わってきたりもする。

食べログとか見てると、コストパフォーマンスがどうのこうのとか言ってる人多いけど、質が上がれば上がるほどコストパフォーマンスってのは悪くなって当然なのよ。

サイト作成でも、アプリ作成でも何でも同じ。

60%の完成度のものを10%向上させるのにかかるコストと90%の完成度のものを10%向上させて100%にするのにかかるコストを比較すると後者の方は何倍も大変なの。

だからよりレベルほ高いモノを求める時っていうのはコストパフォーマンスを考えたらダメなのよ。

花灯路は好みの問題かもしれないけど、個人的にはそれほど好きじゃない。やっぱり昼間の太陽が出ている時の方が断然美しい。

歴史のある建築物っていうのは、建築した当時には今みたいな電気とかライトアップの技術なんて無かったから、そういう飾り付けをする前提で作って無い訳で、ライトアップとかしてもそんなに美しくなるものじゃないのだと思う。

太陽、青空、緑のコントラストが最も美しい。

ラ・パティスリー・デ・レーヴは19時で閉店なので、花灯路のついでに行くにはちょっと時間的に厳しいけど、食べる価値のあるスイーツです。

Pythonで文章に出現する個々のキーワードの出現回数を調べる方法

キーワード出現頻度とかを調べる時に、ある文章中に特定の単語が何回出現するかというのを調べたい時はよくあります。

Pythonで個々の単語の出現回数を調べる方法は主に3つあります。

  1. for文で1つずつ調べて行く方法
  2. for文で辞書のgetメソッドを使う方法
  3. nltkを使う方法

3つの方法で実際に書いてみました。サンプルの文章はWall Street Journalのトップニュースから引用させていただきました。

def version1(line):
    for word in line.split():
        if word in wordcount:
            wordcount[word] = wordcount[word] + 1
        else:
            wordcount[word] = 1
    print wordcount

def version2(line):
    for word in line.split():
        wordcount[word] = wordcount.get(word, 0) + 1
    print wordcount

def version3(line):
    import nltk
    tokens = nltk.word_tokenize(line)
    text = nltk.Text(tokens)
    wordcount = nltk.FreqDist(text)
    print wordcount.items()

if __name__ == '__main__':
    line = "These changes, almost all of which the White House and Democrats have said they oppose, would combine with January's tax increases to eliminate the government's budget deficit in 2023, a top GOP goal, says Mr. Ryan, chairman of the House Budget Committee. Prior House GOP budget resolutions called for changes that would have taken several decades to eliminate the deficit."
    wordcount = {}
    version1(line)
    version2(line)
    version3(line)

一番分かりやすいのが1番の方法(version1)で、1つずつ単語を取り出して、その単語が辞書に既に登録されていれば1を足して、登録されていなければ1を代入するのを繰り返します。

もう少し簡単に書けるのが2番の方法(version2)で、辞書のgetメソッドを使います。引数の1つ目はキーを、2つ目はキーが存在しない場合のデフォルト値を渡します。

キーが存在すればそれに1を足す事になり、キーが存在しなければ0を代入するという事になります。

もっと便利なのが3番の方法(version3)のnltkを使うやり方です。nltkは標準で入ってないので別途インストールする必要があります。

FreqDistっていうのは、単語の出現回数の順番に並べてくれていますので、出現回数の上位10個だけを取り出したい時には以下のように最後に[:10]と書けばいいだけです。NLTKは面白い。

    print wordcount.items()[:10]

調査したいライバルサイト、ライバルサイトのバックリンクサイトなどのキーワード出現回数とかを調べたい時に便利です。NLTKを使えば最近のSEOで大事な共起語なんかの分析も簡単にできます。

日本語みたいに単語をスペースで区切らない言語の場合はMeCabなどで単語に分割したり形態素解析する手間も必要になります。

2013-03-12

「アルゴリズムを、はじめよう」ユークリッドの互除法をPythonで書く

2つの数字の最大公約数を導きだすユークリッドの互除法のアルゴリズムをPythonで書きました。

アルゴリズムを、はじめよう

第12章:ユークリッドの互除法のアルゴリズム(Euclidean algorithm)


#!/usr/bin/env python
#!/usr/bin/env python
#-*- coding: utf-8 -*-

def euclidean():
    a = int(raw_input("Enter the first number. : "))
    b = int(raw_input("Enter the second number. : "))
    ans = 1
    if a < b:
        a, b = b, a
    while 1:
        r = a % b
        if r == 0:
            ans = b
            break
        else:
            a = b
            b = r
    print "The greatest common divisor is %d." % ans

if __name__ == '__main__':
    euclidean()

これはけっこう簡単にできた。フローチャートを見てもけっこう単純。こんな簡単に最大公約数が出せるなんて知らなかった。

沖縄旅行記4日目。美ら海水族館の感想。

沖縄の観光名所の1つとして有名な美ら海水族館は、沖縄のけっこう北の方に位置してて、那覇からだと渋滞などに巻き込まれると2時間くらいかかると思います。

那覇から往復してると美ら海水族館の見学だけで一日潰れてしまうのでもったいないですね。

ただ、その日に宿泊してたブセナテラスからだと1時間かからず行けるので、せっかくなので今年も行ってきました。

グーグルマップで距離感を見るとこんな感じです。Aがブセナテラスで、紫のピンが美ら海水族館で、赤い線が車で走ることになる道です。

ブセナテラスから美ら海水族館までの道のり

美ら海水族館のチケットは、当然現地でも買えるけど、近くのコンビニなんかで買った方が割安で買えます。

美ら海水族館に近くに来るとコンビニなんかで割引チケットを販売しているというのぼりが出ているので、どこかで買って行った方がお得です。

水族館自体は去年も行って2回目なので、そんなに時間かけずに回りました。

何度見てもメインの巨大水槽は大迫力で圧巻でした。大水槽は見る大いに見る価値あると思います。

立っている人と比較すれば水槽がどれだけ大きいか分かっていただけると思います。

美ら海水族館のメインの大水槽

大水槽の中を泳いでいるジンベイザメもど迫力。他の水族館では見られないスケール感です。

美ら海水族館のジンベイザメの画像

期間限定らしいですけど、伝説のモンスターとしてよく出てくるクラーケンのモデルになっていると言われているダイオウイカが展示してありました。

ほんとうに大きかった。かなり下がって撮影したけど、それでもカメラに入りきらないくらいの大きさ。

美ら海水族館に展示されていたダイオウイカ

昼食は、美ら海水族館の中にある「イノー」というレストランで食べました。バイキング形式で値段の割には味もまぁまぁでした。

それよりも、東シナ海を一望できるオーシャンビューが素晴らしかった。真っ青な海の景色を見ながら食べたり飲んだりできるだけで幸せ。京都にはない美しさを感じる事ができました。

美ら海水族館の海が見えるレストランイノー

美ら海水族館の周りには芝生とか子供が遊べる遊具があって、昼食の後はそこで子供達が遊んでました。水族館よりもそっちの方が楽しいみたいでした。

【2013年2月沖縄旅行】記事一覧

  1. 連休中の突然の沖縄旅行。アメックスのプラチナコンシェルジュが超便利。
  2. スカイマークの安全性とサービスの質
  3. 1泊目。那覇空港近くのリーガロイヤルグラン沖縄に宿泊。
  4. 2日目。むら咲むら見学。
  5. ANAインターコンチネンタル万座近くのアラモアで夕食
  6. 二日目。ANAインターコンチネンタル万座に宿泊。
  7. 3日目。ブセナセラスのグラス底ボートに乗る。
  8. 4日目。ブセナテラスのラティーダで朝食
  9. 沖縄旅行記4日目。美ら海水族館の感想。
  10. 沖縄旅行4日目。ブセナテラスの和食レストラン真南風(まはえ)で寿司を食す
  11. 5日目。首里城の観光。
  12. 国際通り、鉄板焼きステーキレストラン「碧」(へき)で昼食

「アルゴリズムを、はじめよう」エラトステネスのふるいをPythonで書く

指定した数までの範囲の素数を一覧で表示させる問題。素数とは、2以上の整数の中で1とその数字自身以外では割り切れない数のこと。

「エラトステネスのふるい」っていうのは、ある数以下の範囲に存在する素数を探したい場合に、その数の平方根より小さい素数の倍数を全て消せば素数が残るという考え方です。

アルゴリズムを、はじめよう

第11章:エラトステネスのふるい(Sieve of Eratosthenes)のアルゴリズム


#!/usr/bin/env python
#-*- coding: utf-8 -*-
import sys, math

def eratosthenes(max):
    max += 1
    array = range(max)
    array[0] = array[1] = 0

    for m in xrange(2, int(math.sqrt(max))):
        for i in xrange(2, max):
            if m * i < max:
                array[m * i] = 0
    primeNumbers(array)

def primeNumbers(array):
    for e in array:
        if not e == 0:
            print e

if __name__ == '__main__':
    eratosthenes(max=100)

いろんな人が書いているのを参考にさせてもらったけど、何となくしっくりこなくて何とか自分で書いた。

かなりごちゃごちゃしてきた。これは改善しないといけない。

2013-03-11

ANAマイレージクラブに入会。3倍ポイント・マイレージを貯める方法

去年から時々飛行機を使う事があるので、ANAマイレージクラブに申し込みました。

高速道路を使うときETCを使うと貯まるマイレージの存在を知らなかって、大損をしていた教訓を活かして、とりあえず申し込みだけでもしておきました。

クレジットカード付きとか、いろいろなカードがあったけど、今回は入会金も年会費も無料のベーシックなANAマイレージクラブカードです。

申し込んでからカードが届くまでに3週間くらい時間がかかると書いてあったけど、実際には11日で届きました

ANAマイレージクラブカードの画像

いろいろ冊子が入っていてポイントの貯め方とか、使い方とかが書いてあって、気になったのが楽天とかベルメゾンの買い物でもANAマイレージが貯まるというANAマイレージモールいうもの。

ANAマイレージクラブ会員のサイトにログインして、そこを経由して楽天とかベルメゾンに行って買い物したら、楽天ポイントが付くだけでなくANAマイレージももらえるらしいのです。200円で1マイルなので還元率は0.5%です。

楽天で定期的にペリエを購入しているので、早速ですが、ANAマイレージモール経由で楽天でペリエを注文してみました。

決済はアメックスのクレジットカードを使うので、このやり方で買い物をすると、通常の買い物に比べて3倍ポイント・マイレージがもらえてお得ですよね。

ペリエ(レモン味)の12本セットを2セット買って合計3,980円の買い物でした。

  • アメックスのポイント:39ポイント(3,980 × 1%)
  • ANAマイレージ:19ポイント(200円=1マイル)
  • 楽天ポイント:37ポイント(送料、消費税抜きの金額に対しての1%)

1回の買い物でこれだけのポイントとマイレージが加算されるということですよね。

実際にマイレージが付与されるのは、2〜3ヶ月後らしいので、本当にマイレージが加算されたら後日報告します。

ANAマイレージモールを経由して楽天で買い物をする流れを簡単に説明します。

1、まずANAのサイトに行ってマイレージ会員専用ページにログインします。

ANAマイレージ会員ログイン

2、ログインした最初の画面の下の方に「ネットショッピングでもマイルが貯まる」というバナーがあります。このバナーは変更される可能性がありますが、とにかくネットショッピングでマイルが貯まるとかANAマイレージモールという事が書いてある部分をクリックします。

ANAマイレージモール

3、利用したいショップを探してクリックする。今回は楽天で買い物をするので、楽天のバナーをクリックしました。

ANAマイレージモールを経由して楽天で買い物をするとマイレージが貯まる

4、「ANAマイレージモールを経由してパートナーショップサイトへ移動します」というのが出てくるので、クリックして移動します。

ANAマイレージモールから楽天に移動する方法

5、それぞれのショップに移動した後は、各ショップの手順どおり買い物をします。

少しめんどくさい手順を踏む必要がありますが、このやり方で買い物をすれば3倍早くマイレージ・ポイントを貯めることができるはずです。

アメックスのポイント、楽天ポイント、ANAマイレージの3つがきちんと付与されれば報告します。

クレジットカードに興味がある人は、クレジットカードキングであなたに最適な1枚を見つける事ができます。

2013-03-08

「アルゴリズムを、はじめよう」単純挿入法(insertion sort)をPythonで書く

5,3,4,1,2と並んでいる数字を単純挿入法(インサーションソート)を使って昇順に並べ替える問題。

アルゴリズムを、はじめよう

第9章:単純挿入法(インサーションソート, insertion sort)のアルゴリズム


#!/usr/bin/env python
#-*- coding: utf-8 -*-

def insertionSort():
    array = [5, 3, 4, 1, 2]
    for i in xrange(1, len(array)):
        while i - 1 >= 0:
            if array[i-1] > array[i]:
                array[i-1], array[i] = array[i], array[i-1]
            i -= 1

    print array
        
if __name__ == '__main__':
    insertionSort()

これで合ってるのかちょっと自信がない。

やっている事がバブルソートのような気もする。

「アルゴリズムを、はじめよう」単純交換法(バブルソート, buble sort)をPythonで書く

5,3,4,1,2と並んでいる数字を単純交換法(バブルソート)を使って昇順に並べ替える問題。

アルゴリズムを、はじめよう

第8章:単純交換法(バブルソート, buble sort)のアルゴリズム


#!/usr/bin/env python
#-*- coding: utf-8 -*-

def bubleSort():
    array = [5, 3, 4, 1, 2]
    k = len(array) - 1
    for i in xrange(k):
        for j in xrange(k, i, -1):
            if array[j-1] > array[j]:
                array[j-1], array[j] = array[j], array[j-1]
    print array

if __name__ == '__main__':
    bubleSort()

Pythonはxrange関数の3つの引数をうまく使ってforループを回すのがポイントだって事が分かって来た。

初めて書くので、この簡単なものがものすごく難しく感じる。

「アルゴリズムを、はじめよう」単純選択法(選択ソート, selection sort)をPythonで書く

前回のハッシュ探索法までが探索のアルゴリズムで、今回からはソートのアルゴリズムに突入です。

12,13,11,14,10と並んでいる数字を選択ソート(selection sort)を使って昇順に並べ替える問題。

アルゴリズムを、はじめよう

第7章:単純選択法(選択ソート, selection sort)のアルゴリズム


#!/usr/bin/env python
#-*- coding: utf-8 -*-

def main():
    array = [12, 13, 11, 14, 10]
    for i in xrange(len(array)):
        min = i
        for j in xrange(i+1, len(array)):
            if array[j] < array[min]:
                min = j
        array[i], array[min] = array[min], array[i]
    print array

if __name__ == '__main__':
    main()

たぶんこれで合っていると思ったけど、これ書くのに3時間くらいかかった。いろんな人が書いているコードを見せてもらって何とかできました。

できてしまえば、何も難しい事はないんだけど、最初自分で考えていた時は、混乱しまくりで久しぶりに知恵熱が出ましたよ。

2段階目のforループの部分をwhileで書いてたり。

変数jがi+1なんだって事に気づけばかなり楽になりました。

こういう基本的なアルゴリズムを何度も何度も書き直して、何も考えずに手が動くようになるまでやります。最低でも10回くらいは必要かな。

それができてから次のステップの本に進みます。

2013-03-07

「アルゴリズムを、はじめよう」ハッシュ探索法をPythonで書く(データ取り出し編)

「アルゴリズムを、はじめよう」をPythonで書く第四弾。ハッシュ探索法のデータを取り出すアルゴリズムです。データの格納編はこちら

アルゴリズムを、はじめよう

第6章:ハッシュ探索法のアルゴリズム(データの取り出し)

12,25,36,20,30,8,42という数字を要素11個の配列に格納する。ハッシュ関数は、ArrayD % 11。

格納した配列から12が入っている場所を探す。


#!/usr/bin/env python
#-*- coding: utf-8 -*-

class Hash:
    def __init__(self):
        self.arrayD = [12, 25, 36, 20, 30, 8, 42]
        self.arrayH = [0] * 11
        self.max = len(self.arrayH)
    def insert(self):
        for d in self.arrayD:
            k = d % 11
            count = 0
            while count < self.max:
                if self.arrayH[k] == 0:
                    self.arrayH[k] = d
                    break
                else:
                    k += 1
                    if k >= self.max - 1:
                        k = 0
                        count += 1
        print self.arrayH
    def search(self, num):
        ans = num % 11
        count = 0
        while count < self.max:
            if self.arrayH[ans] == num:
                print "%d is in the arrayH[%d]." % (num, ans)
                break
            else:
                ans += 1
                if ans >= self.max - 1:
                    ans = 0
                count += 1

if __name__ == '__main__':
    hash = Hash()
    hash.insert()
    hash.search(12)

だんだんごちゃごちゃしてきました。間違いや改善方法など、何でもご意見いただければ嬉しいです。

「アルゴリズムを、はじめよう」ハッシュ探索法をPythonで書く(データ格納編)

「アルゴリズムを、はじめよう」をPythonで書く第三弾。第一弾の線形探索法のアルゴリズムはこちら。第二弾の二分探索法のアルゴリズムはこちら。

アルゴリズムを、はじめよう

第6章:ハッシュ探索法のアルゴリズム(データの格納)

12,25,36,20,30,8,42という数字を要素11個の配列に格納する。ハッシュ関数は、ArrayD % 11。


#!/usr/bin/env python
#-*- coding: utf-8 -*-

def insert():
    arrayD = [12, 25, 36, 20, 30, 8, 42]
    arrayH = [0] * 11
    for d in arrayD:
        k = d % 11
        max = len(arrayH)
        count = 0
        while count < max:
            if arrayH[k] == 0:
                arrayH[k] = d
                break
            else:
                k += 1
                if k >= max - 1:
                    k = 0
                    count += 1
    print arrayH

if __name__ == '__main__':
    insert()

だんだん合っているかどうか自身が無くなってきた。間違いや改善方法など、何でもご意見いただければ嬉しいです。

ちなみに既にデータが入っていて衝突(collision)が起こった場合に別の場所を探す方法をオープンアドレス法と呼び、その中でも1ずつ隣が空いているか探していって、空いている段階で格納する方法を線形走査法と呼ぶらしいです。

オープンアドレス法以外にもチェイン法というのがあるらしいです。

こういう事は「アルゴリズムを、はじめよう」には全く書いてありませんでしたので、この本は本当にアルゴリズムの基本中の基本だけを書いているということでしょう。

ここまでシンプルに基礎だけを書いてあるからこの本は分かりやすいのでしょう。なかなか自分の知っている事で書いた方が分かりやすいし、正確になるという事でも、対象読者のレベルを考えてあえて削るって難しいんですよね。

それがうまくできているのでアルゴリズムの勉強を始める初心者向けの本としては素晴らしいと思います。

4日目。ブセナテラスのラティーダで朝食

朝食はブセナテラス内にあるラ・ティーダで食べました。

バイキングというかブッフェ形式のお店なのですが、海に向かっている壁側が全面にオープンになっていて、最高に気持ちいい開放感があります。綺麗な真っ青な海が眼前に広がっており、そこでいただく朝食は最高です。

南国のリゾート地にやって来たということを実感することができます。

実は、旅に出る前から今回の旅行期間中はずーっと曇りか雨という事が分かっていたし、実際そうだったのですが、なぜか分からないけど、この日の午前中だけは空を覆っていた厚い雲がはるか彼方に消え去って、南国特有の明るい太陽が照らしてくれました。

太陽の光と青い海のコントラストがほんとう美しくて感動しました。

天照大御神様に心の底から感謝です。

ブセナテラスのラ・ティーダのテラス席からのオーシャンビュー

その後、外に出てプールサイドなどをちょっと散歩しました。

沖縄の海が目の前にあるのに、あえてそれを眺めながらプールで泳ぐ事ができるというのが贅沢ですね。ホテル内のプールサイド周辺には滝が流れてたり、川があったりで、特に美しい。この辺りをブラブラ歩くだけでもブセナテラスに来てよかったと思えます。

この時期は、さすがの沖縄もプールの水は抜かれてました。今年は夏に必ずもう一度来ようと思いましたね

今回の沖縄旅行の間で、これだけ太陽が出てきたのはこの時間帯だけだったでした。雲に覆われている沖縄と青空が晴れ渡って太陽が出ている沖縄。同じ場所でも全く見える景色、感じる美しさなど全く異なっていました。

沖縄に行く時はやっぱり天気の良い時を見計らって行きたいですね。

この日はその後に美ら海水族館に行きましたが、その事は次回書きます。

【2013年2月沖縄旅行】記事一覧

  1. 連休中の突然の沖縄旅行。アメックスのプラチナコンシェルジュが超便利。
  2. スカイマークの安全性とサービスの質
  3. 1泊目。那覇空港近くのリーガロイヤルグラン沖縄に宿泊。
  4. 2日目。むら咲むら見学。
  5. ANAインターコンチネンタル万座近くのアラモアで夕食
  6. 二日目。ANAインターコンチネンタル万座に宿泊。
  7. 3日目。ブセナセラスのグラス底ボートに乗る。
  8. 4日目。ブセナテラスのラティーダで朝食
  9. 沖縄旅行記4日目。美ら海水族館の感想。
  10. 沖縄旅行4日目。ブセナテラスの和食レストラン真南風(まはえ)で寿司を食す
  11. 5日目。首里城の観光。
  12. 国際通り、鉄板焼きステーキレストラン「碧」(へき)で昼食

2013-03-06

「アルゴリズムを、はじめよう」二分探索アルゴリズムをPythonで書く

「アルゴリズムを、はじめよう」をPythonで書く第二弾。第一弾の線形探索法のアルゴリズムはこちら

アルゴリズムを、はじめよう

第5章:二分探索法のアルゴリズム

11,13,17,19,23,29,31という数字の中から17という数字をバイナリサーチのアルゴリズムで発見するという問題。


#!/usr/bin/env python
#-*- coding: utf-8 -*-

def main():
    array = [11, 13, 17, 19, 23, 29, 31]
    flag = -1
    head = 0
    tail = len(array) - 1

    userNum = int(raw_input("Enter any number. : "))

    while head <= tail:
        center = (head + tail) / 2
        if array[center] == userNum:
            flag = center
            break
        elif array[center] < userNum:
            head = center + 1
        else:
            tail = center -1
        center = (head + tail) / 2

    if flag == -1:
        print "The number doesn't exitsts."
    else:
        print "The number is in the array[%d]." % flag

if __name__ == '__main__':
    main()

ユーザーが任意の数を入力できるようにしています。

間違いや改善方法など、何でもご意見いただければ嬉しいです。

2013-03-05

「アルゴリズムを、はじめよう」をPythonで書く

アルゴリズムの勉強を一からやるために伊藤静香さんの「アルゴリズムを、はじめよう」を買った。

アルゴリズムを、はじめよう

本の中ではC言語でサンプルが書かれているけど、自分がいつも使っているPythonで書く練習をしてみた。

第4章:線形探索法のアルゴリズム

4,2,3,5,1という数字の中から5という数字をリニアサーチのアルゴリズムで発見するという問題。


#!/usr/bin/env python
#-*- coding: utf-8 -*-

def main():
    list = [4, 2, 3, 5, 1]
    ans = -1

    num = int(raw_input("Input the number."))
    for n, e in enumerate(list):
        if e == num:
            ans = n
            break

    if ans == -1:
        print "The number doesn't exits."
    else:
        print "The number is in the list[%d]." % ans

if __name__ == '__main__':
    main()

間違いや改善方法など、何でもご意見いただければ嬉しいです。

for~elseを使ったスッキリと改良したものはこちら