Amazon.co.jp ウィジェット
スポンサードリンク

2010年02月06日

nの階乗計算(nは任意)

n の階乗を求めよ(nは任意)

このクイズを見たとき、「ワンライナーで書けるじゃん」と思いました。


>>> import operator
>>> factorial = lambda n: n==0 and 1 or reduce(operator.mul, xrange(1, n+1))
>>> factorial(10)
3628800

でも、階乗は結果が指数関数的に増大します。 int をオーバーフローしたらどうなるのでしょうか。


>>> factorial(100)
933262154439441526816992388562667004907159682643
816214685929638952175999932299156089414639761565
182862536979208272237582511852109168640000000000
00000000000000L

maxint を超えたら自動的に long になるのは良いとしても、 64 bit 長整数型の最大値も 9223372036854775807 のはず。とっくに超えているのにエラーが発生せず、どうやら正しい結果が出ています。上記の値は何型で保存され、オブジェクトサイズはどのくらいなのでしょうか。調べてみます。


>>> for i in xrange(50):
...   r = factorial(i)
...   print i, sys.getsizeof(r), type(r), r
...
0 12 <type 'int'> 1
1 12 <type 'int'> 1
2 12 <type 'int'> 2
3 12 <type 'int'> 6
4 12 <type 'int'> 24
5 12 <type 'int'> 120
6 12 <type 'int'> 720
7 12 <type 'int'> 5040
8 12 <type 'int'> 40320
9 12 <type 'int'> 362880
10 12 <type 'int'> 3628800
11 12 <type 'int'> 39916800
12 12 <type 'int'> 479001600
13 20 <type 'long'> 6227020800
14 20 <type 'long'> 87178291200
15 20 <type 'long'> 1307674368000
16 20 <type 'long'> 20922789888000
17 22 <type 'long'> 355687428096000
18 22 <type 'long'> 6402373705728000
19 22 <type 'long'> 121645100408832000
20 24 <type 'long'> 2432902008176640000
21 24 <type 'long'> 51090942171709440000
22 24 <type 'long'> 1124000727777607680000
23 24 <type 'long'> 25852016738884976640000
24 26 <type 'long'> 620448401733239439360000
25 26 <type 'long'> 15511210043330985984000000
26 26 <type 'long'> 403291461126605635584000000
27 28 <type 'long'> 10888869450418352160768000000
28 28 <type 'long'> 304888344611713860501504000000
29 28 <type 'long'> 8841761993739701954543616000000
30 30 <type 'long'> 265252859812191058636308480000000
31 30 <type 'long'> 8222838654177922817725562880000000
32 30 <type 'long'> 263130836933693530167218012160000000
33 32 <type 'long'> 8683317618811886495518194401280000000
34 32 <type 'long'> 295232799039604140847618609643520000000
35 32 <type 'long'> 10333147966386144929666651337523200000000
36 34 <type 'long'> 371993326789901217467999448150835200000000
37 34 <type 'long'> 13763753091226345046315979581580902400000000
38 34 <type 'long'> 523022617466601111760007224100074291200000000
39 36 <type 'long'> 20397882081197443358640281739902897356800000000
40 36 <type 'long'> 815915283247897734345611269596115894272000000000
41 36 <type 'long'> 33452526613163807108170062053440751665152000000000
42 38 <type 'long'> 1405006117752879898543142606244511569936384000000000
43 38 <type 'long'> 60415263063373835637355132068513997507264512000000000
44 40 <type 'long'> 2658271574788448768043625811014615890319638528000000000
45 40 <type 'long'> 119622220865480194561963161495657715064383733760000000000
46 40 <type 'long'> 5502622159812088949850305428800254892961651752960000000000
47 42 <type 'long'> 258623241511168180642964355153611979969197632389120000000000
48 42 <type 'long'> 12413915592536072670862289047373375038521486354677760000000000
49 42 <type 'long'> 608281864034267560872252163321295376887552831379210240000000000

おお、long 型でありながらサイズが少しずつ増えている!

Python マニュアルを見ると以下のように書かれています。

Plain integers (also just called integers) are implemented using long in C, which gives them at least 32 bits of precision (sys.maxint is always set to the maximum plain integer value for the current platform, the minimum value is -sys.maxint - 1). Long integers have unlimited precision. Floating point numbers are implemented using double in C. All bets on their precision are off unless you happen to know the machine you are working with.

"Long integers have unlimited precision" だなんて素晴らしい気遣い。いくらでも大きな値を扱えるんですね。結局、はじめに示した factorial 関数はそのままで良いようです。

posted by junya at 08:26 | Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2009年12月23日

仕事を一日単位で区切るということ

マルチタスクで仕事が増えてくると、分単位・時間単位で仕事を切り替えることが出
てくる。せめて、日ごとに1つの仕事に集中したいと思うのだが、よく「日ごと」で
も仕事が分断されすぎると気付いた。「日ごと」に仕事を切り替えると、寝ている間
の脳の情報整理の時間を活用できないからである。思いっきり考え抜いたことが、寝
て翌日になると熟成されて、より良い成果を生むことが良くある。これを生かすには、
日をまたいで物事に取り組むことが大切になる。今日は A に集中して、明日は B、
明後日は C、という仕事の割り切り方は、現実には改善の余地がありそうである。
posted by junya at 11:27 | Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする

脳から筋肉への伝達経路である神経を鍛えるということ

体温を上げると健康になる」で言っている「脳から筋肉への神経を整える」という
のは、空手部でずっと練習中に言われていた「目的意識的に」練習することと通ずる。
同じ突き・蹴りであっても、拳頭、虎肢の先まで意識を集中して行うことで、神経が
鍛えられる。代々木公園で行った、樹に突進して直前でよける練習も、神経を鍛える
ものと言えそうだ。さらにこの考えは視力にも通じる。テレビが「見える」というこ
とと獲物を「見る」ということは違う。いかに早く目的のものを見つけ、行動に移る
かという脳の使い方をすることで、視神経、脳が鍛えられる。脳はもともと身体を制
御するために創られたものであるから、頭を頭としてだけ使っていても活性化されな
い。五感基幹での反映を正確・迅速に捉え、それに対する脳の指令を正確・迅速に神
経を介して末端に伝えることをしなくては、脳も神経も身体も硬直化するのみである。
空手部で言われていたように、脚で布団や道着を畳んだり、左手で食事したり、手足
を訳が分からなくなるくらいに独立に激しく動かす運動は、脳も神経も身体も鍛える
ものである。
タグ:空手
posted by junya at 11:26 | Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2009年12月19日

Ubuntu Enterprise Coloud

Ubuntu 9.10 では Ubuntu Enterprise Cloud っていうクラウド環境を構築するオプションがあるんですね。手軽でおもしろそうです。
posted by junya at 00:12 | Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2009年11月28日

ビジネスの基本

深夜の帰り道に歩いていて、ふと気がついた。
ビジネスの基本って、スマップの有名な曲とは逆で、
「一番になること」が本質だ。

組織全体が何の一番(になろうとしている)か認識している企業は強い。

小さなセグメンテーションでもよい、
「なんの一番になろうとしているの?」
この質問に答えられることが第一歩。

自分たちが分かる事業を、やたら広げずに、
愚直に、真面目に
自分たちの頭できちんと考え抜き、
情熱をもって取り組んでいる企業


日本の優秀企業研究」の示唆する企業像は本当に正しいと思う。
posted by junya at 02:17 | Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2009年11月01日

書斎づくり

IKEA で買ってきた本棚や机、キャビネットの配置が終わったので、次は小物の整理等に取りかかっています。

古いノートや書類



思い出深い古いノートや書類を年代ごとに KING GIM の穴あけフォルダに格納する予定。ノートにどうやって2穴を開けるか検討中です。「ライオン事務器」の #50N というパンチが手頃で良さそう。リーズナブルに行くなら「穴あけポンチ」を使う技もあります。

ファブリックパネル



壁を華やかにしようと、IKEA で1点買ったのですが、意外と高い。
発砲スチロールの板にお気に入りの布を貼るという手ごろな方法を見つけたので検討中。

あとは定番通り、百均やホームセンターで収納ケースを買って整理しています。川上ユキさんの本を買って読んでいるのですが、絵も楽しくて面白いです。
posted by junya at 18:00 | Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2009年10月12日

引越三日目

稲城に引っ越して三日目。今日は自転車で近所を探索してきた。

弁天通り:
・郵便局

矢野口駅近く:
・ユニクロ
・多摩川原橋
・多摩川河川敷 → サイクリングロード、野球場
・いなげや
・くろがねや(発見できず・・・)
・銭湯(玉城湯)
・リサイクルショップ

多摩川原橋、調布より:
・東宝調布テニスクラブ
・東宝日曜大工センター

梨園とアメリア稲城しかないのではないかと心配したが、
思ったよりいろいろある。多摩川が思ったより近くて嬉しい。
posted by junya at 21:24 | Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2009年07月12日

EC-CUBE の品質

うちもオープンソース化の検討をしているけれども、
ここまでひどくはない気がする。

EC-CUBEはここが酷い

良くも悪くも、品質よりも見せ方やコンセプトが重要なのか。
posted by junya at 23:33 | Comment(2) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2009年07月05日

経営者に求められる三要素

  • 会社のビジネスを牽引すること
  • 会社の文化を牽引すること
  • トップにしか築けない人脈を作り、活かすこと
経営者には、このすべてが求められると思う。
posted by junya at 23:45 | Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2009年07月03日

こんな経営者と仕事がしたい

ここのところ、相方が早起きして朝ごはんを作ってくれるので快調。

ところで相方と会社の経営について話をしていたのだけど、
「カンブリア宮殿」や「ソロモン流」に出てくる経営者はみな、現場のことをよく見ている。社員がうんざりするほど細かな注意を与えたり、自分たちのサービスに対してとても関心が高い。先陣を切ってビジネスに取り組んでいる。たとえばABCクッキングの横井社長はメニューの撮影にとてもこだわるし、新しい講座の初日に必ず見学へ行く。

日経新聞でも読んだけれども、米国の自動車会社(どこか忘れた)の社長はマーケティングにしか興味がないが、本田宗一郎はモーターや機械に興味があり、工場に出入りする。それが会社の力の源だ。現場に元気を与える。

10年経っても成長し続けるIT企業の社長は技術者だ。Google しかり、マイクロソフトしかり。マイクロソフトではかつて、重要な仕様書にはすべてゲイツのチェックが入っていたという。BillGレビューだ。

マネーの拳」で拳は言っていた。(参考

「“お前を信じてる”なんていう言葉ほど信用できないものはない。
なぜなら、“信じている”という裏側では
“信じているが責任は取らない”と言っている。


これも現場に常に目を光らせている裏返しだと思う。

Joel Spolsky
は言う。

開発者に信頼性のあるコードを書くトレーニングをする代わりに、それができたら金を払うことで、自分の責任を逃れているのだ。だから開発者はみんな自分で見出さなくてはならなくなる。

入門経済学マネジメント法

誰よりも仕事のことを考え、メンバーが働きやすくするためのシステムを考えたり、レビューしたり、常に目を行き届かせてメンバーが働きやすくするのがマネージャの仕事だ。「人々をトレーニングするという自分の責任を賄賂をわたすことで放棄するわけにはいかないのだ」

とにかく、みんなが一丸になって目標に邁進する会社にしたい。
一丸になるということは、経営者も社員もひっくるめて、みんな同じ方向で夢中になんなきゃならない。リーダーが夢中になっていれば、社員も付いてくる。
posted by junya at 00:44 | Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。