网上有个成语接龙,是以胸有成竹开头的,接了1712个,觉得很强。自己没事弄了个sql的程序,调整词频算法后能在3分钟内计算出
7487个,远远超过了网上的版本
**************************start******************************
initial...
total 38129 words //使用网上流传的成语库
finish initial, cost time 466ms
computing...
胸有成竹 第1个
竹马之交 第2个
交臂相失 第3个
失张失智 第4个
智藏瘝在 第5个
在在皆是 第6个
是古非今 第7个
今生今世 第8个
世外桃源 第9个
源清流洁 第10个
initial...
total 38129 words //使用网上流传的成语库
finish initial, cost time 466ms
computing...
胸有成竹 第1个
竹马之交 第2个
交臂相失 第3个
失张失智 第4个
智藏瘝在 第5个
在在皆是 第6个
是古非今 第7个
今生今世 第8个
世外桃源 第9个
源清流洁 第10个
。。。。。。。
惊见骇闻 第7480个
闻过则喜 第7481个
喜笑颜开 第7482个
开卷有得 第7483个
得寸思尺 第7484个
尺板斗食 第7485个
食不二味 第7486个
味如嚼蜡 第7487个
闻过则喜 第7481个
喜笑颜开 第7482个
开卷有得 第7483个
得寸思尺 第7484个
尺板斗食 第7485个
食不二味 第7486个
味如嚼蜡 第7487个
set nocount on
declare @first varchar(20)
declare @rear varchar(2)
declare @t datetime
declare @head varchar(2)
declare @name varchar(20)
declare @id int
declare @count int
declare @len int
declare @part int
declare @first varchar(20)
declare @rear varchar(2)
declare @t datetime
declare @head varchar(2)
declare @name varchar(20)
declare @id int
declare @count int
declare @len int
declare @part int
set @first='胸有成竹'
set @len=10000
set @part=313--@len/4
if not exists (select rear from cy_index where name=@first)
print '不是成语!'
else
begin
set @len=10000
set @part=313--@len/4
if not exists (select rear from cy_index where name=@first)
print '不是成语!'
else
begin
print '**************************start******************************'
print 'initial...'
set @t=getdate()
print 'initial...'
set @t=getdate()
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[cy_copy]') AND OBJECTPROPERTY(id, N'IsUserTable') = 1) DROP TABLE [dbo].[cy_copy]
select * into [cy_copy] from cy_index where len(name)=4
select @count=count(1) from cy_copy
print 'total '+cast(@count as varchar(20))+' words'
print 'finish initial, cost time '+cast(datediff(ms,@t,getdate()) as varchar(10))+'ms'
print 'computing...'
set @t=getdate()
select @rear=rear from cy_copy where name=@first
print @first+' 第1个'
delete from cy_copy where name=@first
select * into [cy_copy] from cy_index where len(name)=4
select @count=count(1) from cy_copy
print 'total '+cast(@count as varchar(20))+' words'
print 'finish initial, cost time '+cast(datediff(ms,@t,getdate()) as varchar(10))+'ms'
print 'computing...'
set @t=getdate()
select @rear=rear from cy_copy where name=@first
print @first+' 第1个'
delete from cy_copy where name=@first
set @count=1
while (exists(select id from cy_copy where head=@rear) and @count<@len)
begin
if @count<@part select top 1 @id=id,@name=name,@rear=rear from cy_copy where head=@rear and sons>10 order by sons
else select top 1 @id=id,@name=name,@rear=rear from cy_copy where head=@rear order by sons desc
update cy_copy set sons=sons-1 where rear=left(@name,1)
delete from cy_copy where id=@id
set @count=@count+1
print @name+' 第'+cast(@count as varchar(10))+'个'
end
print 'finish ! cost time '+cast(datediff(ms,@t,getdate()) as varchar(10))+'ms'
end
set nocount off
经过我对词频的分析,最后得出一个13000左右的成语串,目前无法得到最长值,感觉蛮有趣,1/3的成语是有关系的,而且你背一个就能掌握1万多个
想探索一下完美解决方案