楼主: newkid

[每日一题] 2022 PUZZLEUP

[复制链接]
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
101#
发表于 2022-12-6 09:17 | 只看该作者
7行4个1能算了
with recursive n as (select i-1 n from generate_series(1,128)t(i))
    ,b as (select 1<<(i-1) b from generate_series(1,7)t(i))
,p as(select n1.n n1,n2.n n2
      ,count(*) cnt
  from n n1, n n2, b
where n1.n<n2.n
       and (n1.n#n2.n)&b.b>0
group by n1.n ,n2.n
having count(*)=4)
,t as(select 1 lv,array[n1,n2]a, n1#n2 n3 from p where n1=0
union all
select lv+1,a||array[n],n3#n from t,n where n>a[lv+1] and n<>127-n3 and array_position(a,127-n)is null  and lv+1= ( select count(*) from p q, unnest(a)

u(c) where n1=c and n2=n)
)
select * from t where lv=7 limit 4;
lv |             a              | n3
----+----------------------------+----
  7 | {0,15,51,60,85,90,102,105} |  0
  7 | {0,15,53,58,83,92,102,105} |  0
  7 | {0,15,51,60,86,89,**,106} |  0
  7 | {0,15,54,57,83,92,**,106} |  0
(4 行记录)


Time: 42621.588 ms (00:42.622)

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
102#
 楼主| 发表于 2022-12-6 23:24 | 只看该作者
你是假设0一定会出现在结果集中?而且这个结果集还是最大的?这要如何证明呢?

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
103#
 楼主| 发表于 2022-12-7 01:19 | 只看该作者
〇〇 发表于 2022-12-6 07:34
同一个数,和全零异或得a,和全一异或得b,ab中必有一个数1的位数少于总位数的一半,题目要求大于总位数一 ...

你这个”同理“,跳跃太大,我看不出如何从全零和全1的情况推理出来。
我是这样证明的:反证法


假设a列1的位数a, b列1的位数为b, a,b互为反码, a+b=9
假设c列有A个1与a重合,有B个1与b重合, c的1位数为A+B
且集合{a,b,c}满足条件

a,c异或后1的个数必须>=5:
a-A+B >=5

b,c异或后1的个数必须>=5:
b-B+A >=5

两边相加:a+b>=10 与a+b=9矛盾, 所以a,b不能同时出现。

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
104#
发表于 2022-12-7 08:36 来自手机 | 只看该作者
本帖最后由 〇〇 于 2022-12-7 10:34 编辑

看7行4个1的二进制表示
mydb=# with t(a) as (values(array[0,15,51,60,85,90,102,105]))
mydb-# select unnest(a)::bit(7) i from t;
    i
---------
 0000000
 0001111
 0110011
 0111100
 1010101
 1011010
 1100110
 1101001
去掉第一行全零
后面7行和7列组成的矩阵按照左上右下对角线对称

应该是碰巧,这个就不是了
with t(a) as (values(array[0,15,53,58,83,92,102,105]))
select unnest(a)::bit(7) i from t;

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
105#
 楼主| 发表于 2022-12-7 10:17 | 只看该作者
〇〇 发表于 2022-12-7 08:36
看7行4个1的二进制表示mydb=# with t(a) as (values(array[0,15,51,60,85,90,102,105]))mydb-# select unne ...

这能说明什么呢?你没有证明为什么全零一定要包含在里面,而且这样得到的集合最大。我看你的SQL里也仅仅考虑了4个1的那些,其他都跳过,这也能证明吗?

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
106#
发表于 2022-12-7 10:37 | 只看该作者
没有证明,就是发现一些现象,看有没有规律,对称这个已经证明不存在了

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
107#
发表于 2022-12-7 15:59 | 只看该作者
恢复>=5写法,保留n1=0
8行取5个的结果,用max(lv)+1求出最多4列,显示实际的数如下,把这些数前面统一加一个0,就是9行取5个,至少有4列的结果
with recursive n as (select i-1 n from generate_series(1,256)t(i))
    ,b as (select 1<<(i-1) b from generate_series(1,8)t(i))
,p as(select n1.n n1,n2.n n2
      ,count(*) cnt
  from n n1, n n2, b
where n1.n<n2.n
       and (n1.n#n2.n)&b.b>0
group by n1.n ,n2.n
having count(*)>=5)
,t as(select 1 lv,array[n1,n2]a, n1#n2 n3 from p where n1=0
union all
select lv+1,a||array[n],n3#n from t,n where n>a[lv+1] and n<>255-n3 and array_position(a,255-n)is null  and lv+1= ( select count(*) from p q, unnest(a)

u(c) where n1=c and n2=n)
)
select * from t where lv=3 limit 20;
lv |        a        | n3
----+-----------------+---
  3 | {0,126,185,199} |  0
  3 | {0,125,186,199} |  0
  3 | {0,124,187,199} |  0
  3 | {0,123,188,199} |  0
  3 | {0,122,189,199} |  0
  3 | {0,121,190,199} |  0
  3 | {0,126,181,203} |  0
  3 | {0,125,182,203} |  0
  3 | {0,124,183,203} |  0
  3 | {0,119,188,203} |  0
  3 | {0,118,189,203} |  0
  3 | {0,117,190,203} |  0
  3 | {0,126,179,205} |  0
  3 | {0,123,182,205} |  0
  3 | {0,122,183,205} |  0
  3 | {0,119,186,205} |  0
  3 | {0,118,187,205} |  0
  3 | {0,115,190,205} |  0
  3 | {0,125,179,206} |  0
  3 | {0,123,181,206} |  0
(20 行记录)

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
108#
发表于 2022-12-7 17:01 | 只看该作者
本帖最后由 〇〇 于 2022-12-7 17:06 编辑

import numpy as np
from communities.algorithms import bron_kerbosch

data=[[0,5]
,[1,4]
,[0,3]
,[0,6]
,[2,4]
,[3,4]
,[5,6]
,[2,7]
,[2,5]
,[1,6]
,[0,7]
,[3,5]
,[3,6]
,[1,7]
,[1,2]
,[4,7]]


adj_matrix = np.zeros((8, 8), dtype='int8')

for i in range(8):
  for j in range(8):
    if [i,j] in data: adj_matrix[ i][j]=1

print(adj_matrix)
[[0 0 0 1 0 1 1 1]
[0 0 1 0 1 0 1 1]
[0 0 0 0 1 1 0 1]
[0 0 0 0 1 1 1 0]
[0 0 0 0 0 0 0 1]
[0 0 0 0 0 0 1 0]
[0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0]]

communities = bron_kerbosch(adj_matrix, pivot=True)
print(communities)
[{0, 3, 5, 6}, {0, 7}, {1, 2, 4, 7}, {1, 6}, {2, 4, 7}, {2, 5}, {4, 7}]

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
109#
发表于 2022-12-7 18:05 | 只看该作者
把算邻居的语句也加入了
https://finance.sina.com.cn/tech ... ftssap8050893.shtml

def f_bk(a,m):
  n=1<<a
  adj_matrix = np.zeros((n, n), dtype='int8')
  for i in range(n):
    for j in range(n):
      cnt1=0
      d=i^j
      for k in range(a):
        if d&(1<<k)!=0:cnt1+=1
      if cnt1>=m: adj_matrix[ i][j]=1
  print(adj_matrix)
  communities = bron_kerbosch(adj_matrix)
  longest=0
  result=[]
  for i in communities:
    if len(i)>longest:
      longest=len(i)
      result=i
  return (longest,result)
>>> f_bk(3,2)
[[0 0 0 1 0 1 1 1]
[0 0 1 0 1 0 1 1]
[0 1 0 0 1 1 0 1]
[1 0 0 0 1 1 1 0]
[0 1 1 1 0 0 0 1]
[1 0 1 1 0 0 1 0]
[1 1 0 1 0 1 0 0]
[1 1 1 0 1 0 0 0]]
(4, {0, 3, 5, 6})
>>> f_bk(7,4)
[[0 0 0 ... 1 1 1]
[0 0 0 ... 1 1 1]
[0 0 0 ... 1 1 1]
...
[1 1 1 ... 0 0 0]
[1 1 1 ... 0 0 0]
[1 1 1 ... 0 0 0]]
(8, {0, 51, 85, 102, 105, 90, 60, 15})

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
110#
发表于 2022-12-7 18:36 | 只看该作者
9,5实在太慢,其他几个也都对得上SQL的结果
>>> f_bk(8,5)
[[0 0 0 ... 1 1 1]
[0 0 0 ... 1 1 1]
[0 0 0 ... 1 1 1]
...
[1 1 1 ... 0 0 0]
[1 1 1 ... 0 0 0]
[1 1 1 ... 0 0 0]]
(4, {0, 227, 252, 31})
>>> f_bk(9,7)
[[0 0 0 ... 1 1 1]
[0 0 0 ... 1 1 1]
[0 0 0 ... 1 1 1]
...
[1 1 1 ... 0 0 0]
[1 1 1 ... 0 0 0]
[1 1 1 ... 0 0 0]]
(2, {0, 382})
>>> f_bk(9,6)
[[0 0 0 ... 1 1 1]
[0 0 0 ... 1 1 1]
[0 0 0 ... 1 1 1]
...
[1 1 1 ... 0 0 0]
[1 1 1 ... 0 0 0]
[1 1 1 ... 0 0 0]]
(4, {0, 504, 455, 63})

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表