• 全部
  • 解决方案
  • 新手教程
  • 在线工具
  • 视频教程
  • 代码片段

其他开发语言 FWPS_LAYER_ALE_CONNECT_REDIRECT_Vx层是否支持数据流?

我有一个FWPS_LAYER_ALE_CONNECT_REDIRECT_Vx标注,旨在将UDP流量重定向到本地服务。 我在FWPM_LAYER_ALE_FLOW_ESTABLISHED_Vx层注册另一标注,创建一个流上下文和同事这方面,比如 中的以下内容: 状态= FwpsFlowAssociateContext0( &NBSP ;    &N

59 2019-06-17 IT屋

其他开发 在Google Colab上播放视频

我尝试使用以下代码在Google Colab上播放YouTube视频, !pip install pytube==9.1.0 from pytube import YouTube yt = YouTube('https://www.youtube.com/watch?v=-ncJV0tMAjE&t=72s') yt对象的标题是 print(yt.title) >> 作業2 第二題

264 2020-05-20 IT屋

其他开发 Tkinter长列表显示在网格中

我有一个庞大的列表l1,其中包含近1074个应用程序名称 ['10 Best Foods for You' '104 找工作 - 找工作 找打工 找兼職 履歷健檢 履歷診療室' '11st' ... 'Hotwire Hotel & Car Rental App' 'Housing-Real Estate & Property' 'Houzz Interior Design Ideas'

128 2020-06-26 IT屋

其它硬件开发 CUFFT |不能弄清楚一个简单的例子

我一直在努力的整天,试图使一个基本的CUFFT示例工作正常。但我遇到一个小问题,我不能确定。基本上我有一个线性二维数组vx x和y坐标。然后我只是计算一个向前然后向后CUFFT(就地),那么简单。然后我复制回数组vx,通过NX * NY 对其进行标准化,然后显示。 define NX 32 #define NY 32 #define LX(2 * M_PI) #define LY

380 2017-03-04 IT屋

C/C++ 圆形物体的碰撞

我要发展碰击棋盘游戏。我在使用两件的碰撞的问题。如何找到的两片碰撞点。再怎么找角度和距离的出行件后collision.I发现碰撞点的解决方案,在 circle-圆碰撞。这里的解决方案与三角描述,但我想与向量运算解决方案。与覆盖碰撞后的距离的问题也将很容易地解决。 解决方案 您并不需要找到碰撞点碰撞计算本身。为了检测碰撞事件,你只需要比较中心的距离去半径之和 SQRT(SQR(X2-X1)+

161 2015-11-30 IT屋

其他开发语言 如何定义发件人IP地址?

各位大家好, 是否有人知道如何在C#中设置发件人IP地址。 我想将UDP数据包发送到服务器并使用不同的IP地址模拟不同的计算机 。服务器总是期望UDP数据包中有不同的IP 地址。所以我需要设置发件人的可能性 IP。 希望有人知道这个话题。 非常感谢! 问候Marcel 解决方案 嗨, " Marcel Bode" ; < MB *

55 2019-06-05 IT屋

DevOps技术教程 Kubernetes教程

Kubernetes初学者教程 - 从简单和简单的步骤学习Kubernetes,从基本到高级概念,包括概述,体系结构,设置,图像,作业,标签和选择器,命名空间,节点,服务,Pod,复制控制器,副本集,部署,卷,秘密,网络策略,API,Kubectl,Kubectl命令,创建应用程序,应用程序Deplyoment,自动扩展,仪表板设置,监控。

867 2019-06-16 10:08:14 IT屋

大数据教程 大数据分析教程

初学者大数据分析教程 - 从概述,数据生命周期,方法论,核心可交付成果,关键利益相关者,数据分析师,科学家,问题定义,数据收集,清理,总结,探索,简单而简单的步骤学习大数据分析可视化,R简介,SQL简介,图表和图形,数据分析工具,统计方法,数据分析机器学习,朴素贝叶斯分类器,K均值聚类,关联规则,决策树,Logistic回归,时间序列分析,文本分析,在线学习。

732 2019-06-16 09:31:20 IT屋

软件质量管理教程 无线安全教程

初学者无线安全教程 - 从简单和简单的步骤学习无线安全,从基本概念到高级概念,包括无线概念,接入点,无线网络,无线标准,Wi-Fi认证模式,加密,中断加密,访问控制攻击,完整性攻击,机密性攻击,DoS攻击,第1层DoS,第2层DoS,第3层DoS,身份验证攻击,恶意接入点攻击,客户端错误关联,配置错误的接入点攻击,Ad-Hoc连接攻击,黑客攻击方法,流量分析(嗅探),发动无线攻击,破解无线攻击,射频监控工具,蓝牙黑客攻击,蓝牙堆栈,蓝牙威胁,蓝牙黑客工具,受害者蓝盔,无线安全工具,Wi-Fi笔测试,Pentesting未加密WLAN,WEP加密WLAN, Pentesting WPA / WPA2加密WLAN,Pentesting LEAP加密WLAN。

671 2019-06-16 10:29:01 IT屋

大数据教程 CouchDB教程

CouchDB初学者教程 - 从基本到高级概念的简单简单步骤学习CouchDB,包括简介,安装,卷曲和被褥,Http API,创建数据库,删除数据库,创建文档,更新文档,删除文档,附加文件。

99 2019-06-16 09:32:25 IT屋

软件质量管理教程 Ethical Hacking教程

初学者的Ethical Hacking教程 - 从基本到高级概念的简单简单步骤学习道德黑客,包括概述,黑客类型,着名黑客,术语,工具,技能,流程,侦察,足迹,指纹识别,嗅探,工具,ARP ,DNS中毒,剥削,枚举,Metasploit,特洛伊木马攻击,TCP / IP劫持,电子邮件劫持,密码黑客,无线黑客,社会工程,DDOS攻击,跨站点脚本,SQL注入,笔测试。

652 2019-06-16 10:16:56 IT屋

c_cpp ダイクストラ法

ダイクストラ法

readme.md
大学のネットワークか何かの講義の課題でダイクストラ法をお題にしてプログラムとして書いたものです.

ダイクストラ法で山手線の内側にある駅を最短パスで結ぶことになっています.
経路の重みは時間でやっているみたいです.
dijkstra.c
#include <stdio.h>
#include <conio.h>
#define MAX_NODES 1024         /* 最大ノード数 */
#define INFINITY  1000000000   /* 無限大 */

// ノードを設定する。

#define TOKYO					0		/* 東京 */
#define YURAKUCHO				1		/* 有楽町 */ 
#define SHINBASHI				2		/* 新橋 */
#define HAMAMATSUCHO			3		/* 浜松町 */
#define TAMACHI					4		/* 田町 */
#define SHINAGAWA				5		/* 品川 */
#define OSAKI					6		/* 大崎 */
#define GOTANDA					7		/* 五反田 */
#define MEGURO					8		/* 目黒 */
#define EBISU					9		/* 恵比寿 */
#define SHIBUYA					10		/* 渋谷 */
#define HARAJUKU				11		/* 原宿 */
#define YOYOGI					12		/* 代々木 */
#define SHINJUKU				13		/* 新宿 */
#define SHINOKUBO				14		/* 新大久保 */
#define TAKADANOBABA	    	15		/* 高田馬場 */
#define MEJIRO					16		/* 目白 */
#define IKEBUKURO				17		/* 池袋 */
#define OTSUKA					18		/* 大塚 */
#define SUGAMO					19		/* 巣鴨 */
#define KOMAGOME				20		/* 駒込 */
#define TABATA					21		/* 田端 */
#define NISHINIPPORI	    	22		/* 西日暮里 */
#define NIPPORI					23		/* 日暮里 */
#define UGUISUDANI				24		/* 鴬谷 */
#define UENO					25		/* 上野 */
#define OKACHIMACHI				26		/* 御徒町 */
#define AKIHABARA				27		/* 秋葉原 */
#define KANDA					28		/* 神田 */
#define SENDAGAYA               29      /* 千駄ヶ谷 */
#define SHINANOMACHI            30      /* 信濃町 */
#define YOTSUYA                 31      /* 四ツ谷 */
#define ICHIGAYA                32      /* 市ヶ谷 */
#define IDABASHI                33      /* 飯田橋 */ 
#define SUIDOBASHI              34      /* 水道橋 */
#define OCHANOMIZU              35      /* 御茶ノ水 */
#define OMOTESANDO              36      /* 表参道 */
#define GAIENMAE                37      /* 外苑前 */
#define AOYAMAICCHOME           38      /* 青山一丁目 */
#define AKASAKAMITSUKE          39      /* 赤坂見附 */
#define TAMEIKESANNO            40      /* 溜池山王 */
#define TORANOMON               41      /* 虎ノ門 */
#define SUEHIROCHO              42      /* 末広町 */
#define UENOHIROKOJI            43      /* 上野広小路 */
#define MEIJIJINGUMAE           44      /* 明治神宮前 */
#define NOGIZAKA                45      /* 乃木坂 */
#define AKASAKA                 46      /* 赤坂 */
#define KOKKAIGIJIDOMAE         47      /* 国会議事堂前 */
#define KASUMIGASEKI            48      /* 霞が関 */
#define HIBIYA                  49      /* 日比谷 */
#define NIJUBASHIMAE            50      /* 二重橋前 */
#define OTEMACHI                51      /* 大手町 */
#define SHINOCHANOMIZU          52      /* 新御茶ノ水 */
#define YUSHIMA                 53      /* 湯島 */
#define NEZU                    54      /* 根津 */
#define SENDAGI                 55      /* 千駄木 */
#define HIGASHIIKEBUKURO        56      /* 東池袋 */
#define GOKOKUJI                57      /* 護国寺*/
#define EDOGAWABASHI            58      /* 江戸川橋 */
#define KOJIMACHI               59      /* 麹町 */
#define NAGATACHO               60      /* 永田町 */
#define SAKURADAMON             61      /* 桜田門 */
#define SHIROGANEDAI            62      /* 白金台 */
#define SHIROGANETAKANAWA       63      /* 白金高輪 */
#define MITA                    64      /* 三田 */
#define SHIBAKOEN               65      /* 芝公園 */
#define ONARIMON                66      /* 御成門 */
#define UCHISAIWAICHO           67      /* 内幸町 */
#define JINBOCHO                68      /* 神保町 */
#define KASUGA                  69      /* 春日 */
#define HAKUSAN                 70      /* 白山 */
#define SENGOKU                 71      /* 千石 */
#define AZABUJUBAN              72      /* 麻布十番 */
#define ROPPONGIICCHOME         73      /* 六本木一丁目 */
#define KORAKUEN                74      /* 後楽園 */
#define TODAIMAE                75      /* 東大前 */
#define HONKOMAGOME             76      /* 本駒込 */
#define NISHIGAHARA             77      /* 西ヶ原*/
#define OHJI                    78      /* 王子 */
#define SHINOTSUKA              79      /* 新大塚 */
#define MYOGADANI               80      /* 茗荷谷駅 */
#define HONGOSANCHOME           81      /* 本郷三丁目 */
#define AWAJIMACHI              82      /* 淡路町 */
#define YOTSUYASANCHOME         83      /* 四ツ谷三丁目 */
#define SHINJUKUGYOENMAE        84      /* 新宿御苑前 */
#define SHINJUKUSANCHOME        85      /* 新宿三丁目 */
#define HIROO                   86      /* 広尾 */
#define ROPPONGI                87      /* 六本木 */
#define WASEDA                  88      /* 早稲田 */
#define KAGURAZAKA              89      /* 神楽坂 */
#define KUDANSHITA              90      /* 九段下 */
#define TAKEBASHI               91      /* 竹橋 */
#define HANZOMON                92      /* 半蔵門 */
#define TAKANAWADAI             93      /* 高輪台 */
#define SENGAKUJI               94      /* 泉岳寺 */
#define DAIMON                  95      /* 大門 */
#define AKEBONOBASHI            96      /* 曙橋 */
#define OGAWAMACHI              97      /* 小川町 */
#define KOKURITSUKYOGIJO        98      /* 国立競技場 */
#define AKABANEBASHI            99      /* 赤羽橋 */
#define HIGASHISHINJUKU        100      /* 東新宿 */
#define WAKAMATSUKAWADA        101      /* 若松河田 */
#define USHIGOMEYANAGICHO      102      /* 牛込柳町 */
#define USHIGOMEKAGURAZAKA     103      /* 牛込神楽坂 */

int n=104;  /* ノードの数 */
int time[MAX_NODES][MAX_NODES]; /* time[i][j]はiからjへの所要時間を表す */

void shortest_path(int s, int t, int path[])
{
  struct state {
    int predecessor;  /* 前ノード */
    int length;       /* 探索開始点からの重み */
    enum {permanent,tentative} label;  /* 状態ラベル */
  } state[MAX_NODES];

  int i,k,min;

  struct state *p;

  for(p=&state[0]; p<&state[n]; p++){  /* 構造体stateのメンバの初期化 */
    p -> predecessor = -1;
    p -> length = INFINITY;
    p -> label = tentative;
  }

  state[t].length = 0;
  state[t].label  = permanent;
  k = t; /* k は現在の作業中ノード */

  do{
    for(i=0;i<n;i++){
      if(time[k][i] != 0 && state[i].label == tentative){
	if(state[k].length + time[k][i] < state[i].length){
	  state[i].predecessor = k;
	  state[i].length = state[k].length + time[k][i];
	}
      }
    }

    /* 最短のノードを確定する */
    k = 0;
    min = INFINITY;

    for(i=0;i<n;i++){
      if(state[i].label == tentative && state[i].length < min){
	min = state[i].length;
	k=i;
      }
    }

    state[k].label = permanent;

  } while (k!=s);

  /* 途中経路を配列pathにコピーする */
  i=0;
  k=s;
  do{
    path[i++] = k;
    k = state[k].predecessor;
  } while (k>=0);

}

int main(void)
{
  /* 駅間の経路を所要時間で重み付けする。  */

   /* [  0] 東京駅 */
   time[TOKYO][YURAKUCHO]                = 2;
   time[TOKYO][KANDA]                    = 2;
   /* [  1] 有楽町駅 */
   time[YURAKUCHO][TOKYO]                = 2;
   time[YURAKUCHO][SHINBASHI]            = 2;
   time[YURAKUCHO][SAKURADAMON]          = 2;
   /* [  2] 新橋駅 */
   time[SHINBASHI][YURAKUCHO]            = 2;
   time[SHINBASHI][HAMAMATSUCHO]         = 2;
   time[SHINBASHI][TORANOMON]            = 2;
   time[SHINBASHI][DAIMON]               = 2;
   /* [  3] 浜松町駅 */
   time[HAMAMATSUCHO][SHINBASHI]         = 2;
   time[HAMAMATSUCHO][TAMACHI]           = 3;
   /* [  4] 田町駅 */
   time[TAMACHI][HAMAMATSUCHO]           = 2;
   time[TAMACHI][SHINAGAWA]              = 2;
   /* [  5] 品川駅 */
   time[SHINAGAWA][TAMACHI]              = 2;
   time[SHINAGAWA][OSAKI]                = 4;
   /* [  6] 大崎駅 */
   time[OSAKI][SHINAGAWA]                = 4;
   time[OSAKI][GOTANDA]                  = 1;
   /* [  7] 五反田駅 */
   time[GOTANDA][OSAKI]                  = 1;
   time[GOTANDA][MEGURO]                 = 2;
   time[GOTANDA][TAKANAWADAI]            = 2;
   /* [  8] 目黒駅 */
   time[MEGURO][GOTANDA]                 = 2;
   time[MEGURO][EBISU]                   = 3;
   time[MEGURO][SHIROGANEDAI]            = 2;
   /* [  9] 恵比寿駅 */
   time[EBISU][MEGURO]                   = 3;
   time[EBISU][SHIBUYA]                  = 2;
   time[EBISU][HIROO]                    = 3;
   /* [ 10] 渋谷駅 */
   time[SHIBUYA][EBISU]                  = 2;
   time[SHIBUYA][HARAJUKU]               = 2;
   time[SHIBUYA][OMOTESANDO]             = 3;
   /* [ 11] 原宿駅 */
   time[HARAJUKU][SHIBUYA]               = 2;
   time[HARAJUKU][YOYOGI]                = 3;
   /* [ 12] 代々木駅 */
   time[YOYOGI][HARAJUKU]                = 3;
   time[YOYOGI][SHINJUKU]                = 1;
   time[YOYOGI][KOKURITSUKYOGIJO]        = 3;
   /* [ 13] 新宿駅 */
   time[SHINJUKU][YOYOGI]                = 1;
   time[SHINJUKU][SHINOKUBO]             = 2;
   time[SHINJUKU][SHINJUKUSANCHOME]      = 1;
   /* [ 14] 新大久保駅 */
   time[SHINOKUBO][SHINJUKU]             = 2;
   time[SHINOKUBO][TAKADANOBABA]         = 1;
   /* [ 15] 高田馬場駅 */
   time[TAKADANOBABA][SHINOKUBO]         = 1;
   time[TAKADANOBABA][MEJIRO]            = 2;
   time[TAKADANOBABA][WASEDA]            = 4;
   /* [ 16] 目白駅 */
   time[MEJIRO][TAKADANOBABA]            = 2;
   time[MEJIRO][IKEBUKURO]               = 3;
   /* [ 17] 池袋駅 */
   time[IKEBUKURO][MEJIRO]               = 3;
   time[IKEBUKURO][OTSUKA]               = 2;
   time[IKEBUKURO][HIGASHIIKEBUKURO]     = 2;
   time[IKEBUKURO][SHINOTSUKA]           = 4;
   /* [ 18] 大塚駅 */
   time[OTSUKA][IKEBUKURO]               = 2;
   time[OTSUKA][SUGAMO]                  = 2;
   /* [ 19] 巣鴨駅 */
   time[SUGAMO][OTSUKA]                  = 2;
   time[SUGAMO][KOMAGOME]                = 2;
   time[SUGAMO][SENGOKU]                 = 2;
   /* [ 20] 駒込駅 */
   time[KOMAGOME][SUGAMO]                = 2;
   time[KOMAGOME][TABATA]                = 2;
   time[KOMAGOME][HONKOMAGOME]           = 2;
   time[KOMAGOME][NISHIGAHARA]           = 2;
   /* [ 21] 田端駅 */
   time[TABATA][KOMAGOME]                = 2;
   time[TABATA][NISHINIPPORI]            = 2;
   /* [ 22] 西日暮里駅 */
   time[NISHINIPPORI][TABATA]            = 2;
   time[NISHINIPPORI][NIPPORI]           = 2;
   time[NISHINIPPORI][SENDAGI]           = 2;
   /* [ 23] 日暮里駅 */
   time[NIPPORI][NISHINIPPORI]           = 2;
   time[NIPPORI][UGUISUDANI]             = 2;
   /* [ 24] 鴬谷駅 */
   time[UGUISUDANI][NIPPORI]             = 2;
   time[UGUISUDANI][UENO]                = 3;
   /* [ 25] 上野駅 */
   time[UENO][UGUISUDANI]                = 3;
   time[UENO][OKACHIMACHI]               = 2;
   time[UENO][UENOHIROKOJI]              = 2;
   /* [ 26] 御徒町駅 */
   time[OKACHIMACHI][UENO]               = 2;
   time[OKACHIMACHI][AKIHABARA]          = 2;
   /* [ 27] 秋葉原駅 */
   time[AKIHABARA][OKACHIMACHI]          = 2;
   time[AKIHABARA][KANDA]                = 2;
   time[AKIHABARA][OCHANOMIZU]           = 2;
   /* [ 28] 神田駅 */
   time[KANDA][AKIHABARA]                = 2;
   time[KANDA][TOKYO]                    = 2;
   time[KANDA][OCHANOMIZU]               = 2;
   time[KANDA][SUEHIROCHO]               = 2;
   /* [ 29] 千駄ヶ谷駅 */
   time[SENDAGAYA][YOYOGI]               = 1;
   time[SENDAGAYA][SHINANOMACHI]         = 1;
   /* [ 30] 信濃町駅 */
   time[SHINANOMACHI][SENDAGAYA]         = 1;
   time[SHINANOMACHI][YOTSUYA]           = 2;
   /* [ 31] 四ツ谷駅 */
   time[YOTSUYA][SHINANOMACHI]           = 2;
   time[YOTSUYA][ICHIGAYA]               = 2;
   time[YOTSUYA][YOTSUYASANCHOME]        = 2;
   /* [ 32] 市ヶ谷駅 */
   time[ICHIGAYA][YOTSUYA]               = 2;
   time[ICHIGAYA][IDABASHI]              = 2;
   time[ICHIGAYA][KOJIMACHI]             = 2;
   time[ICHIGAYA][AKEBONOBASHI]          = 1;
   /* [ 33] 飯田橋駅 */
   time[IDABASHI][ICHIGAYA]              = 2;
   time[IDABASHI][SUIDOBASHI]            = 2;
   time[IDABASHI][EDOGAWABASHI]          = 3;
   time[IDABASHI][KORAKUEN]              = 2;
   time[IDABASHI][KAGURAZAKA]            = 2;
   time[IDABASHI][KUDANSHITA]            = 2;
   time[IDABASHI][USHIGOMEKAGURAZAKA]    = 3;
   /* [ 34] 水道橋駅 */
   time[SUIDOBASHI][IDABASHI]            = 2;
   time[SUIDOBASHI][OCHANOMIZU]          = 2;
   time[SUIDOBASHI][JINBOCHO]            = 2;
   time[SUIDOBASHI][KASUGA]              = 2;
   /* [ 35] 御茶ノ水駅 */
   time[OCHANOMIZU][SUIDOBASHI]          = 2;
   time[OCHANOMIZU][AKIHABARA]           = 2;
   time[OCHANOMIZU][KANDA]               = 2;
   time[OCHANOMIZU][HONGOSANCHOME]       = 2;
   time[OCHANOMIZU][AWAJIMACHI]          = 2;
   /* [ 36] 表参道駅 */
   time[OMOTESANDO][SHIBUYA]             = 3;
   time[OMOTESANDO][GAIENMAE]            = 1;
   time[OMOTESANDO][MEIJIJINGUMAE]       = 1;
   time[OMOTESANDO][NOGIZAKA]            = 3;
   /* [ 37] 外苑前駅*/
   time[GAIENMAE][OMOTESANDO]            = 1;
   time[GAIENMAE][AOYAMAICCHOME]         = 2;
   /* [ 38] 青山一丁目駅 */
   time[AOYAMAICCHOME][GAIENMAE]         = 2;
   time[AOYAMAICCHOME][AKASAKAMITSUKE]   = 2;
   time[AOYAMAICCHOME][KOKURITSUKYOGIJO] = 2;
   /* [ 39] 赤坂見附駅 */
   time[AKASAKAMITSUKE][AOYAMAICCHOME]   = 2;
   time[AKASAKAMITSUKE][TAMEIKESANNO]    = 2;
   /* [ 40] 溜池山王駅 */
   time[TAMEIKESANNO][AKASAKAMITSUKE]    = 2;
   time[TAMEIKESANNO][TORANOMON]         = 2;
   time[TAMEIKESANNO][ROPPONGIICCHOME]   = 2;
   /* [ 41] 虎ノ門駅 */
   time[TORANOMON][TAMEIKESANNO]         = 2;
   time[TORANOMON][SHINBASHI]            = 2;
   /* [ 42] 末広町*/
   time[SUEHIROCHO][KANDA]               = 2;
   time[SUEHIROCHO][UENOHIROKOJI]        = 1;
   /* [ 43] 上野広小路駅 */
   time[UENOHIROKOJI][SUEHIROCHO]        = 1;
   time[UENOHIROKOJI][UENO]              = 2;
   /* [ 44] 明治神宮前駅 */
   time[MEIJIJINGUMAE][OMOTESANDO]       = 1;
   /* [ 45] 乃木坂駅 */
   time[NOGIZAKA][OMOTESANDO]            = 3;
   time[NOGIZAKA][AKASAKA]               = 2;
   /* [ 46] 赤坂駅 */
   time[AKASAKA][NOGIZAKA]               = 2;
   time[AKASAKA][KOKKAIGIJIDOMAE]        = 1;
   /* [ 47] 国会議事堂前駅 */
   time[KOKKAIGIJIDOMAE][AKASAKA]        = 1;
   time[KOKKAIGIJIDOMAE][KASUMIGASEKI]   = 2;
   /* [ 48] 霞ヶ関駅 */
   time[KASUMIGASEKI][KOKKAIGIJIDOMAE]   = 2;
   time[KASUMIGASEKI][HIBIYA]            = 2;
   /* [ 49] 日比谷駅 */
   time[HIBIYA][KASUMIGASEKI]            = 2;
   time[HIBIYA][NIJUBASHIMAE]            = 2;
   time[HIBIYA][UCHISAIWAICHO]           = 1;
   /* [ 50] 二重橋前 */
   time[NIJUBASHIMAE][HIBIYA]            = 2;
   time[NIJUBASHIMAE][OTEMACHI]          = 1;
   /* [ 51] 大手町駅 */
   time[OTEMACHI][NIJUBASHIMAE]          = 1;
   time[OTEMACHI][SHINOCHANOMIZU]        = 2;
   time[OTEMACHI][JINBOCHO]              = 3;
   time[OTEMACHI][AWAJIMACHI]            = 1;
   time[OTEMACHI][TAKEBASHI]             = 2;
   /* [ 52] 新御茶ノ水駅 */
   time[SHINOCHANOMIZU][OTEMACHI]        = 2;
   time[SHINOCHANOMIZU][YUSHIMA]         = 3;
   /* [ 53] 湯島駅 */
   time[YUSHIMA][SHINOCHANOMIZU]         = 3;
   time[YUSHIMA][NEZU]                   = 2;
   /* [ 54] 根津駅 */
   time[NEZU][YUSHIMA]                   = 2;
   time[NEZU][SENDAGI]                   = 2;
   /* [ 55] 千駄木駅 */
   time[SENDAGI][NEZU]                   = 2;
   time[SENDAGI][NISHINIPPORI]           = 2;
   /* [ 56] 東池袋駅 */
   time[HIGASHIIKEBUKURO][IKEBUKURO]     = 2;
   time[HIGASHIIKEBUKURO][GOKOKUJI]      = 2;
   /* [ 57] 護国寺駅 */
   time[GOKOKUJI][HIGASHIIKEBUKURO]      = 2;
   time[GOKOKUJI][EDOGAWABASHI]          = 3;
   /* [ 58] 江戸川橋駅 */
   time[EDOGAWABASHI][GOKOKUJI]          = 3;
   time[EDOGAWABASHI][IDABASHI]          = 3;
   /* [ 59] 麹町駅 */
   time[KOJIMACHI][ICHIGAYA]             = 2;
   time[KOJIMACHI][NAGATACHO]            = 1;
   /* [ 60] 永田町駅 */
   time[NAGATACHO][KOJIMACHI]            = 1;
   time[NAGATACHO][SAKURADAMON]          = 2;
   time[NAGATACHO][HANZOMON]             = 2;
   /* [ 61] 桜田門駅 */
   time[SAKURADAMON][NAGATACHO]          = 2;
   time[SAKURADAMON][YURAKUCHO]          = 2;
   /* [ 62] 白金台駅 */
   time[SHIROGANEDAI][MEGURO]            = 2;
   time[SHIROGANEDAI][SHIROGANETAKANAWA] = 2;
   /* [ 63] 白金高輪駅 */
   time[SHIROGANETAKANAWA][SHIROGANEDAI] = 2;
   time[SHIROGANETAKANAWA][SHIBAKOEN]    = 2;
   time[SHIROGANETAKANAWA][AZABUJUBAN]   = 3;
   /* [ 64] 芝公園駅 */
   time[SHIBAKOEN][SHIROGANETAKANAWA]    = 2;
   time[SHIBAKOEN][MITA]                 = 2;
   /* [ 65] 三田駅 */
   time[MITA][SHIBAKOEN]                 = 2;
   time[MITA][ONARIMON]                  = 2;
   time[MITA][SENGAKUJI]                 = 2;
   time[MITA][DAIMON]                    = 2;
   /* [ 66] 御成門駅 */
   time[ONARIMON][MITA]                  = 2;
   time[ONARIMON][UCHISAIWAICHO]         = 2;
   /* [ 67] 内幸町駅 */
   time[UCHISAIWAICHO][ONARIMON]         = 2;
   time[UCHISAIWAICHO][HIBIYA]           = 1;
   /* [ 68] 神保町 */
   time[JINBOCHO][OTEMACHI]              = 3;
   time[JINBOCHO][SUIDOBASHI]            = 2;
   time[JINBOCHO][ROPPONGI]              = 3;
   time[JINBOCHO][OGAWAMACHI]            = 5;
   /* [ 69] 春日駅 */
   time[KASUGA][SUIDOBASHI]              = 2;
   time[KASUGA][HAKUSAN]                 = 2;
   /* [ 70] 白山駅*/
   time[HAKUSAN][KASUGA]                 = 2;
   time[HAKUSAN][SENGOKU]                = 2;
   /* [ 71] 千石駅 */
   time[SENGOKU][HAKUSAN]                = 2;
   time[SENGOKU][SUGAMO]                 = 2;
   /* [ 72] 麻布十番駅 */
   time[AZABUJUBAN][SHIROGANETAKANAWA]   = 3;
   time[AZABUJUBAN][ROPPONGIICCHOME]     = 2;
   time[AZABUJUBAN][AKABANEBASHI]        = 2;
   /* [ 73] 六本木一丁目駅 */
   time[ROPPONGIICCHOME][AZABUJUBAN]     = 2;
   time[ROPPONGIICCHOME][TAMEIKESANNO]   = 2;
   /* [ 74] 後楽園駅 */
   time[KORAKUEN][IDABASHI]              = 2;
   time[KORAKUEN][TODAIMAE]              = 3;
   time[KORAKUEN][MYOGADANI]             = 2;
   time[KORAKUEN][HONGOSANCHOME]         = 2;
   /* [ 75] 東大前駅 */
   time[TODAIMAE][KORAKUEN]              = 3;
   time[TODAIMAE][HONKOMAGOME]           = 2;
   /* [ 76] 本駒込駅 */
   time[HONKOMAGOME][TODAIMAE]           = 2;
   time[HONKOMAGOME][KOMAGOME]           = 2;
   /* [ 77] 西ヶ原駅*/
   time[NISHIGAHARA][KOMAGOME]           = 2;
   time[NISHIGAHARA][OHJI]               = 2;
   /* [ 78] 王子駅 */
   time[OHJI][NISHIGAHARA]               = 2;
   /* [ 79] 新大塚駅 */
   time[SHINOTSUKA][IKEBUKURO]           = 4;
   time[SHINOTSUKA][MYOGADANI]           = 2;
   /* [ 80] 茗荷谷駅 */
   time[MYOGADANI][SHINOTSUKA]           = 2;
   time[MYOGADANI][KORAKUEN]             = 2;
   /* [ 81] 本郷三丁目駅 */
   time[HONGOSANCHOME][KORAKUEN]         = 2;
   time[HONGOSANCHOME][SHINOCHANOMIZU]   = 2;
   /* [ 82] 淡路町駅 */
   time[AWAJIMACHI][SHINOCHANOMIZU]      = 2;
   time[AWAJIMACHI][OTEMACHI]            = 1;
   /* [ 83] 四ツ谷三丁目駅 */
   time[YOTSUYASANCHOME][YOTSUYA]           = 2;
   time[YOTSUYASANCHOME][SHINJUKUGYOENMAE]  = 2;
   /* [ 84] 新宿御苑前駅 */
   time[SHINJUKUGYOENMAE][YOTSUYASANCHOME]  = 2;
   time[SHINJUKUGYOENMAE][SHINJUKUSANCHOME] = 2;
   /* [ 85] 新宿三丁目駅 */
   time[SHINJUKUSANCHOME][SHINJUKUGYOENMAE] = 2;
   time[SHINJUKUSANCHOME][SHINJUKU]         = 1;
   time[SHINJUKUSANCHOME][AKEBONOBASHI]     = 2;
   /* [ 86] 広尾駅 */
   time[HIROO][EBISU]                    = 3;
   time[HIROO][ROPPONGI]                 = 3;
   /* [ 87] 六本木駅 */
   time[ROPPONGI][HIROO]                 = 3;
   time[ROPPONGI][JINBOCHO]              = 3;
   /* [ 88] 早稲田駅 */
   time[WASEDA][TAKADANOBABA]            = 4;
   time[WASEDA][KAGURAZAKA]              = 2;
   /* [ 89] 神楽坂駅 */
   time[KAGURAZAKA][WASEDA]              = 2;
   time[KAGURAZAKA][IDABASHI]            = 2;
   /* [ 90] 九段下駅 */
   time[KUDANSHITA][IDABASHI]            = 2;
   time[KUDANSHITA][TAKEBASHI]           = 2;
   time[KUDANSHITA][HANZOMON]            = 3;
   /* [ 91] 竹橋駅 */
   time[TAKEBASHI][KUDANSHITA]           = 2;
   time[TAKEBASHI][OTEMACHI]             = 2;
   /* [ 92] 半蔵門駅 */
   time[HANZOMON][NAGATACHO]             = 2;
   time[HANZOMON][KUDANSHITA]            = 3;
   /* [ 93] 高輪台駅 */
   time[TAKANAWADAI][GOTANDA]            = 2;
   time[TAKANAWADAI][SENGAKUJI]          = 3;
   /* [ 94] 泉岳寺駅 */
   time[SENGAKUJI][TAKANAWADAI]          = 3;
   time[SENGAKUJI][MITA]                 = 2;
   /* [ 95] 大門駅 */
   time[DAIMON][MITA]                    = 2;
   time[DAIMON][SHINBASHI]               = 2;
   time[DAIMON][AKABANEBASHI]            = 3;
   /* [ 96] 曙橋駅 */
   time[AKEBONOBASHI][SHINJUKUSANCHOME]  = 2;
   time[AKEBONOBASHI][ICHIGAYA]          = 1;
   /* [ 97] 小川町駅 */
   time[OGAWAMACHI][JINBOCHO]            = 5;
   /* [ 98] 国立競技場駅 */
   time[KOKURITSUKYOGIJO][YOYOGI]        = 3;
   time[KOKURITSUKYOGIJO][AOYAMAICCHOME] = 2;
   /* [ 99] 赤羽橋駅 */
   time[AKABANEBASHI][AZABUJUBAN]        = 2;
   time[AKABANEBASHI][DAIMON]            = 3;
   /* [100] 東新宿駅 */
   time[HIGASHISHINJUKU][WAKAMATSUKAWADA] = 2;
   /* [101] 若松河田 */
   time[WAKAMATSUKAWADA][HIGASHISHINJUKU]        = 2;
   time[WAKAMATSUKAWADA][USHIGOMEYANAGICHO]      = 2;
   /* [102] 牛込柳町 */
   time[USHIGOMEYANAGICHO][WAKAMATSUKAWADA]      = 2;
   time[USHIGOMEYANAGICHO][USHIGOMEKAGURAZAKA]   = 2;
   /* [103] 牛込神楽坂 */
   time[USHIGOMEKAGURAZAKA][USHIGOMEYANAGICHO]   = 2;
   time[USHIGOMEKAGURAZAKA][IDABASHI]            = 3;
   
   


                            // 駅番号 /  駅名 //
   char station[104][20] = { /*   0 */ "東京",     
							 /*   1 */ "有楽町",    
							 /*   2 */ "新橋",      
						     /*   3 */ "浜松町",    
						     /*   4 */ "田町",
						     /*   5 */ "品川",
						     /*   6 */ "大崎",
						     /*   7 */ "五反田",
						     /*   8 */ "目黒",
						     /*   9 */ "恵比寿",
						     /*  10 */ "渋谷",
						     /*  11 */ "原宿",
						     /*  12 */ "代々木",
						     /*  13 */ "新宿",
						     /*  14 */ "新大久保",
						     /*  15 */ "高田馬場",
						     /*  16 */ "目白",
						     /*  17 */ "池袋",
						     /*  18 */ "大塚",
				  		     /*  19 */ "巣鴨",
						     /*  20 */ "駒込",
						     /*  21 */ "田端",
						     /*  22 */ "西日暮里",
							 /*  23 */ "日暮里",
							 /*  24 */ "鴬谷",
							 /*  25 */ "上野",
							 /*  26 */ "御徒町",
							 /*  27 */ "秋葉原",
							 /*  28 */ "神田",
							 /*  29 */ "千駄ヶ谷",
							 /*  30 */ "信濃町",
							 /*  31 */ "四ツ谷",
							 /*  32 */ "市ヶ谷",
							 /*  33 */ "飯田橋",
							 /*  34 */ "水道橋",
							 /*  35 */ "御茶ノ水",
							 /*  36 */ "表\参道",
							 /*  37 */ "外苑前",
							 /*  38 */ "青山一丁目",
							 /*  39 */ "赤坂見附",
							 /*  40 */ "溜池山王",
							 /*  41 */ "虎ノ門",
							 /*  42 */ "末広町",
							 /*  43 */ "上野広小路",
							 /*  44 */ "明治神宮前",
							 /*  45 */ "乃木坂",
							 /*  46 */ "赤坂",
							 /*  47 */ "国会議事堂前",
							 /*  48 */ "霞が関",
							 /*  49 */ "日比谷",
							 /*  50 */ "二重橋前",
							 /*  51 */ "大手町",
							 /*  52 */ "新御茶ノ水",
							 /*  53 */ "湯島",
							 /*  54 */ "根津",
							 /*  55 */ "千駄木",
							 /*  56 */ "東池袋",
							 /*  57 */ "護国寺",
							 /*  58 */ "江戸川橋",
							 /*  59 */ "麹町",
							 /*  60 */ "永田町",
							 /*  61 */ "桜田門",
							 /*  62 */ "白金台",
							 /*  63 */ "白金高輪",
							 /*  64 */ "三田",
							 /*  65 */ "芝公園",
							 /*  66 */ "御成門",
							 /*  67 */ "内幸町",
							 /*  68 */ "神保町",
							 /*  69 */ "春日",
							 /*  70 */ "白山",
							 /*  71 */ "千石",
							 /*  72 */ "麻布十\番",
							 /*  73 */ "六本木一丁目",
							 /*  74 */ "後楽園",
							 /*  75 */ "東大前",
							 /*  76 */ "本駒込",
							 /*  77 */ "西ヶ原",
							 /*  78 */ "王子",
							 /*  79 */ "新大塚",
							 /*  80 */ "茗荷谷",
							 /*  81 */ "本郷三丁目",
							 /*  82 */ "淡路町",
							 /*  83 */ "四ツ谷三丁目",
							 /*  84 */ "新宿御苑前",
							 /*  85 */ "新宿三丁目",
							 /*  86 */ "広尾",
							 /*  87 */ "六本木",
							 /*  88 */ "早稲田",
							 /*  89 */ "神楽坂",
							 /*  90 */ "九段下",
							 /*  91 */ "竹橋",
							 /*  92 */ "半蔵門",
							 /*  93 */ "高輪台",
							 /*  94 */ "泉岳寺",
							 /*  95 */ "大門",
							 /*  96 */ "曙橋",
							 /*  97 */ "小川町",
							 /*  98 */ "国立競技場",
							 /*  99 */ "赤羽橋",
							 /* 100 */ "東新宿",
							 /* 101 */ "若松河田",
							 /* 102 */ "牛込柳町",
							 /* 103 */ "牛込神楽坂"
   };

   int s_line;    // 出発駅のある路線
   int t_line;    // 到着駅のある路線
   int s;         // 出発駅
   int t;         // 到着駅
   int path[104]; // 途中経路記録用配列
   int i;         // ループ用作業変数
   char a[30];    // 終了表示用

   printf("山手線内部駅間の最短所要時間経路を探索します。\n");
   printf("============================================================================\n");

   printf("[ 0]山手線   [ 1]中央線   [ 2]銀座線   [ 3]千代田線   [ 4]有楽町線\n");
   printf("[ 5]都営三田線 [ 6]南北線   [ 7]丸の内線  [ 8]日比谷線   [ 9]東西線\n");
   printf("[10]半蔵門線  [11]浅草線   [12]新宿線   [13]大江戸線\n");
   printf("----------------------------------------------------------------------------\n");
   printf("出発駅のある路線を選択してください:"); scanf("%d",&s_line);

   putchar('\n');

   switch (s_line) {
     // 山手線
   case 0 : 
     printf("[ 0]東京駅   [ 1]有楽町駅 [ 2]新橋駅   [ 3]浜松町駅 [ 4]田町駅\n");
     printf("[ 5]品川駅   [ 6]大崎駅  [ 7]五反田駅  [ 8]目黒駅  [ 9]恵比寿駅\n");
     printf("[10]渋谷駅   [11]原宿駅  [12]代々木駅  [13]新宿駅  [14]新大久保駅\n");
     printf("[15]高田馬場駅 [16]目白駅  [17]池袋駅   [18]大塚駅  [19]巣鴨駅\n");
     printf("[20]駒込駅   [21]田端駅  [22]西日暮里駅 [23]日暮里駅 [24]鴬谷駅\n");
     printf("[25]上野駅   [26]御徒町駅 [27]秋葉原駅  [28]神田駅\n");

     break;
 
     // 中央線
   case 1 :
     printf("[29]千駄ヶ谷駅 [30]信濃町駅 [31]四ツ谷駅 [32]市ヶ谷駅 [33]飯田橋駅\n");
     printf("[34]水道橋駅  [35]御茶ノ水駅\n");

     break;

     // 銀座線
   case 2 : 
     printf("銀座-浅草は山手線外なので選択できません。\n");
     printf("[10]渋谷駅    [36]表\参道駅 [37]外苑前駅 [38]青山一丁目駅 [39]赤坂見附駅\n");
     printf("[40]溜池山王駅  [41]虎ノ門駅 [ 2]新橋駅  [28]神田駅    [42]末広町駅\n");
     printf("[44]上野広小路駅 [25]上野駅\n");

     break;

     // 千代田線
   case 3 :
     printf("代々木上原-北綾瀬は山手線外なので選択できません。\n");

     printf("[44]明治神宮前 [45]乃木坂駅  [46]赤坂駅  [47]国会議事堂前駅 [48]霞ヶ関駅\n");
     printf("[49]日比谷駅  [50]二重橋前駅 [51]大手町駅 [52]新御茶ノ水駅  [53]湯島駅\n");
     printf("[54]根津駅   [55]千駄木駅\n");

     break;

     // 有楽町線
   case 4 :
     printf("和光市-新木場山手線外の駅なので選択できません。\n");

     printf("[17]池袋駅  [56]東池袋駅 [57]護国寺駅 [58]江戸川橋駅 [59]麹町\n");
     printf("[60]永田町駅 [61]桜田門駅\n");

     break;

     // 三田線
   case 5 :
     printf("西巣鴨-西高島平間は山手線外の駅なので選択できません。\n");

     printf("[ 8]目黒駅  [62]白金台駅 [63]白金高輪駅 [64]三田駅 [65]芝公園駅\n");
     printf("[66]御成門駅 [67]内幸町駅 [68]神保町駅  [69]春日駅 [70]白山駅\n");
     printf("[71]千石駅  [19]巣鴨駅\n");

     break;

     // 南北線
   case 6 :
     printf("王子神谷-赤羽岩淵は山手線外なので選択できません。\n");
     
     printf("[ 8]目黒駅   [62]白金台駅 [63]白金高輪駅 [72]麻布十\番駅 [73]六本木一丁目駅\n");
     printf("[40]溜池山王駅 [60]永田町駅 [31]四ツ谷駅  [32]市ヶ谷駅  [33]飯田橋駅\n");
     printf("[74]後楽園駅  [75]東大前駅 [76]本駒込駅  [20]駒込    [77]西ヶ原駅\n");
     printf("[78]王子駅\n");

     break;

     // 丸ノ内線
   case 7 :
     printf("銀座-方南町は山手線外なので選択できません。\n");

     printf("[17]池袋駅     [79]新大塚駅  [80]茗荷谷駅 [74]後楽園駅    [81]本郷三丁目駅\n");
     printf("[35]御茶ノ水駅   [82]淡路町駅  [51]大手町駅 [ 0]東京駅     [48]霞ヶ関駅\n");
     printf("[47]国会議事堂前駅 [39]赤坂見附駅 [31]四ツ谷駅 [83]四ツ谷三丁目駅 [84]新宿御苑前駅\n");
     printf("[85]新宿三丁目駅  [13]新宿駅\n");

     break;

     // 日比谷線
   case 8 :
     printf("銀座-北千住間は山手線外の駅なので選択できません。\n");
     
     printf("[ 9]恵比寿駅 [86]広尾駅  [87]六本木駅 [68]神保町駅 [48]霞ヶ関駅\n");
     printf("[49]日比谷駅 [27]秋葉原駅 [25]上野駅\n");
  
     break;
     
     // 東西線
   case 9 :
     printf("日本橋-西船橋間は山手線外のため選択できません。\n");

     printf("[15]高田馬場駅 [88]早稲田駅 [89]神楽坂駅 [33]飯田橋駅 [90]九段下駅\n");
     printf("[91]竹橋駅   [51]大手町駅\n");

     break;

     // 半蔵門線
   case 10 :
     printf("三越前-押髪間は山手線外なので選択できません。\n");

     printf("[10]渋谷駅  [36]表\参道駅 [38]青山一丁目駅 [60]永田町駅 [92]半蔵門駅\n");
     printf("[90]九段下駅 [68]神保町駅  [51]大手町駅\n");
     
     break;

     // 浅草線
   case 11 :
     printf("西馬込-戸越間、東銀座-押上間は山手線外なので選択できません。\n");

     printf("[ 7]五反田駅 [93]高輪台駅 [94]泉岳寺駅 [64]三田駅 [95]大門駅\n");
     printf("[ 2]新橋駅\n");

     break;

     // 新宿線
   case 12 :
     printf("岩本町-本八幡間は山手線外なので選択できません。\n");

     printf("[13]新宿駅  [85]新宿三丁目駅 [96]曙橋駅 [32]市ヶ谷駅 [90]九段下駅\n");
     printf("[68]神保町駅 [97]小川町駅\n");
     
     break;

     // 大江戸線
   case 13 :
     printf("汐留-上野御徒町間、新宿西口-光が丘間は山手線外のため選択できません。\n");

     printf("[ 13]新宿駅   [ 12]代々木駅   [ 98]国立競技場駅 [ 38]青山一丁目駅 [ 87]六本木駅\n");
     printf("[ 72]麻布十\番駅 [ 99]赤羽橋駅   [ 95]大門駅    [100]東新宿駅   [101]若松河田駅\n");
     printf("[102]牛込柳町駅 [103]牛込神楽坂駅 [ 33]飯田橋駅   [ 69]春日駅    [ 81]本郷三丁目駅\n");

     break;

   default:
     return 1;

   }

   printf("----------------------------------------------------------------------------\n"); 
   printf("出発駅を選択してください:"); scanf("%d",&s);

   putchar('\n');

   printf("============================================================================\n");

   printf("[ 0]山手線   [ 1]中央線   [ 2]銀座線   [ 3]千代田線   [ 4]有楽町線\n");
   printf("[ 5]都営三田線 [ 6]南北線   [ 7]丸の内線  [ 8]日比谷線   [ 9]東西線\n");
   printf("[10]半蔵門線  [11]浅草線   [12]新宿線   [13]大江戸線\n");
   printf("----------------------------------------------------------------------------\n");
   printf("到着駅のある路線を選択してください:"); scanf("%d",&t_line);

   putchar('\n');

   switch (t_line) {
     // 山手線
   case 0 : 
     printf("[ 0]東京駅   [ 1]有楽町駅 [ 2]新橋駅   [ 3]浜松町駅 [ 4]田町駅\n");
     printf("[ 5]品川駅   [ 6]大崎駅  [ 7]五反田駅  [ 8]目黒駅  [ 9]恵比寿駅\n");
     printf("[10]渋谷駅   [11]原宿駅  [12]代々木駅  [13]新宿駅  [14]新大久保駅\n");
     printf("[15]高田馬場駅 [16]目白駅  [17]池袋駅   [18]大塚駅  [19]巣鴨駅\n");
     printf("[20]駒込駅   [21]田端駅  [22]西日暮里駅 [23]日暮里駅 [24]鴬谷駅\n");
     printf("[25]上野駅   [26]御徒町駅 [27]秋葉原駅  [28]神田駅\n");

     break;
 
     // 中央線
   case 1 :
     printf("[29]千駄ヶ谷駅 [30]信濃町駅 [31]四ツ谷駅 [32]市ヶ谷駅 [33]飯田橋駅\n");
     printf("[34]水道橋駅  [35]御茶ノ水駅\n");

     break;

     // 銀座線
   case 2 : 
     printf("銀座-浅草は山手線外なので選択できません。\n");

     printf("[10]渋谷駅    [36]表\参道駅 [37]外苑前駅 [38]青山一丁目駅 [39]赤坂見附駅\n");
     printf("[40]溜池山王駅  [41]虎ノ門駅 [ 2]新橋駅  [28]神田駅    [42]末広町駅\n");
     printf("[44]上野広小路駅 [25]上野駅\n");

     break;

     // 千代田線
   case 3 :
     printf("代々木上原-北綾瀬は山手線外なので選択できません。\n");

     printf("[44]明治神宮前 [45]乃木坂駅  [46]赤坂駅  [47]国会議事堂前駅 [48]霞ヶ関駅\n");
     printf("[49]日比谷駅  [50]二重橋前駅 [51]大手町駅 [52]新御茶ノ水駅  [53]湯島駅\n");
     printf("[54]根津駅   [55]千駄木駅\n");

     break;

     // 有楽町線
   case 4 :
     printf("和光市-新木場山手線外の駅なので選択できません。\n");

     printf("[17]池袋駅  [56]東池袋駅 [57]護国寺駅 [58]江戸川橋駅 [59]麹町\n");
     printf("[60]永田町駅 [61]桜田門駅\n");

     break;

     // 三田線
   case 5 :
     printf("西巣鴨-西高島平間は山手線外の駅なので選択できません。\n");

     printf("[ 8]目黒駅  [62]白金台駅 [63]白金高輪駅 [64]三田駅 [65]芝公園駅\n");
     printf("[66]御成門駅 [67]内幸町駅 [68]神保町駅  [69]春日駅 [70]白山駅\n");
     printf("[71]千石駅  [19]巣鴨駅\n");

     break;

     // 南北線
   case 6 :
     printf("王子神谷-赤羽岩淵は山手線外なので選択できません。\n");
     
     printf("[ 8]目黒駅   [62]白金台駅 [63]白金高輪駅 [72]麻布十\番駅 [73]六本木一丁目駅\n");
     printf("[40]溜池山王駅 [60]永田町駅 [31]四ツ谷駅  [32]市ヶ谷駅  [33]飯田橋駅\n");
     printf("[74]後楽園駅  [75]東大前駅 [76]本駒込駅  [20]駒込    [77]西ヶ原駅\n");
     printf("[78]王子駅\n");

     break;

     // 丸ノ内線
   case 7 :
     printf("銀座-方南町は山手線外なので選択できません。\n");

     printf("[17]池袋駅     [79]新大塚駅  [80]茗荷谷駅 [74]後楽園駅    [81]本郷三丁目駅\n");
     printf("[35]御茶ノ水駅   [82]淡路町駅  [51]大手町駅 [ 0]東京駅     [48]霞ヶ関駅\n");
     printf("[47]国会議事堂前駅 [39]赤坂見附駅 [31]四ツ谷駅 [83]四ツ谷三丁目駅 [84]新宿御苑前駅");
     printf("[85]新宿三丁目駅  [13]新宿駅");

     break;

     // 日比谷線
   case 8 :
     printf("銀座-北千住間は山手線外の駅なので選択できません。\n");
     
     printf("[ 9]恵比寿駅 [86]広尾駅  [87]六本木駅 [68]神保町駅 [48]霞ヶ関駅\n");
     printf("[49]日比谷駅 [27]秋葉原駅 [25]上野駅\n");
  
     break;
     
     // 東西線
   case 9 :
     printf("日本橋-西船橋間は山手線外のため選択できません。");

     printf("[15]高田馬場駅 [88]早稲田駅 [89]神楽坂駅 [33]飯田橋駅 [90]九段下駅\n");
     printf("[91]竹橋駅   [51]大手町駅\n");

     break;

     // 半蔵門線
   case 10 :
     printf("三越前-押髪間は山手線外なので選択できません。\n");

     printf("[10]渋谷駅  [36]表\参道駅 [38]青山一丁目駅 [60]永田町駅 [92]半蔵門駅\n");
     printf("[90]九段下駅 [68]神保町駅  [51]大手町駅\n");
     
     break;

     // 浅草線
   case 11 :
     printf("西馬込-戸越間、東銀座-押上間は山手線外なので選択できません。\n");

     printf("[ 7]五反田駅 [93]高輪台駅 [94]泉岳寺駅 [64]三田駅 [95]大門駅\n");
     printf("[ 2]新橋駅\n");

     break;

     // 新宿線
   case 12 :
     printf("岩本町-本八幡間は山手線外なので選択できません。\n");

     printf("[13]新宿駅  [85]新宿三丁目駅 [96]曙橋駅 [32]市ヶ谷駅 [90]九段下駅\n");
     printf("[68]神保町駅 [97]小川町駅\n");
     
     break;

     // 大江戸線
   case 13 :
     printf("汐留-上野御徒町間、新宿西口-光が丘間は山手線外のため選択できません。\n");

     printf("[ 13]新宿駅   [ 12]代々木駅   [ 98]国立競技場駅 [ 38]青山一丁目駅 [ 87]六本木駅\n");
     printf("[ 72]麻布十\番駅 [ 99]赤羽橋駅   [ 95]大門駅    [100]東新宿駅   [101]若松河田駅\n");
     printf("[102]牛込柳町駅 [103]牛込神楽坂駅 [ 33]飯田橋駅   [ 69]春日駅    [ 81]本郷三丁目駅\n");

     break;

   default:
     return 1;

   }

   printf("----------------------------------------------------------------------------\n"); 
   printf("到着駅を選択してください:"); scanf("%d",&t);

   if(s==t){
     printf("出発駅と到着駅が同じです。もう一度やり直してください。\n\n");
     strcpy(a, "終了するには何かキーを押してください...\n");
     printf(a);

     if (getch()) return;
   }



     /* 最短経路探索開始 */
     shortest_path(s,t,path);

     putchar('\n');
     printf("============================================================================\n");
     putchar('\n');


     printf("目的地までの最短経路は以下のようになります。\n");
     printf("-----------------------------------------------\n");
     /* 目的地までの途中表示 */
     for(i=0;path[i]!=t;i++){
       printf("%s-->",&station[path[i]][0]);
     }
     
     /* 目的地 */
     printf("%s\n",&station[t][0]);

     printf("\n\n");


     strcpy(a, "終了するには何かキーを押してください...\n");
     printf(a);

     if (getch()) return;

}

text youtube chromecast无法投射

youtube chromecast无法投射

chromecast_issues.txt
由于chromecast是直接找8.8.8.8解析,即使局域网翻墙了,但直接解析会被DNS污染。youtube投射不了,我们要做的就是把chromecast 的udp 53端口数据全部劫持到本地路由器,由本地解析。这样就能在局域网智能翻墙的情况下观看youtube了,本人已经试验成功。
将chromecast所有DNS解析的请求”劫持”到路由器上,从而避免局域网内的主机使用自定义DNS时被污染,

首先路由器要root,能够用ssh登录,登陆后

在/etc/firewall.user上增加两条规则即可:


1
2
iptables -t nat -A PREROUTING -s 192.168.1.1/24 -p udp --dport 53 -j DNAT --to 192.168.1.1
iptables -t nat -A PREROUTING -s 192.168.1.1/24 -p tcp --dport 53 -j DNAT --to 192.168.1.1
192.168.1.1是路由器IP,亲们根据自己的路由器改正。

其实只有第一条就足够了,DNS解析都是UDP。

当然前提是有一个openwrt的路由器。并且装有shadowsocks智能翻墙。

markdown 情报システム特别讲义D#GB37301

情报システム特别讲义D#GB37301

GB37301_a.md
## 10時限目 大規模グラフデータ分析に向けた取り組み - 塩川 浩昭さん(NTT研)

### 目標

* アルゴリズムの観点からのビッグデータへの取り組みを知ってもらう

### グラフデータ

* グラフデータとは

> * ノードとエッジからなるデータ構造

* 大規模グラフ処理

界隈|種類|頂点数
----|----|------
ORなど|交通ネットワーク|全米 :> 2x10^7
Webなど|ソーシャルネットワーク|Twitter :> 2x10^8
生物情報|タンパク質間相互作用など|>10^9
国防|謎|アメリカ国土安全保障省 :> 10^15

クラスタリングについて紹介

### クラスタリング

* 互いに密に接続したノードの部分集合

* グラフクラスタ

> * 互いに密に接続したノードの部分集合
> => ソーシャルグラフのコミュニティ抽出や、交通シミュレーションなどで利用

* Normalized Cut法(2001)

> * クラスタ間のエッジが最小、クラスタ内のエッジが最大になるようにグラフを2分割にする手法
>
>> * 計算量がO(N^3)でめちゃ大きい
>> * クラスタの精度がいまいち
>>

* Modularity

> * ランダムグラフモデルからの乖離具合をクラスタの質として定義
>
>> * ランダムグラフと、クラスタの差を見て比較
>>

* Modularityによるグラフクラスタリング

> * 既存技術では対象とする規模のグラフを処理できない
>
>> * Girvan-Newman法(2004)
>> => グラフから適当にエッジを削除して、その時のModularityを評価
>> => Modularityが最も大きくなったものを結果として出力
>>
>> * Newman法(2004)
>> => 貪欲法によりボトムアップからModularityを向上させる手法
>>
>> * CNM法(2004)
>> => ヒープの導入やヒューリスティクスによるNewman法の高速化
>>
>> Newman法/CNM法はO(N^2)-O(MlogN)
>>
>> * Louvain法(2008)
>> => 以下のパスをModularityが向上するまで繰り返す
>> 0. ノードのローカルクラスタリング
>> 0. クラスタに含まれるノードの一括集約
>>

* 本研究の目標

> * 既存技術と同程度の精度を保ち、もっと大きなデータを処理したい

### クラスタリング高速化

* Louvain法のボトルネック分析

> * 第一パスにおける処理時間の増加
> => 第一パスが、処理時間の99%以上を占めていた
>

* 要因1: データアクセスコストの肥大化

>
> * 全てのエッジをランダムに参照
> => 隣接リスト表現なのでCPUのキャッシュヒット率が著しく低下
>
> 隣接リスト表現をメモリ上において連続した領域に配置する


* グラフのクラスター性

> * グラフのクラスター性に着目
>
>> * 「友達の友達は友達」みたいなケースが多いので計算はしょれる

* Power-Law特性

> * グラフ中のエッジには大きな偏りが存在する
>
>> * みんながみんな、アルファツイッタラーみたいに大多数とつながっているわけでは無い
>>

* ノードの逐次集約による参照効率化

> * グラフのクラスター性を利用
> * 同一クラスタを逐次的に等価な重み付きグラフに変換

* クラスタが自明なノードの枝刈り

> * グラフのPower-Law特性に着目
> * クラスタが自明なノードを逐次的に枝刈り
>
>> * エッジ数が1本のノード
>> * 隣接ノードが1クラスタであるノード

* 低次数順ノード選択

> * グラフのPower-Law特性に着目
> * 低次数順に計算対象ノードを選択

### グラフクラスタリングの並列化

* より高速なクラスタリングを行うためには、並列化などの高速化技術が不可欠

* グラフデータ処理の並列化は難しい

> * データを分割し、分割統治法的に解く
> => データ並列化により高速化はされるが、Cutされたエッジの計算が実行されず、精度の低下が。。。

* 並列化の基本方針

> * 複数の計算リソースに対し、グラフデータ分割は行わない
> * 1CPU上でSIMD命令を用いて、ノード単位でModularityを並列化

GB37301_9.md
https://speakerdeck.com/kuenishi/talk-on-database-ja

## 9時限目 データベースのはなし - 上西 康太さん(Basho Japan)

### 今日覚えてもらうこと

* NoSQLはバズワードであり、定義はない
* いろいろなデータストアとその分類、使い分けのコツ
* 分散システムやデータベース周辺の問題、俯瞰図
* Riakは素晴らしいデータベースである

### データベースに保存するときの要求

* データを正しく書き込むこと、データの更新が中途半端な状態で失敗しないこと
* 書き込んだデータを正しく読みだすこと
* 書き込んだデータを別形式に変換して読みだすこと
* ハードウェア性能の限界まで高速に保存・読み出すこと
* データが消える条件が正確に判明していること

### データベースの歴史

* 1977年 System R (IBM)

> * 関係代数の理論に基づいたデータ操作言語
> * データを永続化するトランザクション処理を実装した世界初のデータベース

* RDBMSの時代

> * ACID特性に基づいたトランザクション管理
> * SQLという統一されたインタフェース
> * スケールアップの時代
>
>> * 1995年のHDD、7.5万円/GB
>>

* 2003年〜 Webの時代

> * ITバブル崩壊後
>
> * Web scale
>
>> * 求められることが変化:構造は簡単でも、量やトラフィック、レスポンス、可用性の要求が多様化
>> * データの単価が安い

* データに対するコスト

> * 預金情報は大切だからコストが高い
> * サイトにアクセスしたログのようなコストは低い
>
>> * 後者のような情報は安いし捨ててもおk
>> * ...だったけど、HDDが安くなってきて保存できるようになった

* Web Scale へのアプローチ

> * 家庭用コンピュータと同じHW
> * LAMP + Memcached
> * Google GFS, BigTable
> * Amazon Dynamo

### スケーリング

* スケーリングの方法

> * 複数台のノードにデータを分散保持して量を稼ぐ
> * 「どのデータがどのサーバにはいってるの?」
>
>> * 階層型ルーティング (HBase, DNS, ...)
>> * **ハッシュ的ルーティング** (Riak, Cassie, Dynamo, ...)

* **ハッシュ的**

> * キーとノードIDをハッシュ化して、同じ名前空間に置く

* Locality vs Load Balancing

> * 先読みを効かせてバルクでシーケンシャルアクセス
>
>> * HBase, BigTable, etc...
>>
> * ハッシュで分散させて負荷分散してランダムアクセス
>
>> * Riak, Cassie, etc...
>>

### 整合性の問題

* 整合性ってなに?

> * 共通するのは、「誰が見ても同じようにみえること」
> * 複数種類のデータ間のInvariantが守られていること
> * 複数のデータのコピーが同じであること
>
> * ReplicationのConsistencyと、ACIDのConsistencyは違うお

* Consistent Replication is Difficult

> * レプリケーションは順番が入れ替わる
> * CPUのアウトオブオーダー実行と同じ

* 分散合意問題

> * 「複製が全て同じである」
> => 全員がひとつの値に合意できている状態
>
> * 怪しい動作をする可能性があるもの:
>
>> * ネットワーク
>>
>>> * 遅延
>>>
>> * 合意する相手
>>
>>> * 相手が死んでるかも
>>>
>> * 制限時間:無限
>>
>>> * 返事が遅いだけ?相手が死んでる?
>>>

* なぜ難しいのか

> * 死活監視が難しい
>
>> * お互いが目隠しして糸電話使ってる状態みたいな
>>

* 故障的困ることの分類

> * 黙って死ぬ
> * 故障したら死ぬ
> * 故障したフリして知らんぷりする
> * メッセージ欠落
> * etc...

* 分散合意の種類

> * アトミックブロードキャストプロトコル
>
>> * おおまかに言って分散合意するためのプロトコルを総称
>>

* Consensus Based Replication

> * レプリケーションのリーダーを多数決で選出
> * or レプリケーションごとに多数決

### 可用性の問題

* CAP定理

> * P: どんな故障に対しても
> * C: データは常に整合しており
> * A: システムがとまることはない
>
>> * この3つを同時に満たすシステムは存在しない
>>
> * C重視のCAP定理
>
>> * n1とn2のレプリカを常に整合しておく
>> * ネットワークが切れたり故障したら止める
>> => 可用性が下がる
>>
> * A重視のCAP定理
>
>> * n1とn2のレプリカを常に使えるようにする
>> * ネットワーウが切れたり故障しても書ける
>> => 整合性が下がる
>>
> * P重視のCAP定理
>
>> * n1とn2のレプリカをエスパーにする
>> * ネットワークが切れたら正しいほうが分かる
>> => 可用性がちょっと下がる
>>

* 「とりあえず書く」という考え

* ACID vs BASE

xxx|ACID|BASE|xxx
---|----|----|---
xxx|xxx|整合していなくても常にデータにアクセスできる|Basically Avaiable
Atomicity|複数の操作の成功・失敗をまとめる|xxx|xxx
Consistency|冗長化されたデータや複数のリレーションが常に整合している|最終的に整合した状態になることが保証されていれば良い|Eventually Consistent
Isolation|並行管理して更新途中の状態を見せない|xxx|xxx
Durability|データを永続化して失わない|xxx|xxx
xxx|xxx|レプリカは決定論的ではなく、確率論的であったり、グローバルに一貫していなくても良い|Soft-state

* CAP定理からみた製品の分類

> * CA重視
>
>> * RDBMS, MongoDB, HBase, etc..
>> * 整合性維持のための分散合意の仕組みが必要
>>
> * AP重視
>
>> * Cassandra, Riak, CouchDB, etc...
>> * 分散合意の仕組みが不要
>> => 実装も運用も簡単
>>

* 新しいデータモデル

> * カラム指向
>
>> * カラムをいくらでも増やすことができる
>> * Query Languageを作る
>> * HBase, Cassandra, etc...
>>
> * ドキュメント指向
>
>> * 個々のレコードが自由な形式を持つ
>> * MapReduceでクエリ
>> * XML, JSON, etc..

xxx|CA重視|AP重視
---|------|------
SQL|RDBMS|xxx
カラム指向|HBase|Cassandra
ドキュメント指向|MongoDB|CouchDB
(blob)|xxx|Riak

GB37301_8.md
http://www.slideshare.net/tagomoris/

## 8時限目 Norikra in Action/Retrospection - 田籠 聡さん(LINE株式会社)

## Retrospection / prospection and schema

http://www.slideshare.net/tagomoris/retrospection-prospection-and-schema

* Software for Logging

> * Collection
> * Storage
> * Processing
> * Stream-Processing
> * Visualization
> * Appliance
> * Services

* How inspect logs

> * Retrospection: 一度格納された過去のデータを見る
> * Prospection: まず、どのデータを見るかを決める
>
>> * Retrospection的なアプローチだと、事前の売上の予測などができない
>>

* What logs inspected

> * Schema-full data
>
>> * strict schema
>> * schema on read
>
> * Schema-less data
>
>> * any fields, any types
>>

* How/What

how/what|Schema-full|Schema-less
--------|-----------|-----------
Retrospect|RDBMS,Hive,BigQuery|MongoDB,TD
Prospect|Esper,CEPs|Norikra,...

* Data size

> * Logs (xxTB - xxPB)
> * Schema
>
>> * size optimization
>> * access optimization on memory/disk
>>
> * Index
>
>> * access optimization on memory/disk
>> * hard to distribute
>>

* Stream processing engines

> * No disks => ディスクは壊れやすいお。。。
>
> * Less memory
>

* Stream processing and schema

> * queryを見て、やってくるデータのスキーマを決定できるのではないか?
> * 自分のフィールド名と、タイプを知っているケースが多い
>
>> * 文字列関数が適用されている
>> * => このフィールドは文字列なんじゃない?
>>

* GOAL

> * Schema-less data stream + schema-full queries
>

使うか使わないかはわからないけど、とりあえず機能を入れておけ!

## Norikra in Action

http://www.slideshare.net/tagomoris/norikra-in-action-ver-2014-spring

```
Norikra internal:
  Jump
    from schema-full world
    to schema-less world.
```

GB37301_7.md
https://dl.dropboxusercontent.com/u/374829/tkb_treasure_data_technologies.pdf

## 7時限目 Treasure Data Technologies - 中川 真宏さん(Treasure Data)

### Treasure Data

### Plazma

* Hadoopをバックエンドにしたシステム

### Fluentd

* ログデータの収集

> * 収集
> * 保存
> * 処理
> * 可視化

* なるべく使いやすい

### Fluentd以前は

* バッチ処理的にログを送っていた

> * 1日毎などだったから、遅延がかなり大きい
> * フォーマットがバラけていて大変

### Lambda Architecture

http://www.drdobbs.com/database/applying-the-big-data-lambda-architectur/240162604

### Fluentd

* syslogdみたいだけど、内部データ形式はJSONぽいかんじ

* Core

> * Divide & Conquer
> * Buffering & Retrying
> * Error handling
> * Message routing
> * Parallelize

* Plugins

> * read/receive data
> * write/send data

* リトライとか再送が難しい

* Apache to Mongo

* Pluggable Architecture

> * Input
> * Engine
> * (Buffer)
> * Output

* Plugin

> * in_tail
> * out_webhdf
> * out_copy
> * out_forward

### Plazma

* システムは疎結合にするべき

* Backend overview

* Used AWS products

> * RDS
> * S3
> * EC2

* PerfectQueue/Sched

* Two storage layer

> * Realtime Storage
> * Archive Storage

* Query Processing flow

* Compile HiveQL

> * SQL Statement

* Multi-tenancy

> * FIFO
> * Fair Scheduler
> * Capacity Scheduler

### MPP Query Engine

* Problem of MapReduce

> * Low Lateny, High Throughput
> * Solutions
>
>> * Direct access MPP : Presto, Impala, etc...
>> * Other Project: Tez, Spark, etc...
>> * With DWH: Netezza, Redshift, etc...
>>

* Why Presto

> * Hard to move the large to DWH

* Presto

> * Open sourced Query Engine by Facebook

### クラウド

* 利点

> * 開発が容易
> * ハードウェアの交換が簡単
> * ミドルウエアも同様

* 欠点

> * 既存のシステムも、分散で動くように設計し直さないといけない
> * システムへガリガリとチューニングすることがむずい

まずAWSで試してから、自分のサービスの特性をわかった上でVPSのようなサーバをまるまる借りる場所に移動する人も

GB37301_6.md
## 6時限目 分散処理基板Hadoop/MapReduce - 小沢 健史さん(NTT研)

### 講義の狙い

* なぜ分散処理を選択するのか、しないのか
* いつMapReduce(Hadoop)を使うべきか

### 処理基盤の目的

* よくやる処理を簡単に作りたい
* 要件を満たす性能を出したい

> * プログラミング言語
>
>> * Ruby, Python, Erlang, Scala, C, etc...
>>
> * ライブラリ
>
>> * Python + scikit/numpy
>>
> * フレームワーク
>
>> * MapReduce(Hadoop), MPI(OpenMPI), etc...
>>
> * RDBMS
>
>> * PostgreSQL, MySQL, Vertica, ...
>>

### なぜこんなに種類があるのか

* 要件がまちまちだから使い分ける必要がある

> * 性能
> * 使いやすさ
> * スケーラビリティ
> * 耐故障性
> * etc...

* この中でも、**スケーラビリティ**に重きをおいているのが分散処理基盤

### スケーラビリティとは

* 問題の規模の拡大・増大に対して対応できるかどうかという指針
* システムにおけるスケーラビリティの指針例

### 分散処理基盤の目的

* 故障が起きても動き続ける
* 処理のスループットを上げる
* 分散処理をしても処理が早くなるとは限らない

> * 余計な通信遅延が発生しないので、1台で十分な処理は1台でおこおなうべき。

### 代表的な分散処理基盤

* MPI (MessagePassingInterface)

> * 主な用途:科学技術計算など
> * CPUインテンシブな処理向け
> * 通信の箇所をメッセージパッシングという形で隠蔽

* 並列DB

> * 主な用途:クエリを低遅延で実行
> * 並列IO
> * インデックス、データ配置


* MapReduce

> * 主な用途:大量のデータの交換を行うための基盤
> * 分散ファイルシステムを前提とした処理機版で、並列IOによりスループットを稼ぐ
> * 故障処理、分散処理、IOをAPIの下に隠蔽
>
>> * MapReduceのプログラムは、常に起動だけで15秒ほどかかる
>> * => ながーいバッチ処理のためのシステムだから、起動にそのくらいかかってもいいよね
>>

### RDBMS/MapReduceの事例

* 使い分けの例

> * MapReduceは、「巨大なデータ」か、「データが増えそうな見込みの処理」に利用
> * RDBMSは、低遅延のジョブでも利用されるが巨大すぎるデータでは利用できず
> * 並列DBは、巨大なデータに対して高速に処理をかけたい時に利用。

### 並列DBの特徴

* Schema on Write

> * スキーマ情報を意識して書き込んでおくことで、問い合わせを高速に処理する

* 利点

> * 問い合わせ時のオーバーヘッドを最小化

* 欠点

> * 設計時にスキーマや処理内容を意識する必要がある
> * データロードに時間が掛かる


### Hadoopの特徴

* Schema on Read

> * 書くとき適当、処理時にスキーママッピング

* 利点

> * スキーマやワークロードの変化に強い
> * ロードを高速に行うことが可能

* 欠点

> * クエリ時のオーバーヘッドが高い

### 実際の適用領域

* Hadoopの計算機の量は、20-1200+ ノード
* データ量は最大で4PB

### 実情から見るHadoopを選択する状況

* 処理しなければならないデータが巨大である場合

> * 例:1日100GBずつデータが増えていく

* データベースに入れる前に、前処理を行いたい場合

> * アーキテクチャ上、無茶してでも走り切る

* スキーマが頻繁に変更される場合

> * アプリケーションからのログ形式の変更が多いなど

* これ以外の場合は、基本的にはRDBMSを選択するほうが無難

> * かえって処理が遅くなる

### MapReduce

* MapReduceが作られた経緯

> * MapReduceはもともとはGoogleの内部システム
>
>> * 今年で10周年
>>
> * 検索エンジンを作るときの構成要素
>
>> * 転置インデックス
>> * 問い合わせに対するスコアリング
>> * いろいろなキーに対するソート
>> * クロールしてきたHTMLからデータを抽出
>> * 集計
>>
>>> * 基本、メモリからはあふれる
>>> * 故障が起きうる
>>>
>> * これらの処理を簡単に作るにはどうすればよいか?
>>

* MapReduceの考え方

> * 前提
>
>> * Rawデータが相手なので事前計算はできない
>> * 計算機故障が頻発しうる
>>
> * 目的
>
>> * 計算機を足せば、データが増えても一定時間で処理できる
>> * 計算途中で計算機が故障してもジョブが動き続ける
>> * ソート、集計などがやりやすい
>>
> * 手段
>> * なるべくデータをローカルから読めるように、分散ファイルシステム上に処理系を構築
>> * 上記の処理を、全て簡易なAPIでラップ
>>

* MapReduceのアーキテクチャ

> * Master-Slave型のアーキテクチャ
>
>> * Masterは、ジョブの状態、FSの状態を管理して指示を出す
>> * Slaveは、Masterの指示に従って処理を実行
>>

* MapReduceの動作フロー

> * ユーザはMap関数とReduce関数をかく
> * Map関数とReduce関数間は、KeyとValueのペアの受け渡し

### Apache Hadoop

* 実装

> * MapReduceのオープンソース実装
> * Hadoop MapReduce、HDFS

* Hadoopのアーキテクチャ

> * Master: JobTracker
>
>> * どのWorkerにどんな仕事をさせるのかの判断
>> * どのマシンが壊れたかを判断
>>
> * Slave: TaskTracker
>
>> * リソースをmap slot/reduce slotという形で管理
>> * Masterから命じられた仕事を実行
>> * 定期的にMasterにハートビートを送信

* HDFSのアーキテクチャ

> * Master: NameNode
>
>> * データの保存要求が来た時に、どのスレーブにどのデータを配置するのかを管理
>> * ディレクトリ構造を管理
>>
> * Slave: DataNode
>
>> * 実際にデータが保存される
>> * ハートビートをMasterに送信

### MapReduceの課題

* MapReduceプログラムに落とすには、分割統治できるプログラムに設計し直さないといけない
* Masterが死ぬととまっちゃう

### 簡単にMapReduceにするための仕組み

* Apache Pig
* Apache Hive

* MapReduceは処理遅延が大きい

> * 原因
>
>> * スケーラビリティを確保するため、ハートビートベースでスケジューリング・リソース割り当てをする
>>
> * 関連技術
>
>> * スケジューリングをイベント駆動で行うようにすると高速化できる(Shark)
>> * Impala/Prestoのような、Dremel実行エンジンのオープンソース実装
>>
> * Masterが落ちたらどうするか
>
>> * 諦める
>
>> * 解決策
>> * NameNodeを冗長化する仕組みが実装された
>>

### 次世代Hadoopについて

* MapReduce

> * Shuffle Plugin
> * JobTracker HA
> * MapReduce itself is at stable phase

* HDFS

> * Cache Management
> * Snapshot
> * Symbolic links

* HARN

> * A new component for Hadoop 2.x

* What is YARN ?

> * Yet Another Resource Negotiator
> * JobTrackerの役割を分割し、ジェネリックに使えるように
>
>> * リソース管理をYARNに押し付けて、SparkやImpalaをYARN上で動かす
>>

* Why YARN?

> * ロングバッチはMapReduceで動かし、インタラクティブクエリはImpala、インタラクティブな機械学習はSparkがいい
>
>> * 使い分けがでてきた
>>
> * リソースの見積が難しくなってしまった、、、
> * YARNにまかせちゃえ
>
>> * YARNのバックエンドはLXC


GB37301_5.md
## 5限目 Googleクラウドが実現する大規模並列クエリサービス - 佐藤 一憲さん(Google)

### Google

* Googleの中のビッグデータ

> * 72時間 => Youtubeに1分間にアップロードされる動画の長さ
> * ...

* DWHやMapReduceだけでは足りない

> * Data Warehousソリューション
>
>> * コストが高い
>> * アドホックなデータ分析に対応しにくい

* 虎の子、Dremel

> * 大規模並列クエリインフラ
>
> * 検索がありえない速さ
>
> * インデックス不要
>

* BigQueryはなぜ速い?

> * 世界最大規模の超並列クエリインフラ
>
> * *カラム志向ストレージ*を採用
>
> * 数万台で並列処理
>
>> * ディスクIOを極限まで並列化
>>
> * 階層構造による高速な集計
>

* MapReduceとBigQueryの得手不得手

> * BigQuery
>
>> * アドホッククエリ
>> * QLAP/BI
>> * レスポンスの速さ
>> * 非技術者
>>
> * MapReduce
>
>> * データマイニング
>> * 複雑なロジック
>> * 非構造データ
>> * 大規模なデータ生成
>> * データの更新
>>

### ビジュアライゼーション

### Spanner

* Googleの地球上で分散しているデータベース

> * かつ、SQLである
> * F1データベース

* 機能

> * リレーショナルモデルとSQLをサポート(No NoSQL)
> * Bigtableみたいにスケーラブル
>

LSM-Tree

> http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.44.2782&rep=rep1&type=pdf

* Data Organization

* TrueTime

* Multi-versioned Database

* Supports Snapshot Read

> * All row has global timestamp by TrueTime

* Megastore

GB37301_4.md
http://www.slideshare.net/myui/ss-30700635

## 4限目 並列データベースシステムの概念と原理 - 油井 誠さん(産総研)

### 趣旨

* 教科書レベルより一歩進んだ話題
* 並列処理の基礎
* データベース処理の並列化
* Map Reduce

### データベース

* 並列データベース

> * データベースの関係処理を高速に

* 分散データベース

> * 各所にデータベースを分散させる

* 並行・並列・分散

### 並列

* なぜデータ並列が重要か

### 計算環境の高性能化のアプローチ

* スケールアップ
* スケールアウト

### 並列計算機のアーキテクチャ

* Shared-nothing (無共有型)

> * Scale-out構成が取れる

* Shared-memory (共有メモリ)

> * Scale-up構成ができるが、スケーラビリティに制限がある

* Shared-disk (共有ディスク)

> * ネットワーク帯域とストレージの性能依存

### データベース処理の並列化

* Intra-query並列化
* Inter-query並列化

### JOIN

* Nested Loop Join
* Hash Join
* Grace Hash Join
* Hybrid Hash Join
* Parallel Grace Hash Join

### MapReduce

* 複雑な分散処理を単純なプログラミングモデルに包んで抽象化

> * 並列ハッシュ結合のSplitと同じことをShuffleでやっている
> * ユーザはMap/Reduce関数を書くだけ

### まとめ

* BigDataに対処するための並列データ処理技術の紹介

* 並列データベースの構成法

> * Shared-{Nothing|Disk|Memory}などのアーキテクチャ
> * 並列ハッシュ結合
> * データ分割

* 多重結合などの並列処理で発生する問題

* MapReduceを利用した関係演算の処理手法

GB37301_3.md
http://www.slideshare.net/starpos

## 3限目 データストレージの諸々 - 星野 喬さん(サイボウズ・ラボ)

### 自己紹介

### サイボウズの紹介

### 10分で分かるデータストレージ

http://www.slideshare.net/starpos/10-30605758

* データストレージの概要

> * データを記録、参照できる装置
>
>> * 電源を切ってもデータが消えない
>>

* 基本的なストレージデバイス

> * HDD
>
> * Flash memory
>

* ストレージの大事なこと

> 0. データを失わない
> 0. 可用性の確保
> 0. 性能
> 0. コスト
> 0. その他

* ブロックデバイス:ストレージの抽象化

> * ブロック単位のIO
>
>> * メインメモリに比べて低速だから (歴史的経緯)
>>
>> * アドレスとサイズを指定してIOする
>>

* ストレージ階層:性能視点

> 0. SRAM as cache
> 0. DRAM as cache
> 0. Cache (flash mem, DRAM)
> 0. SSD/Flash dirve
> 0. HDD
> 0. TAPE ...

* ストレージベンチマークの基本

> * 重要なパラメータ
>
>> * シーケンシャル or ランダム
>>
>> * Read or Write or Mix
>>
>> * IOサイズ
>>
>> * 並列度/キューサイズ
>>

* ストレージ階層:機能視点

> * アプリケーション APP
>
> * データベースシステム DBMS
>
> * ファイルシステム
>
> * バッファキャッシュ層
>
> * ブロックデバイス層
>
> * デバイス
>

* ストレージ関連技術

> * 目的
>
>> * データロスト回避
>> * 可用性向上
>>
> * 手段
>
>> * RAID
>> * etc..
>>

* ストレージ進化の流れ

> * 容量・スループットは徐々に向上するが、レイテンシ改善はブレイクスルーが必要
>
>> * HDD => Flash memoryなど
>>
> * ソフトウェアで様甘な機能や性能向上を実現
>
>> * エンタープライズ向け => コモディティ化 (OSS)
>>

* その他

### 10分で分るブロックレイヤ

http://www.slideshare.net/starpos/10linux

* Linuxブロックレイヤ俯瞰

* IOスケジューラ

> * IOリクエストを並べ替える
>
> * 種類
>
>> * noop
>>
>> * cfq
>>
>> * deadline
>>
> * 生HDDに対しては効果が高い

* ブロックデバイスドライバのインターフェース

> * bio interface
>
>> * 全て自分で面倒を見なければならない
>>
> * rquest-queue interface
>
>> * IOスケジューラの恩恵を受けられる
>>

* Single-queue vs Multi-queue

* IOインタフェース(投げる側)

```C
void generic_make_request(struct bio *bio);
```

> * bioの中身
>
>> * データバッファ
>>
>> * read or write フラグ
>>
>> * その他フラグ
>>

```C
void make_request(struct request_queue *q, struct bio *bio);
```

> * bio interfaceの使用時のコールバック

### 10分で分かるバックアップとレプリケーション

http://www.slideshare.net/starpos/10-30605788

* バックアップ

> * 近過去のデータ複製を保持
>
> * 目的:データロストの回避
>

* バックアップの分類

> * フルバックアップ
>
> * 差分バックアップ
>
> * 増分バックアップ
>

* レプリケーション

> * データを他ノードにオンライン複製
>
> * 目的:可用性向上
>

* レプリケーションの種類

> * Master-slave型
>
> * 平等型
>

* レプリケーションの分類

> * 同期
>
>> * Slaveストレージにも書いてからwriteIO完了
>>
> * 非同期
>
>> * Masterストレージに書いたらwriteIO完了
>>
> * 準動機
>
>> * いろいろな意味で使われている
>>

  |バックアップ|レプリケーション
--------|--------|----------
目的|データロストの回避|可用性の向上
復旧可能な障害の種類|オペレーションミス|機材故障
最新データを復旧可能か|No|Yes(同期)

* 指標

* ソフトウエア階層による分類

* 要素技術:増分データの作り方

> * COW (Copy on write)
> * ThinP (Thin Provisioning)
> * WAL (Write ahead logging)

### WalBの紹介

http://www.slideshare.net/starpos/walb

GB37301_2.md
http://www.uptime.jp/test/snaga/Tsukuba_Jan_30_2014/InsidePostgreSQLKernel.pdf

## 2限目 Inside PostgreSQL Kernel - 永安 悟史さん(アップタイム・テクノロジーズ)

### アジェンダ
* RDBMSとはどのようなテクノロジーなのか
* その中で使われている理論について知る
* PostgreSQLの実装
* 今後のPostgreSQL

### 基本的なアーキテクチャ
* 共有バッファを中心として、複数のプロセス間で連携しながら処理を行うマルチプロセス構造。

### SQL文の処理される流れ
* クエリ受信
* 構文解析
* 書き換え
* 実行計画作成・最適化
* 実行
* 結果送信

### トランザクションにおけるACID特性

> * PostgreSQLのテーブルファイルの中には、複数バージョンのタプルが存在する
>
>> * 複数のトランザクションに上手くデータを「見せる」ため

* Atomicity

> * 各タプル事の可視性情報
> * コミットログによるトランザクションの状態情報

* Consistency

> * いずれにせよコミット完了時には制約に整合していることを保証

* Isolation

> * 実装はXIDとCommandIDによるトランザクションの世代管理
>
> * スナップショットをトランザクションごとに生成
>
>>  * なにが見えて、なにが見えないのかという可視性の管理情報

* Durability

> * チェックポイントによるデータファイルへの更新
>
> * チェックポイント
>
>> * 共有メモリ上のデータをディスクに一括して反映する処理

### メタデータ管理

PostgreSQLの内部でメタデータをどのように扱っているのか

* pg_controlファイル

> * 起動した時に最初に読み込まれるファイル
>
> * 前回の状態のIDなどが保存されていて、クラッシュなどを検知
>
>> * OID オブジェクトID
>>
>> * XID トランザクションID
>>
>> * TID タプルID
>>

* システムカタログ

> * pg_catalogスキーマに保存される

### MVCCとストレージ構造

* テーブルファイル

> * 8kB単位のブロック単位で構成される
>
> * 書くブロックの中に実データのレコード(タプル)を配置
>
>> * 基本的に追記のみ
>>
>> * 削除したら削除マークを付加する(VACUUMで回収)
>>
>> * レコード更新時は「削除+追記」を行う
>>

* インデックス(B-tree)ファイル

> * 8kB単位のブロック単位で構成される

* VACUUM処理

> * 削除マークが付いているレコードを空き領域にする

* インデックスとタプルの可視性

> * PostgreSQLでは、可視性情報をレコードタプルにもつ
>
>> * インデックスエントリは、可視性情報を持たない
>>

* インデックスとタプルの可視性

> * PostgreSQLでは、可視可視性情報をレコードタレコードタプルにもつ
>
>> * インデックスエントリは、可視性情報を持可視性情報を持たない
>>

* TOASTテーブル

> * The Oversized_Attribute Storage Technique
>
> * 長い値(2kB以上)を、通常のテーブルのブロックではなく、専用の外部テーブルに持たせる機能

* Freespace Map

> * 各ページの空き領域情報を管理するためのファイル
>
>> * タプルを格納する空き領域のあるページを見つける
>>
> * 各テーブル・インデックスファイルごとに存在
>

> * 各ページの空き領空き領域情報を管理するためのファイル
>
>> * タプルを格納する空き領域のあるペあるページを見つける
>>
> * 各テーブル・インデックスファイルごとに存在
>

* Visibility Map

> * 各ブロックのレコードの可視状態を保持するファイル
>
>> * 削除された行があるかどうか、をビットマップで保持
>>
>> * そのブロックをVACUUMする必要があるかどうかの判断
>>
> * ビットが立っていると、ブロック内の全タプルが全トランザクションに可視
>

### メモリ管理

* 共有メモリ

> * 複数のバックエンドで共有されるデータを保持する
>
> *セッションをまたいで共有すべきデータ
>

* ローカルヒープ

> * 個別のセッションで使用するメモリ
>
> * ソート、演算処理などを実行するときに使用するメモリスペース
>

* Memory Context

> * フラットなメモリ空間に構造を導入する
>
>> * メモリコンテキスト単位で確保。破棄する => メモリリーク防止
>>
>> * メモリのセグメンテーションを防止する
>>

* 共有バッファと管理アルゴリズム

> * 共有バッファは、ディスク上のブロックをキャッシュする共有メモリ領域
>
>> * ディスク上のブロックの内、アクセスするものだけを読み込む
>>
>> * ディスクIOを抑えて、読み書きを高速化
>>
> * 全てのブロックはバッファに載り切らないので、入れ替わりが発生する
>
>> * 「どのバッファを捨てるか、どのバッファをキープするか」が性能に影響
>>

### ロック制御

* ロック

> * 並行して処理を行っているRDBMSでは、データの整合性のためにリソースに対する排他制御が必須
>
> * ロックには、ロックレベルと粒度の概念がある
>

* 2-Phase Locking (2PL)

> * ロックの獲得期、解放期の2フェーズに分類して管理
>
>> * ロックの獲得、解放を繰り返すとデッドロックを起こしやすくなるため
>>

* デッドロックの検出と解消

> * デッドロック
>
>> * 複数のリソースのロックを獲得しようとする複数のセッション
>>
>
> * Heavyweight Lock
>
> * Lightweight Lock
>
> * Spinlock
>

### パース、リライト、オプティマイズ

* オプティマイザ統計情報

> * 非Nullの値の最頻値とその割合
>
> * カラムの値のヒストグラム
>
> * 物理的な並びと論理的な並びの相関関数
>

* 実行コストの計算

> * 実行コストは、ディスクIOコストとCPUコストで構成される
>

* GEQO(遺伝的問い合わせ最適化)

> * 結合するテーブルが増えると、組み合わせのパt−庵が増加する
>
> * 結合処理を行うテーブルが多くなった場合、PostgreSQLではGEQOというオプティマイザが実行
>
> * 遺伝的アルゴリズムを用いた最適化処理
>

### エグゼキュータ

* 結合処理

* Nested Loop Join

* Merge Join

* Hash Join

* インデックスの種類

> * B-Treeインデックス
>
> * Hashインデックス
>
> * GiSTインデックス
>
> * GINインデックス
>

* インデックスのアクセスメソッド

### PostgreSQLの拡張

* 拡張する方法

> * UDF(ユーザ定義関数)
>
> * インデックス拡張
>
> * Hook
>
> * カスタムバックグラウンドライタ
>
> * EXTENSION
>

* Hookによる拡張

> * PostgreSQLは動的にモジュールをロード可能
>
> * 内部には、関数ポインタを用いたHookが多数存在する

* GiSTによるインデックスの拡張

> * 汎用検索ツリー(GiST: Generalized Search Tree)
>
> * 7つのメソッドを実装することによって新しいインデックスを実装できる
>
>> * same, consistent, union, penalty, picksplit, compress, decompress
>>

GB37301_1.md
## 1限目 イントロ - 川島先生(筑波大学)

### BigDataとか

### 講師の方の紹介

### 課題:面白かった講義トップ3の感想・質問
* ただし川島先生の講義は除く。
* 講義ごとに1ページ程度、合計で3ページ程度。

### 概要
* NoSQLはSQLとは別の使い方をしていた。
* GoogleはOracleDBを使っていたが、データが載りきらなかったのでBigTableを作った。
* Relational DBMS

> * Query processing
> * Transaction processing

### DBMS
* 問い合わせ言語SQLは標準化されているから、どのようなDBMSシステムでも同じようにデータを扱うことができる。

> * SELECT * FROM xxxx;
> * SELECT COUNT(*) FROM xxxx WHERE yyyy='zzzz';

### SQLは機械にどう解釈される?
* 最適化することができる。

> * Query Parser
> * Query Optimizer
> * Query Plan Evaluator

### Transaction
* Transactionの性質 ACID

> * Atomicity
> * Consistency
> * Isolation
> * Durability

* Transactionが無いと、不具合が出た時に整合性を保てない。

### Keeping Isolation
* 2 Phase Lock(成長相と縮退相)

> * 2PLよりもStrict 2PLのほうが遅い→なぜ?

>> * ロックを持っているため、パフォーマンスが若干劣ってしまう。

### NoSQL
* Not only SQL
* NoSQLは、SQLほど高機能ではないが、パフォーマンスが良い。
* なぜNoSQL?

> * データがでかすぎて、SQLで処理しきれない。

* Riak, DynamoDB, PNUTSなど

### New SQL

* VoltDB

> * ロックを掛けないとパフォーマンス上がるんじゃね?

* Dremel @Google

* F1 @Google

### テーブルの格納情報
* テーブルの情報は2次元→1次元に変換して格納
* 横?縦?

> * NSM N-ary Storage Model
>
>> * PostgreSQLなど
>
> * DSM Decomposed Storage Model
>
>> * 総和などに強い

### まとめ
* Transaction
* ACID
* NoSQL

GB37301.md
# 情報システム特別講義D

* 1時限目 イントロ - 川島先生(筑波大学)

* 2時限目 Inside PostgreSQL Kernel - 永安 悟史さん(アップタイム・テクノロジーズ)

* 3時限目 データストレージの諸々 - 星野 喬さん(サイボウズ・ラボ)

* 4時限目 並列データベースシステムの概念と原理 - 油井 誠さん(産総研)

* 5時限目 Googleクラウドが実現する大規模並列クエリサービス - 佐藤 一憲さん(Google)

* 6時限目 分散処理基板Hadoop/MapReduce - 小沢 健史さん(NTT研)

* 7時限目 Treasure Data Technologies - 中川 真宏さん(Treasure Data)

* 8時限目 Retrospection/Prospection / Norikra in Action - 田籠 聡さん(LINE株式会社)

* 9時限目 データベースのはなし - 上西 康太さん(Basho Japan)

* 10時限目 大規模グラフデータ分析に向けた取り組み - 塩川 浩昭さん(NTT研)

text TOPIX100の铭柄リスト(TSV)

TOPIX100の铭柄リスト(TSV)

TOPIX100_list.tsv
stock_code	name
1605	国際石油開発帝石
1878	大東建託
1925	大和ハウス工業
1928	積水ハウス
1963	日揮
2502	アサヒグループホールディングス
2503	キリンホールディングス
2802	味の素
2914	日本たばこ産業
3382	セブン&アイ・ホールディングス
3402	東レ
3407	旭化成
4063	信越化学工業
4188	三菱ケミカルホールディングス
4452	花王
4502	武田薬品工業
4503	アステラス製薬
4523	エーザイ
4568	第一三共
4578	大塚ホールディングス
4661	オリエンタルランド
4755	楽天
4901	富士フイルムホールディングス
4911	資生堂
5020	JXホールディングス
5108	ブリヂストン
5401	新日鐵住金
5411	ジェイ エフ イー ホールディングス
5713	住友金属鉱山
5802	住友電気工業
6273	SMC
6301	小松製作所
6326	クボタ
6367	ダイキン工業
6501	日立製作所
6502	東芝
6503	三菱電機
6594	日本電産
6702	富士通
6752	パナソニック
6758	ソニー
6861	キーエンス
6902	デンソー
6954	ファナック
6971	京セラ
6981	村田製作所
6988	日東電工
7011	三菱重工業
7201	日産自動車
7202	いすゞ自動車
7203	トヨタ自動車
7261	マツダ
7267	本田技研工業
7269	スズキ
7270	富士重工業
7741	HOYA
7751	キヤノン
7752	リコー
7912	大日本印刷
7974	任天堂
8001	伊藤忠商事
8002	丸紅
8031	三井物産
8035	東京エレクトロン
8053	住友商事
8058	三菱商事
8113	ユニ・チャーム
8267	イオン
8306	三菱UFJフィナンシャル・グループ
8308	りそなホールディングス
8309	三井住友トラスト・ホールディングス
8316	三井住友フィナンシャルグループ
8332	横浜銀行
8411	みずほフィナンシャルグループ
8591	オリックス
8601	大和証券グループ本社
8604	野村ホールディングス
8630	損保ジャパン日本興亜ホールディングス
8725	MS&ADインシュアランスグループホールディングス
8750	第一生命保険
8766	東京海上ホールディングス
8795	T&Dホールディングス
8801	三井不動産
8802	三菱地所
8830	住友不動産
9020	東日本旅客鉄道
9021	西日本旅客鉄道
9022	東海旅客鉄道
9064	ヤマトホールディングス
9202	ANAホールディングス
9432	日本電信電話
9433	KDDI
9437	NTTドコモ
9502	中部電力
9503	関西電力
9531	東京瓦斯
9532	大阪瓦斯
9735	セコム
9983	ファーストリテイリング
9984	ソフトバンク

markdown Hearthstone API示例(繁体中文zh-TW) - http://github.com/jamsyoung/hearthstone-api

Hearthstone API示例(繁体中文zh-TW) - http://github.com/jamsyoung/hearthstone-api

Hearthstone-API-Example-zh-TW.md
```shell
$ curl -sS "https://api-2445581159321.apicast.io:443/rest/api/latest/zhTW/card/id/PRO_001?user_key=[YOUR_API_KEY]" | jq '.'
[
  {
    "_id": "550610beb00293a937619210",
    "version": 2,
    "CardID": "PRO_001",
    "__v": 0,
    "Tag": {
      "CardName": "精英牛頭大佬",
      "CardSet": 11,
      "Rarity": 5,
      "CardType": 4,
      "Cost": 5,
      "Atk": 5,
      "Health": 5,
      "CardTextInHand": "<b>戰吼:</b>賦予雙方玩家搖滾的能力!(一張強力和弦卡)",
      "HowToGetThisGoldCard": "參加BlizzCon 2013的獎勵",
      "EnchantmentBirthVisual": 0,
      "EnchantmentIdleVisual": 0,
      "Collectible": true,
      "ArtistName": "Samwise Didier",
      "Elite": true,
      "FlavorText": "他正在找鼓手。目前應徵的人有:見習工程師、森金禦盾大師和『炎魔』拉格納羅斯。",
      "Battlecry": true
    }
  }
]
```

csharp 预测试问题3

预测试问题3

answer3.cs
using System;

namespace Question3
{
    public class Class1
    {
        //要檢查的最大Fibonacci的N, 題目為60
        private static int MAXNOFFIBONACCI = 60;

        public int[] nextFibonacci(int[] numArray)
        {
            int lengthOfNumArray = numArray.Length;
            int[] result = new int[lengthOfNumArray];
            //用個陣列紀錄已算過的數,避免重算
            int[] fibonacciArray = new int[MAXNOFFIBONACCI];
            fibonacciArray[index(1)] = 1;
            fibonacciArray[index(2)] = 1;

            for (int i = 0; i < lengthOfNumArray; i++)
            {
                for (int j = index(2); j < MAXNOFFIBONACCI; j++)
                {
                    //沒有算過計算之後塞進陣列中
                    if (fibonacciArray[j] == 0) fibonacciArray[j] = fibonacciArray[j - 1] + fibonacciArray[j - 2];
                    //目前的Fibonacci小於目標數的話要繼續找
                    if (fibonacciArray[j] <= numArray[i]) continue;
                    //大於的話塞到result中
                    result[i] = fibonacciArray[j];
                    break;
                }
            }

            return result;
        }

        private int index(int n)
        {
            return n - 1;
        }
    }
}