在两个有序整数数组的高效有序笛卡尔积中,提出了一种生成有序笛卡尔积的惰性算法。
我很想知道这个算法是否可以推广到更多的数组。
例如我们有5个双精度数组
(0.7, 0.2, 0.1)
(0.6, 0.3, 0.1)
(0.5, 0.25, 0.25)
(0.4, 0.35, 0.25)
(0.35, 0.35, 0.3)
我感兴趣的是生成有序的笛卡尔积,而不必计算所有可能的组合。
如果你有什么想法可以将一个可能的懒笛卡尔积算法扩展到2维以上
这个问题似乎是uniform-cost-search的枚举实例(参见示例https://en.wikipedia.org/wiki/Dijkstra%27s_algorithm)。状态空间是由指向已排序数组的当前索引集定义的。后继函数是每个数组可能的索引增量的枚举。对于给定的5个数组的示例,初始状态为(0,0,0,0,0)。
没有目标状态检查函数,因为我们需要遍历所有可能性。如果所有输入数组都已排序,则保证结果已排序。
假设我们有m个长度为n的数组,则此方法的复杂度为O((n^m).log(n(m-1))。
下面是一个python的示例实现:
from heapq import heappush, heappop
def cost(s, lists):
prod = 1
for ith, x in zip(s, lists):
prod *= x[ith]
return prod
def successor(s, lists):
successors = []
for k, (i, x) in enumerate(zip(s, lists)):
if i < len(x) - 1:
t = list(s)
t[k] += 1
successors.append(tuple(t))
return successors
def sorted_product(initial_state, lists):
fringe = []
explored = set()
heappush(fringe, (-cost(initial_state, lists), initial_state))
while fringe:
best = heappop(fringe)[1]
yield best
for s in successor(best, lists):
if s not in explored:
heappush(fringe, (-cost(s, lists), s))
explored.add(s)
if __name__ == '__main__':
lists = ((0.7, 0.2, 0.1),
(0.6, 0.3, 0.1),
(0.5, 0.25, 0.25),
(0.4, 0.35, 0.25),
(0.35, 0.35, 0.3))
init_state = tuple([0]*len(lists))
for s in sorted_product(init_state, lists):
s_output = [x[i] for i, x in zip(s, lists)]
v = cost(s, lists)
print '%s %s t%s' % (s, s_output, cost(s, lists))
所以,如果你有A(A1,…, a)和B(B),…Bn)。
& lt;B当且仅当
A1 *…* An 相关内容
最新更新
- 每次保存时Nodemon EADDRINUSE错误
- 检查地址是否与行缓存对齐
- 如何将芹菜应用程序部署到谷歌云?
- 计数数组中的列表成员对
- 如何删除特定用户名而非ID的某些消息
- 表每层级表缺少子类型的列
- Php Sendgrid问题在服务器上
- 删除字符串开头和结尾的所有回车和空格
- 如何在Spring中使用Swagger
- StackOverflowException处理c#中的事件
- 无法捕获和存储来自postman API - python的响应
- @elastic/elasticsearch NPM库不能在mongodb领域功能中工作
- 我试图在这个excel csv类型文档中打印类下的所有项目,但我一直得到属性错误
- 尝试检查文档是否有字段存在,如果存在,在pymongo中编辑它
- 无法通过 CNG API 将生成的公钥从 NodeJS 加载到 Windows 中
- 在一个组件vuejb中有两个不同的数组
- 是否可以创建json键作为typescript对象?
- 设置数据库中列的对齐方式
- 使用DHTxx.Dht11读取数据
- 拒绝Kubernetes pod上的出口流量到internet
- Wordpress中的漂亮Url
- Google Cloud Project : Access Issues
- Photoshop脚本文件名/后缀
- 当文件的内容(Flux<DataBuffer>)包装在另一个对象中时,无法使用Web客户端上传文件
- 如何在SQL Server中使用动态作业名杀死作业列表
- CSS文件在React组件文件中不工作
- 如何在日历中添加具有编辑事件能力的人?
- 我的 Pip 安装已损坏,我不知道如何重新安装它 [MAC/OSX]
- 为圆环添加背景色
- pandas dataframe检查特定位置中的值是否为NaN值
热门标签:
javascript python java c# php android html jquery c++ css ios sql mysql arrays asp.net json python-3.x ruby-on-rails .net sql-server django objective-c excel regex ruby linux ajax iphone xml vba spring asp.net-mvc database wordpress string postgresql wpf windows xcode bash git oracle list vb.net multithreading eclipse algorithm macos powershell visual-studio image forms numpy scala function api selenium