V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  faketemp  ›  全部回复第 19 页 / 共 20 页
回复总数  400
1 ... 11  12  13  14  15  16  17  18  19  20  
2017-11-26 08:23:09 +08:00
回复了 SlipStupig 创建的主题 Python pymongo 怎么将查询结果转换成 CSV?
好吧 看来我要告诉你一个神器了 常见格式数据一键自动转换 数据处理懒人必备库
python 第三方库 Tablib
https://github.com/kennethreitz/tablib
2017-03-31 19:59:02 +08:00
回复了 ijiami 创建的主题 推广 程序员,你亮了!(有福利,手慢无)
发光 T 恤,看不到图片
@v9ox @srlp @SingingZhou @starqoq ……
经过研究, 穷举 k 值来计算 k sum(closest) 的方法不可行(>﹏<)
搜索了很多解法发现最多提到 4 sum ,而且没有一个通用的穷举计算 k sum 的解法
k 每增加一就要增加一层循环 无法想象如果 k=300 时……

所谓“以空间换时间”的解法也不可取
比如仅仅 500 个数取 4 个的组合最少都有几亿种,更别提要穷举任意个数的组合了—— 32G 内存估计也耗尽

目前这个问题基本无解(;′⌒`)

感谢大家的想法和讨论
希望若干年后某神人能关注到这个问题了……
试试 pyinstaller 或者 py2exe 吧 cx_Freeze 错误太多了
把主 py 脚本和图标、编译脚本等文件全部放到 python35/LIB 中 再编译就行了
@v9ox 看来只有穷举 k 值然后分别计算更新 k sum(closest) 了 不知道这个复杂度是否可行 研究研究先
@starqoq 如果如 @publicID002 所说将数组值全部乘 100 变成 int 型,然后按 01 背包来做 复杂度是否能够接受?

@v9ox 由于 K sum 中的 K 值无法确定,理论上的解法是不是应该以次进行 2 sum(closest)/3 sum(closest)/4 sum(closest)…… len(numArray) sum(closest),最终才能得到最优组合的答案??


有没有更高效或巧妙的解法呢?
@sensui7 没错,合适的组合可能是一个数值,也可能是 487 或 35 个数值之和——因为数组 numarray 是用户输入的,无法确定个数和规律

K sum 问题中 K 是确定的,我们的需求中 K 并不确定 这是不是最终又回到了“穷举组合”这条路?
不过 01 背包和 K sum(closest)算法与我们需求近似,需要再仔细研究开开脑洞\(^o^)/~
@GtDzx 我试了,如果 num 总数在 20 个以内,答案是可以在几秒内算出,然后 num 超过 100 的话……

数值来自交易数据,几乎全部是 float 值
@SingingZhou 谢答!只是不计算所有组合的和,如何判断哪个才是与 goal 值“最接近”的呢??

如果某组合的和正好等于 goal 则结束运算即可,只是这种几率过小了(⊙﹏⊙)b ……

所以才需要算出全部和,最判断找出“最接近”——这个算法很笨,确实我想得起的唯一 一个办法……
#Python 3.x
from itertools import combinations
from heapq import nlargest

def trans(szNum):
return szNum.translate(str.maketrans('','',',,"“”'))

goal =2000000
num = [2627958.99,1903995.67,3133207.37,1000626.65,1377193.42,389084.48,1445055.87,402488.74,2908761.03,1154304.95,1384296.51,895361.64,5769.90,215879.19,56482.19,517084.97,41702.36,539160.33]

[num.remove(i) for i,v in enumerate(num) if v > goal]
countNum = len(num)
dResult = {}
for j in range(1,countNum + 1):
tL = combinations(num,j)
dResult.update({k:v for k,v in zip(map(sum,tL),tL) if k<=goal})

print({k:dResult[k] for k in nlargest(5,dResult)})
--------------------------------------------------------------------------------------------
大概是上面这种伪代码(演示需要,未测试),只是这种穷举的算法在 num 超过 50 的情况下就会导致内存耗尽(更别说 500 个值参与运算了),即使使用 X64 Python ,也因计算量大导致时间过长——这种方法并不可取, V 友有何高见????
2016-05-08 19:07:19 +08:00
回复了 faketemp 创建的主题 问与答 电信,这是要上天么?
@Zzzzzzzzz 这个玩意儿不知道有多少人会主动去定,现在电信喜欢上了强插广告,好担心过不久它发现这个业务没几个闲人用,于是就干脆“免费”送给你了 O(∩_∩)O 哈哈~
2016-05-08 18:18:29 +08:00
回复了 faketemp 创建的主题 问与答 电信,这是要上天么?
@bdbai 打 10000 号有用???
你看看第二张图的“功能介绍”,这是要断了宅男生路么??
1 ... 11  12  13  14  15  16  17  18  19  20  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5259 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 40ms · UTC 08:32 · PVG 16:32 · LAX 00:32 · JFK 03:32
Developed with CodeLauncher
♥ Do have faith in what you're doing.