当前位置:编程学习 > C#/ASP.NET >>

递归运算,计算无法处理,老是未响应,找人帮忙。

程序我已经写好了,是用DELPHI写的,要生成1296个含0,1的2进制数据,规律头尾相接任意取11位都跟另外的不重复,而且要求是1296个数据里,0和1的个数相等,我现在的电脑无法运算这么大,希望有人能够帮忙运算,如果能够提供更好的方法生成也可以,我采用的是递归操作。我的QQ:106873730,邮箱:ajq_8036@163.com.

有服务器或者能够支持大运算的,请联系我,或者有更好算法的也可以。分不够可以再加。 --------------------编程问答-------------------- 请举例说明是什么样的数,或者给出你的程序片断。 --------------------编程问答-------------------- C# 帮顶!! --------------------编程问答-------------------- 我的理解:

一个二进制值,假设为11010001010101000111,头尾衔接成环后,1和0的个数相同,并且任取11位,都不会这个环里找到第2个同样的片段。

对吗? --------------------编程问答-------------------- 帮你顶顶 --------------------编程问答-------------------- 我现在的思路是这样的:
先把int转换成对应的二进制形式的string,再把string的char[]作成一个环形队列,这样就可以在其中取片段进行筛选了。 --------------------编程问答-------------------- 程序我已经写好了,可是我需要的编码比较长,运算量太大,导致我的计算机运算都卡死了。Delphi的代码如下:

function  TFrmMain.CharCount(s,c:string):Integer;
begin
  Result := (Length(s) - Length(AnsiReplaceStr(s,c,''))) div (length(c));
end;

function TFrmMain.TestCode_IsPH(Test_Code:String):Boolean;
begin
  if CharCount(Test_Code,'0') = CharCount(Test_Code,'1') then
    Result := True
  else
    Result := False;

  end;

function TFrmMain.TestByNum(TestCode,SourceCode:String;WS:Integer):Boolean;
var
  Loop:Integer;
  Flag :Boolean;
begin

  Flag := True;
  for Loop := 1 to length(SourceCode) - WS + 1 do
  begin
    if Copy(SourceCode,Loop,ws) = TestCode then
    begin
      Flag := False;
      Break;
    end;
  end;

  Result := Flag;

end;

//JZ--进制
//WS--位数
//TotalNum--个数
function TFrmMain.GetCodeByNum(MiddleCode:String;JZ,WS,TotalNum:Integer;TmpList:TMemo):String;
var
  FirstCode:String;
  CurrentCode:String;
  Loop:Integer;
  OverCode:String;  
begin
  self.StatusBar1.Panels[0].Text := IntToStr(StrToInt(self.StatusBar1.Panels[0].Text) + 1);
  FirstCode := Copy(MiddleCode,1,Ws);
  CurrentCode := Copy(MiddleCode,length(MiddleCode) - Ws + 2,Ws - 1); 

  if length(MiddleCode) = TotalNum + Ws - 1 then
  begin
    
    if (CurrentCode + Copy(MiddleCode,1,1) = FirstCode) then
    begin
       OverCode := copy(MiddleCode,1,length(MiddleCode) - WS + 1);   
      
      if TestCode_IsPH(OverCode) then
      begin
        GoalFlag := 1;
        ListBox1.Items.Add(OverCode);
       
      end;
    end;
    Exit;
  end;

  for  Loop := 0 to Jz - 1 do
  begin
    if TestByNum(CurrentCode + IntToStr(Loop),MiddleCode,WS) then
    begin
      if GoalFlag <> 1 then
         GetCodeByNum(MiddleCode + IntToStr(Loop),Jz,Ws,TotalNum,TmpList);
    end;
  end; 
end; --------------------编程问答--------------------  
Abbey
 
(老毕) 

等 级: 

 #3楼 得分:0回复于:2011-07-15 11:10:33我的理解:

一个二进制值,假设为11010001010101000111,头尾衔接成环后,1和0的个数相同,并且任取11位,都不会这个环里找到第2个同样的片段。

对吗? 
 

你的理解是对的,不过我需要这个二进制的长度是1296,我的程序是用递归做的,程序执行后一会就在任务管理器里就显示未反映。

例如:
以下编码为2进制,任意连续取4位都是唯一的,长度为10位。
0000101111


分解为:
0000
0001
0010
0101
1011
0111
1111
1110
1100
1000

这个10个编码都是不重复的,而且0,1个数不相等。


我现在的程序需要自定义个数,而且0,1必须相等,所以运算量太大,导致计算机无法计算出来。


如果是不自定义个数,比如2的11次方是2046,这个编码我直接能够生成。
或者自定义个数1296,但是不要求0,1必须相等个数,编码也能出来。






--------------------编程问答-------------------- 好像是哈弗曼编码? --------------------编程问答-------------------- 可以叫做左移循环码,任取N位的话,那就是下一编码的前N-1位和前一编码的后N-1位一摸一样。 --------------------编程问答-------------------- DELPHI不懂,进来溜溜! --------------------编程问答--------------------

string binarystring="11010001010101000111";
//检查所给二进制串是否符合要求,由outOfZero及countOfOne带出该串中含0和1的个数
bool CheckBinaryString(string binaryString, out int countOfZero, out int countOfOne)
{
    countOfZero = countOfOne = 0;
    List<string> subStrings = new List<string>(); //用于存放所有出现过的子串
    for (int i = 0; i < binaryString.Length; i++)
    {
        char ch = binaryString[i];
        if (ch=='0') countOfZero++;  // 0 的个数加一
        else if (ch=='1') countOfOne++; // 1 的个数加一
        else return false; //不合法的字符串
        string subString = ""; //用于存放当前位置开始取11个字符的子串
        int index = i;
        for (int j = 0; j < 11; j++) 
        {
            subString += binaryString[index];
            index = (index + 1) % binaryString.Length;
        }
        if (subStrings.Contains(subString)) return false; //出现重复的子串
    }
    return true; //是合格的
}
--------------------编程问答-------------------- 帮顶吧。 
我不会DELPHI --------------------编程问答-------------------- http://www.cnblogs.com/Abbey/archive/2011/07/16/2107898.html

这是我昨天想到的,因为时间有限,没有全部实现。

我的思路如下:

利用字符串的位移操作,再结合字符串查找来确定取出的片段是否独立段。就是每次从字符串首取N位,然后在剩下的串中查找有否重复。

如果有,则字符串移一位,再取一次N位的片段,再遍历一次查找重复项。如果没有,则表示这是独立段。 --------------------编程问答-------------------- 又看到了曾经熟悉的代码,只不过现在感觉有些陌生 --------------------编程问答-------------------- 有服务器的飘过,需要的话找我,没学过delphi,要的话直接给可执行文件。 --------------------编程问答-------------------- 不一定需要DELPHI运行,用别的语言写也可以,我只要能生成那组编码就OK --------------------编程问答-------------------- 回复11楼,是需要闭环的,生成的1296的个0,1形成一个圆环。 --------------------编程问答-------------------- 不知道是不是DELPHI对递归深度有限制,有C#的兄弟能把我的Delphi改写称C#来运行看看。
 
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,