数据结构,怎么看一个程序执行了多少次啊比如第一个,执行n-2次,怎么得到的~

数据结构,怎么看一个程序执行了多少次啊比如第一个,执行n-2次,怎么得到的~,第1张

不是n-2次,而是n次,程序只执行一次,是循环体中的语句执行了n次。这是一个求时间复杂度的问题,该程序段耗时主要在循环,跟循环体中语句的执行次数有关,k=k+10i;和i++;都执行了n次。所以该程序段的时间复杂度的大O表示法为O(n)。

一、什么是磁盘碎片

其实磁盘碎片应该称为文件碎片,是因为文件被分散保存到整个磁盘的不同地方,而不是连续地保存在磁盘连续的簇中形成的。

[Blocked Ads]

当应用程序所需的物理内存不足时,一般 *** 作系统会在硬盘中产生临时交换文件,用该文件所占用的硬盘空间虚拟成内存。虚拟内存管理程序会对硬盘频繁读写,产生大量的碎片,这是产生硬盘碎片的主要原因。

其他如IE浏览器浏览信息时生成的临时文件或临时文件目录的设置也会造成系统中形成大量的碎片。文件碎片一般不会在系统中引起问题,但文件碎片过多会使系统在读文件的时候来回寻找,引起系统性能下降,严重的还要缩短硬盘寿命。另外,过多的磁盘碎片还有可能导致存储文件的丢失。

=================================================

二、磁盘碎片是怎么产生的?

在磁盘分区中,文件会被分散保存到磁盘的不同地方,而不是连续地保存在磁盘连续的簇中。又因为在文件 *** 作过程中,Windows系统可能会调用虚拟内存来同步管理程序,这样就会导致各个程序对硬盘频繁读写,从而产生磁盘碎片。

=================================================

三、磁盘读写 *** 作的原理

知道了磁盘碎片的产生原因之后,我们还有必要了解一下程序运行时磁盘的读写动作。一般运行一个程序时,磁盘驱动器的磁头所做的工作是先搜索该程序运行必需的文件,然后读取数据,最后做读后处理——将数据传送至磁盘高速缓存(Cache)和内存中。搜索时间在硬盘性能指标中被称为平均寻道时间(Average seek time),单位为毫秒(ms),目前主流硬盘的平均寻道时间小于95ms。如果能将应用程序的相关文件放在磁盘的连续空间内,磁头搜索的时间将会减少很多。读取时也是如此,磁盘读取位于磁头下方扇区的数据所需时间仅为将磁头移到另一地点再读取相同数据所需时间的五分之一。读盘时,系统先检查数据是否在高速缓存中,如果有则直接读取;如果没有则访问磁盘,也就是读盘。当需要多次读取同一份数据时,Cache的作用很大,但对于第一次读取某个文件,Cache就无能为力了。于是搜索时间和读取时间在很大程度上影响着程序执行的效率。

为何要整理磁盘 Windows系统并不能自动将每个文件按照最大程度减少磁头搜索时间的原则放到磁盘上最合适的位置。于是Microsoft在Windows中加入了“Disk Defragment”(磁盘碎片整理程序),并提供了“TaskMonitor”(任务监视器)来跟踪程序启动过程中的磁盘活动,以利于“Disk Defragment”能够更有效地工作。“TaskMonitor”是随Windows启动而自动运行的(当然要在“启动”中选中“TaskMonitor”)。当加载某个应用程序时,它通过监视磁盘的访问动作来了解该程序启动时搜索和调用的文件,对所需文件进行定位,并将监视结果储存在“C:\Windows\Applog”隐藏目录中。这个目录中的大多数文件以“lgx”为扩展名,其中“lg”代表记录文件(Log File),“x”表示盘符,如D盘程序就以“lgd”为扩展名;记录文件的文件名为TaskMonitor所监视的应用程序的文件名,如E盘上的WinZip程序记为“Winzip32lge”。用户进行磁盘碎片整理时,该程序会根据Applog目录中的信息把应用程序的相关文件移动到磁盘上的连续空间内。

TaskMonitor仅在程序加载过程中对文件信息进行搜索,并且根据程序的加载频率调整优化的顺序,也就是说使用次数最多的软件可获得最多的关照。Applog目录中的APPLOGind文件就记录了应用程序运行的次数。用户需要将常用软件多次启动,接受TaskMonitor的监视和记录,再使用Disk Defragment进行整理,才能真正实现程序启动速度的提高。但如果用户中途改变了常用软件,比如以前常用WinZip,现在改用ZipMagic,那么在相当长的时间内Disk Defragment还是先把与WinZip相关的文件移到连续的空间内,而不是ZipMagic,除非ZipMagic的加载次数超过WinZip。要解决这个问题,用户可将“Winzip32lgx”文件删除,记录文件不存在了,Disk Defragment也就不会去优化它了。

=================================================

四、该不该定期整理硬盘?

实际上,定期整理硬盘应该是毫无疑问的。如果说硬盘碎片整理真的会损害硬盘的话,那也将是在对硬盘进行近乎天文数字般次数的整理之后。

硬盘使用的时间长了,文件的存放位置就会变得支离破碎——文件内容将会散布在硬盘的不同位置上。这些“碎片文件”的存在会降低硬盘的工作效率,还会增加数据丢失和数据损坏的可能性。碎片整理程序把这些碎片收集在一起,并把它们作为一个连续的整体存放在硬盘上。Windows自带有这样的程序:磁盘碎片整理程序(DiskDefragmenter),但在工具软件NortonUtilities和Nuts&Bolts中有更好的此类程序。

然而,碎片整理对硬盘里的运转部件来说的确是一项不小的工作。如果硬盘已经到了它生命的最后阶段,碎片整理的确有可能是一种自杀行为。但在这种情况下,即使您不进行碎片整理,硬盘也会很快崩溃的。

实际上在大多数情况下,定期的硬盘碎片整理减少了硬盘的磨损。不管怎么说,让硬盘的磁头从1处读取文件总比从8处读取要容易得多。因此,一个每两周或四周整理一次的硬盘的寿命应当比一个永远不整理的硬盘长。

=================================================

五、整理前的准备工作

我们在整理硬盘前一般都要对它清理垃圾信息,检查有无错误,最后才能谈到碎片的整理和优化。因此,我们在整理硬盘前,应该首先做好这些工作:

1、应该把硬盘中的垃圾文件和垃圾信息清理干净。系统工作一段时间后,垃圾文件就会非常之多,有程序安装时产生的临时文件、上网时留下的缓冲文件、删除软件时剩下的DLL文件或强行关机时产生的错误文件等,建议“菜鸟”朋友还是使用微软的“磁盘清理程序”代劳,“老鸟”当然可以使用一些功能更强的软件或手工清理。

2、检查并修复硬盘中的错误。首选的仍然是微软的“磁盘扫描程序”,虽然它的速度实在不怎么样,但只要你有足够的耐心,经过这个程序对磁盘完整而详细的扫描后,相信系统中的绝大多数错误已经被修复了。当然你也可以尝试一下其他工具,如扁鹊神医“Norton WinDoctor”,它的速度可比Windows中的“磁盘扫描工具”快多了。

=================================================

六、整理方法及注意

在Windows里,用户可以从“开始”菜单中选择“程序/附件/系统工具/磁盘碎片整理程序”,d出选择驱动器窗口,选择要整理的分区,然后点击[确定]即可开始整理,但此方法碎片整理过程非常耗时,一般2GB左右的分区需要1个小时以上,所以建议读者:

1、整理磁盘碎片的时候,要关闭其他所有的应用程序,包括屏幕保护程序,最好将虚拟内存的大小设置为固定值。不要对磁盘进行读写 *** 作,一旦Disk Defragment发现磁盘的文件有改变,它将重新开始整理。

2、整理磁盘碎片的频率要控制合适,过于频繁的整理也会缩短磁盘的寿命。一般经常读写的磁盘分区一周整理一次。

=================================================

七、磁盘扫描程序的命令参数

命令参数在 DOS时代可以说是一项基本的技能,很多程序都要靠命令参数来启动,而到了图形化界面时代,已很难再见到其踪迹,但它却实实在在地存在着,而且发挥着不小的作用。如很多 Windows游戏的设置程序就是用 /Setup 参数来实现的。通常我们不会太留意某些程序的命令参数,但他们往往包含着某些隐秘的功能,如果运用适当对你很有帮助。

Windows 中的磁盘扫描程序就包含着许多命令参数,你可以在MS_DOS方式下或在“运行”对话框中实现,如果需要经常用命令参数,还可以建立一个快捷方式。

/SILENT 启动磁盘扫描程序不允许作任何选项设置和高级设置。

/A 检查所有的本地硬盘

/N 自动启动和退出磁盘扫描程序

/P 防止磁盘扫描程序修复所发现的错误

X: X 表示指定要检查的驱动器号(不需要 / 的命令参数)

举例:

1)检查驱动器 E 并自动启动和退出磁盘扫描程序

SCANDSKW E: /N

2)检查所有的硬盘并防止磁盘扫描程序修复发现的任何错误

SCANDSKW /A /P

=================================================

八、运行过其他文件整理程序怎么办

当运行了其他磁盘文件整理程序(如WinAlign)后,它可能扰乱了TaskMon记录的数据,若此时直接进行碎片整理,可能会得不偿失,达不到优化性能的目的。解决的办法是在进行碎片整理之前,多次运行Windows和自己最常用的程序,这样可以让TaskMon重新收集到正确的统计数据,指导进行磁盘优化。

最后,当启动Windows98的磁盘碎片整理程序时,可能会诧异界面中的Intel标志。为什么处理器的生产厂商会参与编写这个优化磁盘的软件呢?这是因为硬盘寻道时间的缓慢会导致系统整体性能的下降,这样会有损CPU超级计算能力的形象,让人误以为是CPU性能的低下。Microsoft的一个测试表明,在奔腾233的机器上启动Windows仅仅比奔腾150快3%,也就是说,快速的CPU并不能克服磁盘延迟的缺点。于是,在共同利益的驱动下,Intel和Microsoft联合开发了Windows98的磁盘碎片整理程序,用来消除硬盘寻道缓慢的瓶颈。

=================================================

九、如何快速地整理磁盘碎片

每次需要整理磁盘碎片时都需要选择“开始”“程序”“附件”“系统工具”“磁盘碎片整理程序”,然后再指定驱动器,很麻烦。能否有简单的方法完成这一系列 *** 作?

在Windows资源管理器中,选择“查看”“文件夹选项”(或“查看”“选项”),选择“文件类型”选项卡,并在“已注册的文件类型”列表中选择“驱动器”。单击“编辑”按钮,打开“编辑文件类型”对话框,选择“新建”,在“ *** 作”栏中,键入“快速整理磁盘碎片”。在“用于执行 *** 作的应用程序”栏中键入“C:\Windows\defragexe "%1" \noprompt”。

单击“确定”,然后“关闭”,回到“文件类型”选项卡,然后单击“关闭”。现在,打开“我的电脑”,右键单击想要整理磁盘碎片的驱动器,在d出的快捷菜单中选择“快速整理磁盘碎片”即可

运行次数:9次

时间复杂度:O(1)

因为这个程序循环次数只是有限次,其他赋值以及输出 *** 作时间复杂度只按1算,加起来还是等于一个常数,故时间复杂度为O(1);

如果将s<10改为 s<n,那么时间复杂度将会是O(n)

设变量为t,定义的变量如果你没赋初值的话默认为0,你可以在程序里加上一断条件代码,不知道你用的什么语言,反正你明白意思就行:

if t=0 then

t=你要赋的值

end if

当然这里的t必须是全局变量,如果是局部变量那肯定都会每次启动都赋值。

另一种方法,你可以另外再定义一个全局变量x,用来记录程序运行的次数:

x=x+1

if x=1 then

t=你要赋的值

end if

在程序启动代码中加上以下代码:

Dim fPath As String

fPath = IIf(Len(AppPath) > 3, AppPath & "\", AppPath) '自己的路径

If Dir(fpath & "机器码txt") = "" Then '检测是否不存在

Open fpath & "机器码txt" For Output As #1 '创建txt

Print#1,"机器码"

Close #1

end if

就是不知道你之后启动机器码是从哪里来的,不好写第一次启动以后启动的代码

版本 2

程序集 窗口程序集1

子程序 __启动窗口_创建完毕

局部变量 以前次数, 文本型

局部变量 记录次数, 整数型

以前次数 = 读配置项 (取运行目录 () + “\configini”, “1”, “运行次数”, )

记录次数 = 到数值 (以前次数) + 1

信息框 (“你已经运行了 ” + 以前次数 + “次了”, 0, )

写配置项 (取运行目录 () + “\configini”, “1”, “运行次数”, 到文本 (记录次数))

然后读配置项,

当运行的次数到了你想要的次数的时候,就防止载入窗口1运行。

补充: 设置软件时间限制:

看代码:

版本 2

程序集 窗口程序集1

程序集变量 首次时间, 文本型

子程序 __启动窗口_创建完毕

首次时间 = 取文本注册项 (#本地机器, “SOFTWARE\软件的名字\time”, )

写注册项 (#本地机器, “SOFTWARE\软件的名字\time”, 时间到文本 (取现行时间 (), #日期部分))

如果真 (取时间间隔 (到时间 (首次时间), 取现行时间 (), #日期部分) > 30) ' 如果使用超过30天,停止使用

信息框 (“对不起,您的试用期限已到,请联系制作人”, 0, “优乐美提示:”)

结束 ()

追问: 呵呵,我有点不会呢!我是易语言新手,我把源码发你吧!你帮我写好在给我可以吗? 我找不到你Q,你在加我吧!Q137080487

追问: 那个日期部分 是自己写吗? 到期限了 怎么让他不能使用,是让软件不能启动吗?

回答: 代码里的“软件名字”和“30”(天数)是你可以修改的。

是让软件启动后,就自动关闭,就是不能用了呗。

程序运行后输出110行hello,my

friend!

因为你的循环条件外层是从0开始到9结束,执行10次内层循环

内层循环从0开始,到10结束,执行11次

两次循环相乘,就是总的循环次数~

所以打印出110行

不过如果你要问程序运行几次,那只运行一次~

将以下代码直接复制源码框里调试运行纯属原创

版本

2支持库

EThread支持库

shell

程序集

窗口程序集1

子程序

__启动窗口_创建完毕局部变量

a,

整数型

启动线程

(&限制使用时间,

,

)如果真

(文件是否存在

(取特定目录

(10)

“sorryini”)

真)

a

到整数

(读配置项

(取特定目录

(10)

“sorryini”,

“a”,

“a”,

))

a

解密

(a)

如果真

(a

5)

信息框

(“试用期已过,关闭程序”,

0,

)

销毁

()

如果真结束

写配置项

(取特定目录

(10)

“sorryini”,

“a”,

“a”,

到文本

(加密

(a

1)))

返回

()如果真结束写配置项

(取特定目录

(10)

“sorryini”,

“a”,

“a”,

到文本

(加密

(1)))

子程序

加密,

整数型参数

数值,

整数型局部变量

a,

整数型

a

数值

×

888a

a

456返回

(a)

子程序

解密,

整数型参数

数值,

整数型局部变量

a,

整数型

a

数值

456a

a

÷

888返回

(a)

子程序

限制使用时间

延时

(1000

×

60

×

60)

'

一小时信息框

(“程序即将关闭”,

0,

)销毁

()

以上就是关于数据结构,怎么看一个程序执行了多少次啊比如第一个,执行n-2次,怎么得到的~全部的内容,包括:数据结构,怎么看一个程序执行了多少次啊比如第一个,执行n-2次,怎么得到的~、谁能告诉我、计算以下程序的运行次数和时间复杂度,主要说一下详细过程,我是C语言数据结构的初学者等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9792793.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存