24小时热门版块排行榜    

查看: 2808  |  回复: 14

wangyuewu08

木虫 (著名写手)

【答案】应助回帖


jjdg(金币+1): 感谢参与 2011-12-08 00:22:04
cw277(金币+2): 谢谢哥的热心支持~ 2011-12-08 09:23:21
引用回帖:
7楼: Originally posted by hxyue at 2011-12-07 15:56:07:
i =
   650
Elapsed time is 979.490715 seconds.
并且随着ii的增大程序用时急剧增加,可能我机子太烂了,呵呵
同时s的长度也在迅速增大

估计和txt无关,而是因为超过了matlab字符串长度的上限
你自己试试 ...

我都感觉自己的机器很旧了没想到你的运行时间是我的2倍多该换了
往事并不如烟
11楼2011-12-07 19:55:02
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wangyuewu08

木虫 (著名写手)

【答案】应助回帖

★ ★
cw277(金币+2): 我打算做1152次循环, 而且要把表达式写到txt里就行了。。 前辈有空可以写写 2011-12-08 11:33:20
ben_ladeng(金币+2): 欢迎常来 2011-12-08 13:17:25
cw277(金币+1): 我是打算迭代完了之后,拆分成多个字符串写到txt里。但是一定要保证最后的表达式正确。 这个txt可能有好几十M 2011-12-08 16:32:03
楼主预期要迭代多少次?
在迭代过程中将符号变量进行拆分的话,迭代过程就没办法进行了。
在迭代完并转化为字符串之后,倒是可以拆分为多个字符串,分别写入几个text文件中,这只能突破text文件的上限(具体的上限不清楚),不能够节省程序运行的时间。
楼主看看能不能够改进算法。
往事并不如烟
12楼2011-12-08 09:39:30
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wangyuewu08

木虫 (著名写手)


jjdg(金币+1): 感谢参与 2011-12-09 00:52:59
我按照1152的迭代次数运行了程序:
860次,17秒迭代一次;
925次,52秒迭代一次;
951次,85秒迭代一次;
985次,两分多钟一次;
……
这完全是按照指数级别增长的
因为我今天在外面用电脑,没法长时间运行,当迭代到986次的时候,我只能ctrl+c。
楼主还是改进一下算法吧,初始化对效率的提高太有限了。
往事并不如烟
13楼2011-12-08 15:10:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wangyuewu08

木虫 (著名写手)

【答案】应助回帖

★ ★
cw277(金币+8): 牛人写出来的程序就是不一样啊~~ 2011-12-08 23:16:45
jjdg(金币+2): 感谢参与 2011-12-09 00:53:08
cw277(金币+2): 希望前辈能不改我程序初始化部分(即end之前),能跑完1152步得到结果。 当然end后面的程序可以改。 辛苦了~~ 2011-12-12 22:49:09
给楼主写了个拆分字符串的程序,在ii = 500, 600, 700的情况下调试成功,可以自行设置单个文件的大小。楼主要做的就是耐心等待了。
本来以为系统会逐个刷新出新建的文件,但那些文件几乎是同时出现的。
看到楼主在循环体中加入了i用来显示程序的运行,我在输出的循环体中也加入了显示语句,这样就可以知道程序是否在执行,它们貌似也是一起出来。向楼主学习。
CODE:
%   修改时间:2011-12-08
%   修改内容:
%   1.  以选定的字符数为一个文件进行输出。

clc
clear
tic;

S = zeros(1, 288);
S = sym(S);
for ii = 1 : 80
    S(ii) = sym(['k', num2str(ii)]);
end
%   S(81:93) = sym('0');
for ii = 94 : 173
    S(ii) = sym(['IV', num2str(ii - 93)]);
end
%   S(174 : 285) = sym('0');
S( 286 : 288 ) = sym('1');

for ii = 1:1152
t1 = S(66) + S(91) * S(92) + S(93) + S(171);
t2 = S(162) + S(175) * S(176) + S(177) + S(264);
t3 = S(243) + S(286) * S(287) + S(288) + S(69);
S = [t3, S(1:92), S(94:288)];
S = [S(1:93), t1, S(94:176), S(178:288)];
S = [S(1:177), t2, S(178:287)];
disp(ii)
end

s = char(S(1));
%   在文本文档中每个字符占1B,1M可以储存以下数量的字符,
%   通过unit可以自行设置单个文件的大小
unit = 1024 * 1024;
len = size(s, 2);
%   通过向正无穷取整,可以包含整除和非整除的情况。
fileNumber = ceil(len / unit);
%   输出前面的n-1个文件,这些文件肯定是填满的。
%   第一个文件名为char1.txt
%   第二个文件名为char2.txt
%   ……
jj = 1;
for ii = 1 : fileNumber - 1
    fid = fopen(['E:\char', num2str(ii), '.txt'], 'w');
    fprintf(fid,'%s',s(jj : jj + unit - 1));
    jj = jj + unit;
    fclose(fid);
    fprintf(['输出第', num2str(ii), '个文件\n']);
end
%   输出最后一个文件,有可能没有填满,所以要用到end
fid = fopen(['E:\char', num2str(fileNumber), '.txt'], 'w');
fprintf(fid,'%s',s(jj : end));
fclose(fid);
fprintf(['输出第', num2str(fileNumber), '(最后一个)个文件\n']);

toc;

往事并不如烟
14楼2011-12-08 18:11:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
15楼2011-12-08 18:22:40
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 cw277 的主题更新
信息提示
请填处理意见