使用DP的思想:考虑从i到j的最短路径经过K一次和完全不经过K两种情况来讨论:
DP[i][j]=min(dp[i][j],dp[i][k]+dp[k][j])
#include<iostream> #include<cstdlib> #include<cstring> using namespace std; const int maxv=100; const int INF=999999; int weight[maxv][maxv]; int n,m; // n个顶点,编号为1,2,3...n,m条边 void floyd_warshall() { for(int k=1;k<=n;k++){ for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ weight[i][j]=min(weight[i][j],weight[i][k]+weight[k][j]); } } } } int main() { while(cin>>n>>m) { for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ if(i==j)weight[i][j]==0; else weight[i][j]=INF; } } for(int i=0;i<m;i++) { int u,v,cost; cin>>u>>v>>cost; weight[u][v]=cost; } floyd_warshall(); for(int i=1;i<=n;i++) cout<<weight[1][i]<<" "; cout<<endl; } }
给出一组测试实例 DAG:
5 7
1 2 10
1 5 100
1 4 30
2 3 50
3 5 10
4 3 20
4 5 60
其中从顶点1 到其余所有顶点的最短路径为:
0 10 50 30 60
Sqoop实现关系型数据库到hive的数据传输
sh脚本
#!/bin/sh v_columns=NOTE_ID_1,NOTE_NAME_1,NOTE_ID_2,NOTE_NAME_2,NOTE_ID_3,NOTE_NAME_3,NOTE_ID_4,NOTE_NAME_4,NOTE_ID_5,NOTE_NAME_5,NOTE_ID_6,NOTE_NAME_6, TYPE_VALUES,NOTE_NAME sqoop import --append --connect jdbc:oracle:thin:@132.232.19.119:2527:szdw --username ******* --password ******* --target-dir '/home/hadoop/data/etl_bss/view_loc_note_ydyw_hdgb' --m 1 --split-by NOTE_ID_1 --table ETL_BSS.VIEW_LOC_NOTE_YDYW_HDGB --columns ${v_columns} --fields-terminated-by '\t';
hive 建表
CREATE TABLE VIEW_LOC_NOTE_YDYW_HDGB( NOTE_ID_1 INT, NOTE_NAME_1 STRING, NOTE_ID_2 INT, NOTE_NAME_2 STRING, NOTE_ID_3 INT, NOTE_NAME_3 STRING, NOTE_ID_4 INT, NOTE_NAME_4 STRING, NOTE_ID_5 INT, NOTE_NAME_5 STRING, NOTE_ID_6 INT, NOTE_NAME_6 STRING, TYPE_VALUES INT, NOTE_NAME STRING ) COMMENT "THIS IS A VIEW_LOC_NOTE_YDYW_HDGB" ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE;
加载数据
load data inpath '/home/hadoop/data/etl_bss/view_loc_note_ydyw_hdgb' into table VIEW_LOC_NOTE_YDYW_HDGB;
一、Windows下面编译ffmpeg
首先需要解决的问题是:在windows下面编译 ffmpeg, 并让其支持dshow, 本人把ffmpeg编译成功了, 但是编译出来的ffmpeg不支持dshow, 在网上找了有文章介绍如何编译ffmpeg让其支持dhsow, 按照文章说的方法试了N次, 终究没有成功。无奈只有找现成的windows下面的exe了。
在这里找到了可用的ffmpeg.exe, 测试了一下,支持dshow。
下载地址为: http://ffmpeg.zeranoe.com/builds/
请现在适合自己操作系统的下载包, 我的系统是Win7 64Bit的,所以选择的是 http://ffmpeg.zeranoe.com/builds/win64/static/ffmpeg-20130809-git-3b2e99f-win64-static.7z
下载解压到C盘根目录。
二、测试FFMPEG支持dshow的情况
原文出处请参考 :http://ffmpeg.org/trac/ffmpeg/wiki/DirectShow
执行下面的命令 , 即可显示你的系统支持音频捕获设备,视频捕获设备:
c:\> ffmpeg -list_devices true -f dshow -i dummy ffmpeg version N-45279-g6b86dd5... --enable-runtime-cpudetect libavutil 51. 74.100 / 51. 74.100 libavcodec 54. 65.100 / 54. 65.100 libavformat 54. 31.100 / 54. 31.100 libavdevice 54. 3.100 / 54. 3.100 libavfilter 3. 19.102 / 3. 19.102 libswscale 2. 1.101 / 2. 1.101 libswresample 0. 16.100 / 0. 16.100 [dshow @ 03ACF580] DirectShow video devices [dshow @ 03ACF580] "Integrated Camera" [dshow @ 03ACF580] "screen-capture-recorder" [dshow @ 03ACF580] DirectShow audio devices [dshow @ 03ACF580] "Internal Microphone (Conexant 2" [dshow @ 03ACF580] "virtual-audio-capturer" dummy: Immediate exit requested
我们下来使用 视频捕获设备 "Integraged Camera" 保存为MP4文件:
c:\> ffmpeg -f dshow -i video="Integrated Camera" out.mp4
嘿嘿,摄像头灯亮了,文件已经输出到了和 ffmpeg.exe 相同的路径下面。 用VLC播放 out.mp4文件,正常。
用下面的命令可以查看视频捕获设备支持的图片大小等详细信息。
C:\ffmpeg\bin>ffmpeg -f dshow -list_options true -i video="Integrated Camera"
用下面的命令我们可以把视频分辨率存储为1280x720, FPS为15帧/秒, 输出为 out.avi 文件。是不是很方便啊 ?
C:\>ffmpeg -f dshow -s 1280x720 -r 15 -vcodec mjpeg -i video="Integrated Camera" out.avi
三、测试FFMPEG对DSHOW支持的另外一种方法
原文出处 :
http://ffmpeg.org/trac/ffmpeg/wiki/How%20to%20capture%20a%20webcam%20input
用下面的命令我们也可以输出视频捕获设备,只不过不是名字,而是ID的形式。
ffmpeg -y -f vfwcap -i list输出如下 :
libavutil 52. 41.100 / 52. 41.100 libavcodec 55. 24.100 / 55. 24.100 libavformat 55. 13.102 / 55. 13.102 libavdevice 55. 3.100 / 55. 3.100 libavfilter 3. 82.100 / 3. 82.100 libswscale 2. 4.100 / 2. 4.100 libswresample 0. 17.103 / 0. 17.103 libpostproc 52. 3.100 / 52. 3.100 [vfwcap @ 000000000034d940] Driver 0 [vfwcap @ 000000000034d940] Microsoft WDM Image Capture (Win32) [vfwcap @ 000000000034d940] Version: 6.1.7600.16385 list: Input/output error
从上面看出 vfwcap的索引号为0, 用下面的命令即可捕获视频数据。其中 -i 0 就代表使用ID为0的视频采集设备, -r 25代表帧率为25帧/秒
ffmpeg -y -f vfwcap -r 25 -i 0 out.mp4
四、Apple公司的HLS文件切片相关资料
原文出处为 : http://orfika.net/src/mpegts-segmenter/
下面是相关的技术资料的地址 :
MPEG TS segmenter by Chase Douglas source: http://svn.assembla.com/svn/legend/segmenter/ ffmpeg & segmenter LiveStream Howto: http://www.ioncannon.net/programming/452/iphone-http-streaming-with-ffmpeg-and-an-open-source-segmenter/ Apple's LiveStream docs: https://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/StreamingMediaGuide/Introduction/Introduction.html Apple's LiveStream draft at IETF: http://tools.ietf.org/html/draft-pantos-http-live-streaming-07" ffmpeg 0.10.0 release: http://ffmpeg.org/download.html#release_0.10 Cardon McDonal's IOCANNON: http://www.ioncannon.net/Index of /src/mpegts-segmenter/
还附带文件切片源码。
下面的地址也可以下载 切片工具的源码,这个工具可能比较完善一点吧。
https://github.com/johnf/m3u8-segmenter
五、用FFMPEG实现iPhone的HTTP Stream技术步骤
原文出处 :http://www.ioncannon.net/programming/452/iphone-http-streaming-with-ffmpeg-and-an-open-source-segmenter/
The FFMpeg download page 从该地址获取最新版本的ffmpeg
使用下面的命令进行配置,生成Makefile文件,然后make吧。
configure --enable-gpl --enable-nonfree --enable-pthreads --enable-libfaac --enable-libfaad --enable-libmp3lame --enable-libx264
其中最重要的事情是注意 --enable-libx264 这个编译选项。
我们必须让ffmpeg创建 X264编码格式的视频流, iPhone才能播放,有几个步骤需要注意:
- Low – 96 Kbps video, 64 Kbps audio
- Medium – 256 Kbps video, 64 Kbps audio
- High – 800 Kbps video, 64 Kbps audio
建议使用下面的参数进行视频转码:
假如你想知道这些命令参数的更详细的信息,请参考 X264 encoding guide 和 FFMpeg documentation , 上面例子设置的码率为98k, 你可以修改为你想设置的码率。
要更改的参数为 “ -b, -maxrate, -bufsize values ”
Step 3: 下载并编译 segmenter
现在,你已经完成了视频采集的工作,但是还没有完成整个构建HTTP Streaming 的过程。 你需要