数据结构算法的时间复杂度 数据结构中算法的时间和空间复杂度怎么计算

\u6570\u636e\u7ed3\u6784\u4e2d\u7b97\u6cd5\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u662f\u4ec0\u4e48\uff1f

\u7a0b\u5e8f\u6240\u7528\u65f6\u95f4\u5173\u4e8e\u6570\u636e\u89c4\u6a21\u7684\u51fd\u6570
\u6bd4\u5982\uff1a
\u7ed9n\u4e2a\u6570\u6392\u5e8f\u9700\u8981n^2\u7684\u65f6\u95f4
\u65f6\u95f4\u590d\u6742\u5ea6\u5c31\u662fO\uff08n^2\uff09
\u901a\u5e38\u6709
O(2)
\u5e38\u6570
\u4e0e\u8f93\u5165\u6570\u636e\u89c4\u6a21\u65e0\u5173
O(n)
\u6210\u6b63\u6bd4
O(log2n)
\u5e73\u65b9\u4e0e\u6570\u636e\u89c4\u6a21\u6210\u6b63\u6bd4
O(n^2)
\u4e0e\u6570\u636e\u89c4\u6a21\u7684\u5e73\u65b9\u6210\u6b63\u6bd4
O(n^3)
\u2026\u2026\u4e09\u6b21\u65b9\u2026\u2026
O(n!)
\u9636\u4e58

\u4f60\u597d\uff0eT(n)\uff1dO( f (n) ) \u3000\u8868\u793a\u65f6\u95f4\u95ee\u9898\u89c4\u6a21n\u7684\u589e\u5927\uff0c\u7b97\u6cd5\u6267\u884c\u65f6\u95f4\u3000\u7684\u589e\u957f\u7387\u548cf(n)\u7684\u589e\u957f\u7387\u76f8\u540c\uff0e\u79f0\u4f5c\u3000\u65f6\u95f4\u590d\u6742\u5ea6\uff0e\u5982\u4e0b\uff1a1.\u3000{++x;s=0}2.\u3000for (i=1;i<=n;++i) { ++x; s+=x;}3.\u3000for ( j=1; j<=n;++j ) for (k+1;j<=n;++k) { ++x;s+=x;}\u57fa\u672c\u64cd\u4f5c\u201cx\u589e1\u201d\u7684\u8bed\u53e5\u7684\u9891\u5ea6\u5206\u522b\u4e3a1.n\u548cn\u7684\u5e73\u65b9\uff0e\u5219\u8fd9\u4e09\u4e2a\u7a0b\u5e8f\u6bb5\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u5206\u522b\u3000\u4e3a\uff0eO(1). O(n)..O(n\u5e73\u65b9)\uff0e\u5206\u522b\u4e3a\u5e38\u91cf\u9636\uff0e\u7ebf\u6027\u9636\uff0e\u548c\u5e73\u65b9\u9636\uff0e\uff0e\uff0e\u7b97\u6cd5\u53ef\u80fd\u5448\u73b0\u3000\u7684\u65f6\u95f4\u3000\u590d\u6742\u5ea6\u8fd8\u6709\u5bf9\u6570\u9636O(long n)\u3000\uff0e\u6307\u6570\u9636O(2 n\u65b9)\u7b49\u3000\uff0e\u7a7a\u95f4\u590d\u6742\u5ea6\uff1a\u3000\u3000s(n)=O(f(n))\u5176\u4e2dn\u4e3a\u95ee\u9898\u7684\u89c4\u6a21\uff08\u6216\u5927\u5c0f\uff09\uff0e\u4e00\u4e2a\u4e0a\u673a\u6267\u884c\u7684\u7a0b\u5e8f\u3000\u9664\u4e86\u9700\u8981\u5b58\u50a8\u7a7a\u95f4\u6765\u5bc4\u5b58\u672c\u8eab\u6240\u7528\u6307\u4ee4\uff0e\u5e38\u6570\uff0e\u53d8\u91cf\u548c\u8f93\u5165\u6570\u636e\u5916\uff0e\u4e5f\u8981\u4e00\u4e9b\u5bf9\u6570\u636e\u8fdb\u884c\u64cd\u4f5c\u3000\u7684\u5de5\u4f5c\u5355\u5143\u548c\u5b58\u50a8\u4e00\u4e9b\u4e3a\u5b9e\u73b0\u8ba1\u7b97\u6240\u9700\u4fe1\u606f\u7684\u7a7a\u95f4\uff0e\u82e5\u8f93\u5165\u6570\u636e\u6240\u5360\u7684\u7a7a\u95f4\u53ea\u53d6\u51b3\u4e8e\u95ee\u9898\u672c\u8eab\uff0c\u548c\u7b97\u6cd5\u65e0\u5173\uff0c\u5219\u53ea\u8981\u5206\u6790\u9664\u8f93\u5165\u548c\u7a0b\u5e8f\u4e4b\u5904\u7684\u989d\u5904\u7a7a\u95f4\uff0c\u5426\u5219\u5e94\u540c\u65f6\u8003\u8651\u8f93\u5165\u672c\u8eab\u6240\u9700\u7a7a\u95f4...\u6709\u70b9\u62bd\u8c61\uff0e\uff0e\uff0e\u56e0\u4e3a\u672c\u4eba\u4e5f\u5b66\u4e0d\u597d\uff0e\u6240\u4ee5\uff0e\u53ea\u80fd\u56de\u7b54\u8fd9\u4e9b\uff0e\uff0e\u89c1\u8c05\uff0e\uff0e

按照分析惯例,假设所有单一运算的时间复杂度均为1

x=n; ......1
while(x>=(y+1)*(y+1)) ......4(两次加法、1次乘法、1次比较)
y=y+1 ......1

时间复杂度 = 1 + (4 + 1) x 循环次数

循环次数是由n和y的初始值决定的,假设循环次数为N,y的初始值为y0,y的结束状态为yn,有
x < (yn + 1)*(yn + 1) ......假设y的初始值为整数,则yn为满足该式的最小整数
N = (yn - y0) / 1 ......因为每次循环y的递增量为1
1式简化为 x = (yn + 1)*(yn + 1),可得:yn = n^(1/2) - 1
所以N = n^(1/2) - 1 - y0
采用大O表示法,仅考虑最高次项,则求N的复杂度为O(n^(1/2))

进而求得你这3行代码的
总体复杂度 = 1 + (4 + 1) x O(n^(1/2))

由于已知的常数项及非最高次项通常会被忽略(大O精神),所以总时间复杂度为O(n^(1/2))

************我谈**********************
“如果执行时间的算法不按照问题规模n的增加而增长,即使成千上万的语句的算法,其执行的时间,但也有大量的常数。该算法的时间复杂度是O(1)。“

不要明白这一点吗?

所以该算法是不是说多少单一的语言
温度=;
= J;

J =温度; />共三种语言中,和每个频率是1,且每个频率可以被认为是O(1),则T(n)的= O的(1)+ O(1)+ O(1)= O( 1)。

以下四个语句:
scanf的(“为%d”,&N);
= N;
(I = 0,<N我+ +)= I * 1(这也只能算是一个)

(I = 0,I <n * n的,我+ +)= I×1; (同上)
前两个栏的频率分别为
频率为N和N * N
(1)的总频率的所有
O. + O (1)+ O(N)+ O(N * N)= O(N * N)
(为什么这个等式的左边是等于右侧的O(N * N)??不要问我,我懒得说了,这是一个C / C + +的问题,这是一个数学问题,不明白自己看到的高等数学。)

声明,更多的是总是有限的,或一个单独的语句的频率最花时间

单个语句,比如for(){(){(){}}}而( 1){(){}}等等这样的,可以视为一个忘记

一份声明中可以执行了N年没有完成,如:F(I = 0; + +),除非你终止!!

n^(1/2)-y0=O(N^(1/2))



sqrt(y)

  • 鏁版嵁缁撴瀯绠楁硶鐨勬椂闂村鏉傚害
    绛旓細鎸夌収鍒嗘瀽鎯緥锛屽亣璁炬墍鏈夊崟涓杩愮畻鐨勬椂闂村鏉傚害鍧囦负1 x=n; ...1 while(x>=(y+1)*(y+1)) ...4(涓ゆ鍔犳硶銆1娆′箻娉曘1娆℃瘮杈)y=y+1 ...1 鏃堕棿澶嶆潅搴 = 1 + (4 + 1) x 寰幆娆℃暟 寰幆娆℃暟鏄敱n鍜寉鐨勫垵濮嬪煎喅瀹氱殑锛屽亣璁惧惊鐜鏁颁负N锛寉鐨勫垵濮嬪间负y0锛寉鐨勭粨鏉熺姸鎬佷负yn锛...
  • 璁$畻鏈鏁版嵁缁撴瀯鏃堕棿澶嶆潅搴?
    绛旓細鏃堕棿澶嶆潅搴璁$畻涓鸿繎浼艰绠 璁$畻鍘熷垯 鐣欓珮闃讹紝鍘讳綆闃讹紝鍘诲父鏁帮紝杩戜技鍙栧 n锛坣-1锛/2 =(n^2)/2+n/2锛坣/2:灏辨槸浣庨樁锛屽洜涓哄畠涓娆℃柟锛沶^2鐨勪簩鍒嗕箣涓锛氭槸甯告暟锛夌害绛変簬=n^2 鏃堕棿澶嶆潅搴︿负锛歄(n^2)渚嬪 100000*(n^3)+n^2+n+10000000;鏍规嵁璁$畻鍘熷垯 澶嶆潅搴︿负O(n^3)...
  • 鏁版嵁缁撴瀯鏃堕棿澶嶆潅搴鐨勮绠楄繖涓庝箞绠?
    绛旓細璁$畻鏁版嵁缁撴瀯鐨勬椂闂村鏉傚害閫氬父娑夊強鍒板垎鏋愮畻娉曚腑鍚勪釜鎿嶄綔鐨勬墽琛屾鏁帮紝鐒跺悗鐢ㄥぇO绗﹀彿锛圤锛夋潵琛ㄧず绠楁硶鐨娓愯繘鏃堕棿澶嶆潅搴︺備互涓嬫槸璁$畻鏃堕棿澶嶆潅搴︾殑涓鑸楠わ細纭畾鍩烘湰鎿嶄綔锛氶鍏堬紝瑕佺‘瀹氬湪绠楁硶涓墽琛岀殑鍩烘湰鎿嶄綔鏄粈涔堛傝繖閫氬父鏄惊鐜佹潯浠惰鍙ャ佽祴鍊兼搷浣滅瓑銆備綘闇瑕佸叧娉ㄦ渶棰戠箒鎵ц鐨勬搷浣溿傚垎鏋愬惊鐜細濡傛灉绠楁硶涓湁寰幆...
  • 鏁版嵁缁撴瀯涓绠楁硶鐨勬椂闂鍜岀┖闂澶嶆潅搴鎬庝箞璁$畻
    绛旓細浣犲ソ锛嶵(n)锛漁( f (n) ) 銆琛ㄧず鏃堕棿闂瑙勬ān鐨勫澶э紝绠楁硶鎵ц鏃堕棿銆鐨勫闀跨巼鍜宖(n)鐨勫闀跨巼鐩稿悓锛庣О浣溿鏃堕棿澶嶆潅搴锛庡涓嬶細1.銆{++x;s=0}2.銆for (i=1;i<=n;++i) { ++x; s+=x;}3.銆for ( j=1; j<=n;++j ) for (k+1;j<=n;++k) { ++x;s+=x;}鍩烘湰鎿嶄綔...
  • 鏁版嵁缁撴瀯涓帓搴忓拰鏌ユ壘鍚勭鏃堕棿澶嶆潅搴
    绛旓細鏁版嵁缁撴瀯涓帓搴忓拰鏌ユ壘鍚勭鏃堕棿澶嶆潅搴 (1)鍐掓场鎺掑簭 鍐掓场鎺掑簭灏辨槸鎶婂皬鐨勫厓绱犲線鍓嶈皟鎴栬呮妸澶х殑鍏冪礌寰鍚庤皟銆傛瘮杈冩槸鐩搁偦鐨勪袱涓厓绱犳瘮杈冿紝浜ゆ崲涔熷彂鐢熷湪杩欎袱涓厓绱犱箣闂淬傛墍浠ョ浉鍚屽厓绱犵殑鍓嶅悗椤哄簭骞舵病鏈夋敼鍙橈紝鎵浠ュ啋娉℃帓搴忔槸涓绉嶇ǔ瀹氭帓搴绠楁硶銆(2)閫夋嫨鎺掑簭 閫夋嫨鎺掑簭鏄粰姣忎釜浣嶇疆閫夋嫨褰撳墠鍏冪礌鏈灏忕殑锛屾瘮濡傜粰绗竴涓...
  • 鏁版嵁缁撴瀯鏃堕棿澶嶆潅搴
    绛旓細寰幆閫鍑烘潯浠朵负i >= n;鐪嬪惊鐜綋涓紝姣忔寰幆i澧炲姞涓锛岀涓涓惊鐜畬鍚巌涓2锛岀浜屾寰幆瀹屽悗i涓3 浜庢槸绗琻-1娆″惊鐜悗i鐨勫间负n锛屾濂介鍑哄惊鐜 鍥犳鎵ц娆℃暟n - 1锛鏃堕棿澶嶆潅搴涓篛(n) 鍘绘帀鍏朵腑甯搁噺
  • 鏁版嵁缁撴瀯涓鐨勬椂闂村鏉傚害鍜嬬悊瑙e憖,姹傛彺鍔
    绛旓細鏃堕棿澶嶆潅搴︼細闅忕潃杈撳叆瑙勬ā鐨勫澶э紝璁$畻鎵闇鐨勬椂闂寸殑澧為暱鏂瑰紡銆傝浣忚繖鍙槸澧為暱鏂瑰紡锛屽苟涓嶆槸涓涓弗鏍肩殑鍑芥暟銆傛墍浠ュ浜嶰锛坣2锛 鐨勬椂闂村鏉傚害锛岄殢鐫n澧為暱锛岄偅涔堣绠楅棶棰樻墍闇鐨勬椂闂寸殑澧為暱鏂瑰紡鏄簩娆″嚱鏁般傚浜庡叾浠栫殑琛ㄧず鏂规硶鏄被浼肩殑瑙i噴銆傚啀涓句竴涓緥瀛愶紝濡傛灉浣犺绠楁椂闂村鏉傚害鐨勬椂鍊欙紝绠楀嚭鏉ユ槸 O(n2) + O(...
  • 鏁版嵁缁撴瀯鏃堕棿澶嶆潅搴鍜岀┖闂村鏉傚害鎬庝箞绠
    绛旓細涔熷氨鏄杩欎釜绠楁硶鎵ц浜唍娆 鏃堕棿澶嶆潅搴﹀父鐢ㄥぇO绗﹀彿琛ㄧず锛岃繖涓绠楁硶鐨勬椂闂村鏉傚害灏辨槸O(n). 姒傚康锛 涓鑸儏鍐典笅锛岀畻娉曠殑鍩烘湰鎿嶄綔閲嶅鎵ц鐨勬鏁版槸妯″潡n鐨勬煇涓鍑芥暟f(n),鍥犳锛岀畻娉曠殑鏃堕棿澶嶆潅搴﹁鍋 T(n) = O(f(n))銆 闅忕潃妯″潡n鐨勫澶э紝绠楁硶鎵ц鐨勬椂闂村闀跨巼f(n)鐨勫闀跨巼鎴愭姣旓紝鎵浠(...
  • 鏁版嵁缁撴瀯 棰樼洰 鏃堕棿澶嶆潅搴
    绛旓細绠楁硶鐨鍔熻兘锛氬綋S鐨勫煎皬浜巒鏃讹紝i涓嶆柇鐨勮嚜鍔狅紝涓旀妸i绱姞鐨凷涓娿傚嚱鏁拌繑鍥瀒鐨勫硷紝鍗宠绠梚鍏辫嚜鍔犱簡澶氬皯娆°鏃堕棿澶嶆潅搴锛歄锛坣锛夈傚弬鑰冭祫鏂欙細鏃堕棿澶嶆潅搴︾殑瀹氫箟
  • 扩展阅读:如何求while时间复杂度 ... 一张图看懂时间复杂度 ... 怎么算时间复杂度 ... 常见算法的时间复杂度 ... 查找算法的时间复杂度 ... 十种排序的时间复杂度 ... 几种查找的时间复杂度 ... 数据结构时间复杂度表 ... 如何估算算法的时间复杂度 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网