排列组合
#
可能出现的情况总数。
排列:是指从给定个数的元素中取出指定个数的元素进行排序。– n个中取m个,需要考虑排序:n!/(n-m)!
组合:是指从给定个数的元素中仅仅取出指定个数的元素,不考虑排序。– n个中取m个,不考虑排序:n!/m!*(n-m)!
例如
#
- 3个球里取1个,有多少种排列呢?根据公式有:
3*2*1/2*1 = 3
,跟直觉一致。组合呢?根据公式有:3*2*1/1*2*1 = 3
.
当取1个的时候,排列和组合是一样的,因为此时m! = 1
.
- 3个球里取2个,排列:
3*2*1/(3-2) = 6
; 组合:3*2*1/2*1*1 = 3
.
此时,排列数比组合数多。
如果用A、B、C分别表示3个球,则排列情况有:AB、AC、BC、BA、CA、CB
;组合情况有:AB、AC、BC
。
- 当n和m都很大时,需要借助计算机来计算:
package main
func factorial(n int) (s int) {
s = 1
for i := 1; i <= n; i++ {
s *= i
}
return
}
func main() {
s := factorial(10) / factorial(10-4)
println("10个取4个的排列", s) // 10个取4个的排列 5040
p := factorial(10) / factorial(10-4) * factorial(4)
println("10个取4个的组合", p) // 10个取4个的组合 120960
}
执行
昨天体验了一会自助购物。
扫码开门、自助购物、扫码出门。
可惜门开的时间稍短,稍不注意又要再扫一次。
因为下着雨,也没注意哪里有胶袋。匆忙买完东西就得赶着送去了。
ffmpeg
#
图片加水印
#
ffmpeg -i C:\Users\Pictures\1.png -vf "drawtext=fontfile=simhei.ttf:fontcolor=blue:fontsize=100:text='EGHI':x=W-tw-100:y=H-th-100:shadowy=2" C:\Users\Pictures\8x.jpg
截图
#
windows: ffmpeg -f gdigrab -s 500x500 -offset_x 100 -offset_y 100 -i desktop -frames:v 1 C:\Users\Pictures\screen.png
录屏
#
windows: ffmpeg -f gdigrab -framerate 20 -i desktop C:\Users\Pictures\out.avi
分割
#
ffmpeg -i C:\Users\Pictures\output.mp4 -f segment -segment_time 60 -segment_format mpegts -segment_list C:\Users\Pictures\video_name.m3u8 -c copy -bsf:v h264_mp4toannexb -map 0 C:\Users\Pictures\course-%04d.ts
将视频每60秒分割为一个ts
文件。其中video_name.m3u8
文件为ts清单,播放器会根据它按序播放ts
文件:
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-ALLOW-CACHE:YES
#EXT-X-TARGETDURATION:63
#EXTINF:62.600000,
course-0000.ts
#EXTINF:1.200000,
course-0001.ts
#EXT-X-ENDLIST
为什么要这样分割呢?主要是为了提高并发。
...