starwing 最近的时间轴更新
starwing

starwing

V2EX 第 63538 号会员,加入于 2014-05-25 13:08:04 +08:00
starwing 最近回复了
78 天前
回复了 abc0def 创建的主题 程序员 从 n 个数里面随机取 m 个数
@Knuth 这个算法很优秀,但它是 O(n)级别的,如果 n 很大但是 m 很小会很慢。我以前搞出一个“模拟打乱算法”是 O(m)级别的,原理是模仿打乱算法,但是不真的做一个 O(n)的数组出来,而是用 hash 表代替“已经打乱过的区域”,只需要 O(m)的空间即可。在 m 很小但是 n 很大的时候会比较优,下面是 Go 的实现:

```golang
// SampleFilter 随机采样[0-N)中的 m 个,排除 f 返回 false 的元素.
func SampleFilter(n uint32, m uint32, f func(uint32) bool) []uint32 {
if n == 0 || m == 0 {
return nil
}
// 如果采样结果比长度还多,就直接顺序返回全部值
if m >= n {
indexes := make([]uint32, 0, n)
for i := uint32(0); i < n; i++ {
if f(i) {
indexes = append(indexes, i)
}
}
return indexes
}
// 否则,做一个虚拟索引映射表(表里不存在的就是原索引),走洗牌算法
indexMap := make(map[uint32]uint32, m)
indexes := make([]uint32, 0, m)
for i := uint32(0); i < n; i++ {
if uint32(len(indexes)) >= m {
return indexes
}
// 先获取一个随机索引的映射
ri := RangeRand(i, n-1)
mappedIdx, ok := indexMap[ri]
if !ok {
mappedIdx = ri
}
// 如果满足要求,就加入到结果中
if f(mappedIdx) {
indexes = append(indexes, mappedIdx)
}
// 在随机位置填入当前位置映射后的索引
indexMap[ri], ok = indexMap[i]
if !ok {
indexMap[ri] = i
}
}
return indexes
}

```
169 天前
回复了 starwing 创建的主题 OpenWrt openwrt 怎么连上 H3C 的 ac?
@DataPipe 不能的吧?要访问 123.1 的,如果 openwrt 也改到 123 了,那路由器的 IP 和 AC 的 IP 不就一样了嘛……
169 天前
回复了 starwing 创建的主题 OpenWrt openwrt 怎么连上 H3C 的 ac?
@CKR 对,是一直接 LAN 的,昨天试了下,接 WAN 是上不了网的……
2021-08-23 12:29:28 +08:00
回复了 0576coder 创建的主题 程序员 各位老哥,快奔三了,我也来聊聊要不要回老家的事
反正我也是从成都回上海了,但是还是 996……
@leebo 对于 mac,有个插件叫 smartim 你可以搜搜看。
2020-08-15 15:55:26 +08:00
回复了 daimaosix 创建的主题 MySQL 我这个批量替换某表字段内容的 SQL 语句有错吗...一直报错 1064
试试看是不是 main_url 这玩意儿不在表里,我拿了个错误的字段试了下报你的这个错。
@yingluck 不会啊,你只要编译进去了IME,那么normal模式输入是不会引发输入法的啊,比如说查找一个中文,f直接输,不会触发输入法,然后后面输入的内容才会触发输入法的~
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3189 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 13ms · UTC 12:32 · PVG 20:32 · LAX 04:32 · JFK 07:32
Developed with CodeLauncher
♥ Do have faith in what you're doing.