嘉宝集团 黑社会:如何计算烷烃的同分异构体数目

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/30 00:11:51
如何计算烷烃的同分异构体数目,最好是有数学公式,实在不行的话,计算机算法也行
你们不能只简单地告诉我能不能呀,请你们给我算法或是一些相关资料,好吗?

因为牵涉到手性的问题
所以计算和编程一直是个很大的问题
我非常同意楼上的观点
这个是数学界一直在研究的东西
如果碳数少的话直接插资料吧

有这样的公式,凯莱在1857年就开始研究
烷烃的同分异构体计算问题,是高等数学中的图论,有兴趣可以看一下其中的“树”。
国内的图论书中,王树禾老师的"图论及其算法"非常成功。

O(N^2)DP (Python实现)

我展示一些结果吧:
甲烷:1乙烷:1丙烷:1丁烷:2戊烷:3己烷:5庚烷:9辛烷:18壬烷:35癸烷:7511烷:15912烷:35513烷:80214烷:185815烷:4347
100烷:5921072038125809849884993369103538010139
具体思路详见

http://builtinclz.abcz8.com/showart.php?id=2011/0818_alkane

import sys
N=1000
dp=[[0 for i in range(0,N+1)] for j in range(0,5)]
for i in range(0,5):
dp[i][0]=1
alkyl=[1 for i in range(0,N+1)]
alkane=[1 for i in range(0,N+1)]
for i in range(1,N):
c=[0 for j in range(0,5)]
c[0]=1
for j in range(1,5):
c[j]=c[j-1]*(alkyl[i]+j-1)/j
for j in range(4,0,-1):
for k in range(0,N+1):
dp[j][k]+=sum([dp[j-l][k-i*l]*c[l] for l in range(1,min(j,k/i)+1)])
alkyl[i+1]=dp[3][i]
if i*2+1<=N:
alkane[i*2+1]=dp[4][i*2]
if i*2<=N:
alkane[i*2]=dp[4][i*2-1]-alkyl[i]*(alkyl[i]-1)/2
sys.stderr.write('i='+str(i)+'\n')
for i in range(1,N+1):
print i,alkane[i],alkyl[i]

没有数学公式,到现在还没见过这类公式

慢慢数好了………