今天给各位分享VB算法问题,一个堆数字中凑出指定数字的知识,其中也会对12个连续数字猜测算法进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录
...63,8,3下一个数字是多少PS:请说下算法。。VB算法问题,一个堆数字中凑出指定数字...63,8,3下一个数字是多少PS:请说下算法。。65536,256,16下一个数字是4
因为65536是256的平方 256是16的平方由此可得出前一个数是后一个数的平方,16是4的平方所以下一个数字是4
3968,63,8,3下一个数字是2
因为63的平方3969减去1是3968,8的平方64减去1是63,3的平方9减去1是8,所以(2)的平方4减去1是3,即答案为2;
VB算法问题,一个堆数字中凑出指定数字这是个求子集合加总问题(subset sum problem)。是算法理论中比较有名的NP问题。
有几种经典解法:
1.组合论。有所有集合元素的组合,然后求和与和目标比较。方法简单,但算法复杂度高,当集合数较大,比如≥ 15后,速度明显慢;
2.动态规划。递归求解,属于典型的divide and conquer方案。
3.回溯法(backtracking),子集合属于这个里面的一个特例。--虽然也要递归,但相较上面的方法,在集合比较大的时候,也能保持不错的效率。
下面给出回溯法的vb代码(vb 2010)。
PrivateSuboutput(ByRefta()AsInteger,ByValta_sizeAsInteger)
Dimra(ta_size-1)AsInteger'differfromc/c++
Array.Copy(ta,ra,ta_size)
Dimconverter=NewConverter(OfInteger,String)(Function(num)num.ToString)
Dimstr=String.Join("+",Array.ConvertAll(ra,converter))
lbSubset.Items.Add(str)
EndSub
PrivateSubgetSubsetSum(ByRefsa()AsInteger,ByRefta()AsInteger,
ByValsa_sizeAsInteger,ByValta_sizeAsInteger,
ByValsumAsInteger,ByValcnt_nodeAsInteger,ByValtargetAsInteger)
DimiAsInteger
Iftarget=sumThen
output(ta,ta_size)
Ifcnt_node+1<sa_sizeAndsum-sa(cnt_node)+sa(cnt_node+1)<=targetThen
getSubsetSum(sa,ta,sa_size,ta_size-1,sum-sa(cnt_node),cnt_node+1,target)
EndIf
Return
Else
Ifcnt_node<sa_sizeAndsum+sa(cnt_node)<=targetThen
Fori=cnt_nodeTosa_size-1'differfromc/c++
ta(ta_size)=sa(i)
Ifsum+sa(i)<=targetThen
getSubsetSum(sa,ta,sa_size,ta_size+1,sum+sa(i),i+1,target)
EndIf
Nexti
EndIf
EndIf
EndSub
PrivateSubgenerateSubsets(ByRefsa()AsInteger,ByValsizeAsInteger,ByValtargetAsInteger)
Dimta(size-1)AsInteger
DimtotalAsInteger=0
Array.Sort(sa)
total=sa.Sum
If(sa(0)<=target)And(total>=target)Then
getSubsetSum(sa,ta,size,0,0,0,target)
EndIf
EndSub
PrivateSubbtnStart_Click(senderAsSystem.Object,eAsSystem.EventArgs)HandlesbtnStart.Click
DimsizeAsInteger=15
DimtargetAsInteger=10
Dimdata()AsInteger
DimiAsInteger
lbSubset.Items.Clear()
ReDimdata(size-1)'differfromc/c++
Fori=LBound(data)ToUBound(data)
data(i)=i+1
Nexti
generateSubsets(data,size,target)
EndSub
关于VB算法问题,一个堆数字中凑出指定数字的内容到此结束,希望对大家有所帮助。