SOS DP

learn from blog of 海边拾贝的言

definition

sos: sum over subsets
target: F ( m a s k ) = ∑ i ∈ m a s k A ( i ) F(mask) = \sum_{i \in mask} A(i) F(mask)=imaskA(i)
linked to FWT (need a complement), fellow are definition of FWT
F W T   o r FWT\ or FWT or : F W T ( k ) = ∑ i   o r   j = k A ( i ) ∗ B ( j ) FWT(k) = \sum_{i\ or\ j = k} A(i) * B(j) FWT(k)=i or j=kA(i)B(j)
F W T   a n d FWT\ and FWT and : F W T ( k ) = ∑ i   a n d   j = k A ( i ) ∗ B ( j ) FWT(k) = \sum_{i\ and\ j = k} A(i) * B(j) FWT(k)=i and j=kA(i)B(j)
F W T   x o r FWT\ xor FWT xor : F W T ( k ) = ∑ i   x o r   j = k A ( i ) ∗ B ( j ) FWT(k) = \sum_{i\ xor\ j = k} A(i) * B(j) FWT(k)=i xor j=kA(i)B(j)

you can ignore FWT, because I don’t understand well and in this blog, it will not appear again.

solution

One obvious way to solve this is brute force, whose time complexity is O ( n 4 ) O(n^4) O(n4).

for i = 1 to mask
	for j = 1 to mask
		if i in j
			F[j] += A[i]

It’s obvious that for a mask, we iterate all range is low efficient.
A method to imporve is to iterate the subset of mask.

for i = 1 to mask
	for j = i; j > 0; j = (j - 1) & i
		F[i] += A[j];

Time complexity = ∑ i 2 i   c o n t a i n s   1 = O ( n 3 ) = \sum_{i} 2^{i\ contains\ 1} = O(n^3) =i2i contains 1=O(n3)

sos dp

d p [ m a s k ] [ i ] dp[mask][i] dp[mask][i] present the sum of subsets of mask that the former i i i index has been fixed, and the value of left index can be changed so here the subsets mean the subset of latter.
d p [ m a s k ] [ i ] = { d p [ m a s k ] [ i − 1 ] , ( m a s k   & ( 2 i ) = = 0 ) d p [ m a s k ] [ i − 1 ] + d p [ m a s k ⨁ 2 i ] [ i − 1 ] , ( m a s k   & ( 2 i ) = = 1 ) dp[mask][i] = \left\{\begin{matrix} dp[mask][i - 1],& (mask\ \& (2^i) == 0)\\ dp[mask][i - 1] + dp[mask \bigoplus 2^i][i - 1],& (mask\ \& (2^i) == 1) \end{matrix}\right. dp[mask][i]={dp[mask][i1],dp[mask][i1]+dp[mask2i][i1],(mask &(2i)==0)(mask &(2i)==1)
dp process
code:

for i = 1 to N
	for j = 0 to log(N)
		if (i & (2^j))
			dp[i][j] = dp[i][j - 1] + dp[i - (2^j)][j - 1];
		else
			dp[i][j] = dp[i][j - 1];

d p [ i ] [ − 1 ] = A [ i ] dp[i][-1] = A[i] dp[i][1]=A[i]
The below is dp of i ∈ m a s k i \in mask imask, and the fellow if dp of m a s k ∈ i mask \in i maski.
d p [ m a s k ] [ i ] = { d p [ m a s k ] [ i − 1 ] + d p [ m a s k ⨁ 2 i ] [ i − 1 ] , ( m a s k   & ( 2 i ) = = 0 ) d p [ m a s k ] [ i − 1 ] , ( m a s k   & ( 2 i ) = = 1 ) dp[mask][i] = \left\{\begin{matrix} dp[mask][i - 1] + dp[mask \bigoplus 2^i][i - 1],& (mask\ \& (2^i) == 0)\\ dp[mask][i - 1],& (mask\ \& (2^i) == 1) \end{matrix}\right. dp[mask][i]={dp[mask][i1]+dp[mask2i][i1],dp[mask][i1],(mask &(2i)==0)(mask &(2i)==1)

code:

for i = 1 to N
	for j = 0 to log(N)
		if (i & (2^i))
			dp[i][j] = dp[i][j - 1];
		else
			dp[i][j] = dp[i][j - 1] + dp[i + (2^j)][j - 1];

The difference of o r or or a n d and and can be thought of bits.
When i ∈ m a s k i \in mask imask, the bit 1 of mask can change to 0 or 1, 0 of mask still remain 0, which is equivalent to b i t ( ! i   o r   m a s k ) = 1 bit(!i\ or\ mask) = 1 bit(!i or mask)=1;
When m a s k ∈ i mask \in i maski, the bit 1 of m a s k mask mask still remain 1, 1 of mask can change to 0 or 1, which is equivalent to b i t ( i   o r   ! m a s k ) = 1 bit(i\ or\ !mask) = 1 bit(i or !mask)=1.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: ClioSoft SOS是一种集成电路设计数据和版本管理软件。它可以帮助设计团队更好地管理其设计数据和文档,确保设计的正确性和一致性。ClioSoft SOS可以在设计周期的任何阶段使用,从初始设计到验证和检查,直到最终生产。它提供了多个功能,包括版本控制、配置管理、工作流和数据访问控制。团队成员可以在同一时间共享数据和工具,并且可以通过使用ClioSoft SOS来减少出错的概率。ClioSoft SOS还可以简化与供应商和客户之间的通信,以及整合其他工具和应用程序。总之,ClioSoft SOS是一个强大的设计数据管理工具,它可以帮助设计团队有效地管理他们的设计流程和项目。 ### 回答2: ClioSoft SOS是一种全球领先的集成电路设计管理工具套件,主要用于半导体公司和集成电路设计团队的开发和管理。这种工具套件包括多种组成部分,如版本控制、库管理、设计浏览器、流程和协作功能。这些组成部分能够共同作用,帮助设计团队更高效、精确地协作和管理其设计流程,并确保设计的正确性和完整性。 ClioSoft SOS的版本控制和库管理功能能够跟踪设计文档的变更,并使各个设计组成部分始终保持同步。设计浏览器和流程管理功能提供了一种统一的方法,帮助设计团队在设计期间进行快速的协作和审查。此外,ClioSoft SOS支持各种常见设计工具(如Cadence、Mentor Graphics等)的集成,使设计团队能够更灵活地进行设计。 总体而言,ClioSoft SOS是一种能够加快半导体产品设计流程、提高设计精度和协作效率的设计管理工具。它得到了全球许多半导体公司和设计团队的青睐,成为了集成电路设计领域中的重要工具。 ### 回答3: ClioSoft 是一家提供设计数据管理和协作解决方案的公司,其中,SOS(Schematic Object System)是他们的主要产品之一。SOS 是一个完整的电子设计环境化工具,可以实现设计数据和版本控制、设计分层、元件库管理、可重用设计的管理和组织以及设计协作的跨团队支持等功能。相比传统的设计数据管理工具,SOS 的优点在于能够集成到现有设计工作流程中,提升设计效率和质量。同时,它还能减少设计团队之间的沟通成本和时间,实现更快速和高质量的设计开发。SOS 还提供基于 Web 的图形用户界面,使得设计团队能够方便地在不同的平台和设备上进行数据的访问和共享,同时,SOS 的工作方式也支持在安全的公共或私人云服务器上运行。总之,ClioSoft SOS 是一款功能丰富的设计数据管理和协作工具,可以高效地支持现代的电子设计流程,实现全球跨团队协作,同时保障设计数据的安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值