V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  lff0305  ›  全部回复第 5 页 / 共 8 页
回复总数  153
1  2  3  4  5  6  7  8  
2020-09-16 11:47:15 +08:00
回复了 zealinux 创建的主题 Linux 大家生产环境服务器是选用 Ubuntu 还是 CentOS?
见过上海和国外的几个 bank,都是花钱买的 Redhat 的服务。PROD 就是 Redhat 企业版。Dev/Test 就是 CentOS
2020-09-07 19:36:49 +08:00
回复了 lihongming 创建的主题 程序员 脑子突然不好使了,请各位大佬帮我想想这个算法
排版乱了, 重新弄下

简单写了个程序。题目没有讲太清楚(是否这些字母一定要全部使用)。这里为了简单就假设全部使用。

解法一:排列组合。生成字符串长度是 sum=a0+a1+a2+...+a25 。放 a,有(sum, a0)种选择的方法;放 b,有(sum - a0, a1)种方法;放 c,有(sum - a0 - a1, a2)种方法。。。。直到最后。

写出程序:
```
private long solve1(int[] letters) {
int sum = 0;
for (int c : letters) {
sum += c;
}
BigInteger r = BigInteger.ONE;
for (int c : letters) {
BigInteger s = choose(sum, c);
r = r.multiply(s);
sum -= c;
}
return r.longValue();
}

private static BigInteger choose(int n, int k) {
BigInteger r = BigInteger.ONE;
for (int i=0; i<k; i++) {
r = r.multiply(BigInteger.valueOf(n - i));
}
for (int i=2; i<=k; i++) {
r = r.divide(BigInteger.valueOf(i));
}

// System.out.println(n + "," + k + " = " + r);
return r;
}

```
解法 2: GEF (指数生成函数)。这是个排列问题所以用指数生成函数。
对于 a: 有 a0 个 a 要放。写成指数函数形式 e0=e^(a0)/a0!
同样对于 b: 有 a1 个 b 要放。写成指数函数形式 e1=e^(a1)/a1!
等等等等
最后到 z, 有 a25 个 z 要放,写成指数函数形式 e25=e^(a25)/a5!

根据指数生成函数的理论,整个排列数就是
E=e0*e1*...*e25,中项 e^(sum)/sum! 的系数。

那么
```
E=[e^(a0)/a0!][e^(a1)/a1!]*...*[e25=e^(a25)/a25!]
= [e^(a0+a1+...+a25)]/[a0!*a1!*...*a25!]
= [e^sum]/[a0!*a1!*...*a25!]
e ^ sum sum !
= --------------------------- * --------------------
a0! *a1!* ... * a25 !) sum!

e ^ sum sum !
= --------------------------- * --------------------------
sum! a0! *a1!* ... * a25 !
```
要求的系数就是 ( sum!)/( a0! *a1!* ... * a25 ! )

写成程序就是

```
// Solve by GEF
private long solve2(int[] a) {
// expr e0 = e^a0/a0!, e1 = e^a1/a1! ... etc
// E = e0*e1*e2 .... * e25
// e^(a0+a1+...+a25)/(a0!*a1*a2*....*a25!)
// ? = e^(a0 + a1 + ... + a25)/(sum!)
int sum = 0;
for (int c : a) {
sum += c;
}
BigInteger p = p(sum);
BigInteger c = BigInteger.ONE;
for (int i : a) {
c = c.multiply(p(i));
}
return p.divide(c).longValue();
}

private BigInteger p(int sum) {
BigInteger r = BigInteger.ONE;
for (int i= sum; i>=2; i--) {
r = r.multiply(BigInteger.valueOf(i));
}
return r;
}
```
2020-09-07 19:32:42 +08:00
回复了 lihongming 创建的主题 程序员 脑子突然不好使了,请各位大佬帮我想想这个算法
简单写了个程序。题目没有讲太清楚(是否这些字母一定要全部使用)。这里为了简单就假设全部使用。

解法一:排列组合。生成字符串长度是 sum=a0+a1+a2+...+a25 。放 a,有(sum, a0)种选择的方法;放 b,有(sum - a0, a1)种方法;放 c,有(sum - a0 - a1, a2)种方法。。。。直到最后。

写出程序:

private long solve1(int[] letters) {
int sum = 0;
for (int c : letters) {
sum += c;
}
BigInteger r = BigInteger.ONE;
for (int c : letters) {
BigInteger s = choose(sum, c);
r = r.multiply(s);
sum -= c;
}
return r.longValue();
}

private static BigInteger choose(int n, int k) {
BigInteger r = BigInteger.ONE;
for (int i=0; i<k; i++) {
r = r.multiply(BigInteger.valueOf(n - i));
}
for (int i=2; i<=k; i++) {
r = r.divide(BigInteger.valueOf(i));
}

// System.out.println(n + "," + k + " = " + r);
return r;
}


解法 2: GEF (指数生成函数)。这是个排列问题所以用指数生成函数。
对于 a: 有 a0 个 a 要放。写成指数函数形式 e0=e^(a0)/a0!
同样对于 b: 有 a1 个 b 要放。写成指数函数形式 e1=e^(a1)/a1!
等等等等
最后到 z, 有 a25 个 z 要放,写成指数函数形式 e25=e^(a25)/a5!

根据指数生成函数的理论,整个排列数就是
E=e0*e1*...*e25,中项 e^(sum)/sum! 的系数。

那么 E=[e^(a0)/a0!][e^(a1)/a1!]*...*[e25=e^(a25)/a25!]
= [e^(a0+a1+...+a25)]/[a0!*a1!*...*a25!]
= [e^sum]/[a0!*a1!*...*a25!]
e ^ sum sum !
= --------------------------- * --------------------
a0! *a1!* ... * a25 !) sum!

e ^ sum sum !
= --------------------------- * --------------------------
sum! a0! *a1!* ... * a25 !

要求的系数就是 ( sum!)/( a0! *a1!* ... * a25 ! )

写成程序就是


// Solve by GEF
private long solve2(int[] a) {
// expr e0 = e^a0/a0!, e1 = e^a1/a1! ... etc
// E = e0*e1*e2 .... * e25
// e^(a0+a1+...+a25)/(a0!*a1*a2*....*a25!)
// ? = e^(a0 + a1 + ... + a25)/(sum!)
int sum = 0;
for (int c : a) {
sum += c;
}
BigInteger p = p(sum);
BigInteger c = BigInteger.ONE;
for (int i : a) {
c = c.multiply(p(i));
}
return p.divide(c).longValue();
}

private BigInteger p(int sum) {
BigInteger r = BigInteger.ONE;
for (int i= sum; i>=2; i--) {
r = r.multiply(BigInteger.valueOf(i));
}
return r;
}
2020-09-07 15:55:32 +08:00
回复了 lihongming 创建的主题 程序员 脑子突然不好使了,请各位大佬帮我想想这个算法
数学方式直接算:应该是指数生成函数
2020-09-01 10:41:30 +08:00
回复了 JasonLaw 创建的主题 Java 关于 StackOverflowError 和 OutOfMemoryError 的疑惑
jvm 通过-xss 指定每个线程使用的栈的大小(类似的 createThread api 同样可以指定栈的大小).记得默认 java 栈大小是 512kb,C++是 2MB. 栈的大小决定了函数调用的深度(因为 Java 不像 c++。c++要在栈上传递值或者引用。Java 只需要传递引用。所以 jvm 选择了一个较小的栈).

上文说的 outofmemory error 是针对一个虚拟机能创建的最多的线程数。因为栈是在 heap 上分配的,自然最大的线程数就约等于 xmx / xss 。
创建了这么多线程,再创建新的线程就会出现 outofmemory error 因为没有剩余的 heap 保留来做线程栈
jmap 看下是不是 heap 满了,100%是在不停的做 GC (按三楼的方法,会看到是 GC Thread 在占 cpu)
2020-07-30 09:49:22 +08:00
回复了 cszchen 创建的主题 Kubernetes 不想用 ELK 或者 EFK,有没有简单的替代方案
fluentbit, 够轻量了,找个简单点的后端,比如 mongodb 之类的,或者干脆 Linux 的 syslog/windows 的 event log
2020-07-27 14:55:08 +08:00
回复了 RedBeanIce 创建的主题 程序员 [ Java 应用监控] springboot 的应用监控方案
micrometer + prometheus + grafana
2020-07-24 11:45:09 +08:00
回复了 goodspb 创建的主题 程序员 每一分钟写入 10 万行数据,有啥好的方案吗?
MQ + Prepared Statement (需要比较新的 MySQL)
2020-07-21 12:17:15 +08:00
回复了 smyle 创建的主题 程序员 怎么在网关上屏蔽某台设备上的腾讯视频,不让它播放
在 ros 上是这么做的:找到相关的域名,建立防火墙规则,来源于 xxx mac 地址的对外的 53 udp 请求,重定向到本地 ROS 的 cache dns 上;在 cache dns 上对这个域名创建一条静态的 127.0.0.1 的记录
2020-07-21 09:02:29 +08:00
回复了 3country 创建的主题 程序员 公司出了一个摸鱼统计系统,想知道是怎么实现的
@nielinjie 公司的电脑,个人没 admin,公司给你装上并且信任中间人的根证书
2020-07-15 17:31:28 +08:00
回复了 Vimax 创建的主题 Java RESTful 的增删改查成功应该返回什么状态码?
个人觉得用 200 加上 body 里的信息。
404 的话不知道是成功了,还是中间什么地方出现了问题(网关,负载均衡)
2020-07-15 17:29:46 +08:00
回复了 xbdsky 创建的主题 PHP 面试问了一个问题,怎么避免 C 去邀请 A,觉得有点意思?
判断有向图是否存在环路,可以用邻接矩阵,计算传递闭包
Process p = Runtime.getRuntime().exec(.....);
p.waitFor();
multidesk
2020-06-22 16:21:00 +08:00
回复了 dandankele 创建的主题 程序员 如何在生产环境优雅的 debug?
把 PROD 的 request 镜像到你的调试机上
需要 IT 配合
2020-06-17 17:16:38 +08:00
回复了 rqxiao 创建的主题 程序员 有关于项目中数据库连接报错的问题
猜测是不是连接占用时间太长, 被连接池或者数据库回收了.
如果第三方不稳定, 要加断路器, 否则上生产系统了会把整个连接池 /数据库拖死(因为很多连接创建了, 但是被调用第三方卡死了)
2020-06-15 12:49:11 +08:00
回复了 Vimax 创建的主题 Java 服务 A 调用服务 B 接口,返回 ResponseEntity 数据异常
用 wireshark 或者 Fiddler 抓下看看 request 到底发的是什么,
content-type 之类的 header 对不对
2020-06-15 11:14:09 +08:00
回复了 Jerami 创建的主题 Android 国内买的小米究竟可不可以使用 Google Pay(NFC 非接触付款)?
亲测可以。
解 bl 刷国际版 rom,然后用 Magisk 绕过 Google Pay 的检测
2020-06-05 16:10:26 +08:00
回复了 xmge 创建的主题 程序员 golang 面试之协程比线程更轻量级?
@sagaxu 没这么大, C/C++ call createThread api 的时候可以设置栈大小, 默认好像是 1M
早几年记得 Java 好像是 512k 默认, 后来改成 128k 了 (可以用 -Xss 设置)
1  2  3  4  5  6  7  8  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3130 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 33ms · UTC 10:55 · PVG 18:55 · LAX 03:55 · JFK 06:55
Developed with CodeLauncher
♥ Do have faith in what you're doing.