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

\u6570\u636e\u7ed3\u6784\u65f6\u95f4\u590d\u6742\u5ea6\u548c\u7a7a\u95f4\u590d\u6742\u5ea6\u600e\u4e48\u7b97

\u7b97\u6cd5\u590d\u6742\u5ea6\u5206\u4e3a\u65f6\u95f4\u590d\u6742\u5ea6\u548c\u7a7a\u95f4\u590d\u6742\u5ea6\uff0c\u4e00\u4e2a\u597d\u7684\u7b97\u6cd5\u5e94\u8be5\u5177\u4f53\u6267\u884c\u65f6\u95f4\u77ed\uff0c\u6240\u9700\u7a7a\u95f4\u5c11\u7684\u7279\u70b9\u3002 \u968f\u7740\u8ba1\u7b97\u673a\u786c\u4ef6\u548c\u8f6f\u4ef6\u7684\u63d0\u5347\uff0c\u4e00\u4e2a\u7b97\u6cd5\u7684\u6267\u884c\u65f6\u95f4\u662f\u7b97\u4e0d\u592a\u7cbe\u786e\u7684\u3002\u53ea\u80fd\u4f9d\u636e\u7edf\u8ba1\u65b9\u6cd5\u5bf9\u7b97\u6cd5\u8fdb\u884c\u4f30\u7b97\u3002\u6211\u4eec\u629b\u5f00\u786c\u4ef6\u548c\u8f6f\u4ef6\u7684\u56e0\u7d20\uff0c\u7b97\u6cd5\u7684\u597d\u574f\u76f4\u63a5\u5f71\u54cd\u7a0b\u5e8f\u7684\u8fd0\u884c\u65f6\u95f4\u3002 \u6211\u4eec\u770b\u4e00\u4e0b\u5c0f\u4f8b\u5b50\uff1a int value = 0; // \u6267\u884c\u4e861\u6b21 for (int i = 0; i < n; i++) { // \u6267\u884c\u4e86n\u6b21 value += i; } \u8fd9\u4e2a\u7b97\u6cd5\u6267\u884c\u4e86 1 + n \u6b21\uff0c\u5982\u679cn\u65e0\u9650\u5927\uff0c\u6211\u4eec\u53ef\u4ee5\u628a\u524d\u8fb9\u76841\u5ffd\u7565\uff0c\u4e5f\u5c31\u662f\u8bf4\u8fd9\u4e2a\u7b97\u6cd5\u6267\u884c\u4e86n\u6b21 \u65f6\u95f4\u590d\u6742\u5ea6\u5e38\u7528\u5927O\u7b26\u53f7\u8868\u793a\uff0c\u8fd9\u4e2a\u7b97\u6cd5\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u5c31\u662fO(n). \u6982\u5ff5\uff1a \u4e00\u822c\u60c5\u51b5\u4e0b\uff0c\u7b97\u6cd5\u7684\u57fa\u672c\u64cd\u4f5c\u91cd\u590d\u6267\u884c\u7684\u6b21\u6570\u662f\u6a21\u5757n\u7684\u67d0\u4e00\u51fd\u6570f(n),\u56e0\u6b64\uff0c\u7b97\u6cd5\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u8bb0\u505a T(n) = O(f(n))\u3002 \u968f\u7740\u6a21\u5757n\u7684\u589e\u5927\uff0c\u7b97\u6cd5\u6267\u884c\u7684\u65f6\u95f4\u589e\u957f\u7387f(n)\u7684\u589e\u957f\u7387\u6210\u6b63\u6bd4\uff0c\u6240\u4ee5f(n)\u8d8a\u5c0f\uff0c\u7b97\u6cd5 \u7684\u65f6\u95f4\u590d\u6742\u5ea6\u8d8a\u4f4e\uff0c\u7b97\u6cd5\u7684\u6548\u7387\u8d8a\u9ad8\u3002 \u8ba1\u7b97\u65f6\u95f4\u590d\u6742\u5ea6 1.\u53bb\u6389\u8fd0\u884c\u65f6\u95f4\u4e2d\u7684\u6240\u6709\u52a0\u6cd5\u5e38\u6570\u3002 2.\u53ea\u4fdd\u7559\u6700\u9ad8\u9636\u9879\u3002 3.\u5982\u679c\u6700\u9ad8\u9636\u9879\u5b58\u5728\u4e14\u4e0d\u662f1\uff0c\u53bb\u6389\u4e0e\u8fd9\u4e2a\u6700\u9ad8\u9636\u76f8\u4e58\u7684\u5e38\u6570\u5f97\u5230\u65f6\u95f4\u590d\u6742\u5ea6 \u6211\u4eec\u770b\u4e00\u4e2a\u4f8b\u5b50 for (int i = 0; i < n; i++) { for (int j = i; j < n; j++) { // do ..... } }\u5f53 i = 0 \u65f6 \u91cc\u9762\u7684fo\u5faa\u73af\u6267\u884c\u4e86n\u6b21\uff0c\u5f53i\u7b49\u5f851\u65f6\u91cc\u9762\u7684for\u5faa\u73af\u6267\u884c\u4e86n - 1\u6b21\uff0c\u5f53i \u7b49\u4e8e2\u91cc\u91cc\u9762\u7684fro\u6267\u884c\u4e86n - 2\u6b21........\u6240\u4ee5\u6267\u884c\u7684\u6b21\u6570\u662f\u6839\u636e\u6211\u4eec\u4e0a\u8fb9\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u7b97\u6cd5 1.\u53bb\u6389\u8fd0\u884c\u65f6\u95f4\u4e2d\u7684\u6240\u6709\u52a0\u6cd5\u5e38\u6570\uff1a \u6ca1\u6709\u52a0\u6cd5\u5e38\u6570\u4e0d\u7528\u8003\u8651 2.\u53ea\u4fdd\u7559\u6700\u9ad8\u9636\u9879:\u3000\u53ea\u4fdd\u7559 3. \u53bb\u6389\u4e0e\u8fd9\u4e2a\u6700\u9ad8\u9636\u76f8\u4e58\u7684\u5e38\u6570: \u53bb\u6389 \u53ea\u5269\u4e0b \u6700\u7ec8\u8fd9\u4e2a\u7b97\u6cd5\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a \u518d\u770b\u4e00\u4e2a\u7ebf\u6027\u7684 for ( int i = 0; i < n; i++) { // do ..... } \u56e0\u4e3a\u5faa\u73af\u8981\u6267\u884cn\u6b21\u6240\u4ee5\u65f6\u95f4\u590d\u6742\u5ea6\u4e3aO(n)

\u6709\u7684\u7b97\u6cd5\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u4e00\u773c\u5c31\u80fd\u770b\u51fa\u6765,\u6709\u7684\u5219\u9700\u8981\u6570\u5b66\u8ba1\u7b97\u548c\u8bc1\u660e.\u6bd4\u5982\u8fd9\u4e2a\u7b97\u6cd5\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u5c31\u65e0\u6cd5\u76f4\u89c2\u7684\u770b\u51fa\u6765.\u5982\u679c\u4f60\u4e0d\u662f\u6570\u5b66\u4e13\u4e1a\u7684,\u611f\u89c9\u6ca1\u5fc5\u8981\u77e5\u9053\u8ba1\u7b97\u8fc7\u7a0b.\u53cd\u6b63\u7ecf\u5178\u67e5\u627e\u7b97\u6cd5\uff08\u4e0d\u5305\u62ec\u54c8\u5e0c\u4e86\u5c31\u3002\u3002\uff09\u5c31\u90a3\u4e48\u51e0\u79cd\uff1a\u4e8c\u5206\uff0c\u4e8c\u53c9\u6811\uff0c\u5806\uff0c\u987a\u5e8f\u67e5\u627e\u3002\u524d\u4e09\u4e2a\u90fd\u662flogn\uff0c\u6700\u540e\u4e00\u4e2a\u662fn\u3002\u8bb0\u4f4f\u5c31\u5b8c\u4e86

你好.T(n)=O( f (n) )  表示时间问题规模n的增大,算法执行时间 的增长率和f(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;}基本操作“x增1”的语句的频度分别为1.n和n的平方.则这三个程序段的时间复杂度分别 为.O(1). O(n)..O(n平方).分别为常量阶.线性阶.和平方阶...算法可能呈现 的时间 复杂度还有对数阶O(long n) .指数阶O(2 n方)等 .空间复杂度:  s(n)=O(f(n))其中n为问题的规模(或大小).一个上机执行的程序 除了需要存储空间来寄存本身所用指令.常数.变量和输入数据外.也要一些对数据进行操作 的工作单元和存储一些为实现计算所需信息的空间.若输入数据所占的空间只取决于问题本身,和算法无关,则只要分析除输入和程序之处的额处空间,否则应同时考虑输入本身所需空间...有点抽象...因为本人也学不好.所以.只能回答这些..见谅..

排序算法 所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 分类 在计算机科学所使用的排序算法通常被分类为: 计算的复杂度(最差、平均、和最好表现),依据串列(list)的大小(n)。一般而言,好的表现是O。(n log n),且坏的行为是Ω(n2)。对於一个排序理想的表现是O(n)。仅使用一个抽象关键比较运算的排序算法总平均上总是至少需要Ω(n log n)。 记忆体使用量(以及其他电脑资源的使用) 稳定度:稳定排序算法会依照相等的关键(换言之就是值)维持纪录的相对次序。也就是一个排序算法是稳定的,就是当有两个有相等关键的纪录R和S,且在原本的串列中R出现在S之前,在排序过的串列中R也将会是在S之前。 一般的方法:插入、交换、选择、合并等等。交换排序包含冒泡排序(bubble sort)和快速排序(quicksort)。选择排序包含shaker排序和堆排序(heapsort)。 当相等的元素是无法分辨的,比如像是整数,稳定度并不是一个问题。然而,假设以下的数对将要以他们的第一个数字来排序。 (4, 1) (3, 1) (3, 7) (5, 6) 在这个状况下,有可能产生两种不同的结果,一个是依照相等的键值维持相对的次序,而另外一个则没有: (3, 1) (3, 7) (4, 1) (5, 6) (维持次序) (3, 7) (3, 1) (4, 1) (5, 6) (次序被改变) 不稳定排序算法可能会在相等的键值中改变纪录的相对次序,但是稳定排序算法从来不会如此。不稳定排序算法可以被特别地时作为稳定。作这件事情的一个方式是人工扩充键值的比较,如此在其他方面相同键值的两个物件间之比较,就会被决定使用在原先资料次序中的条目,当作一个同分决赛。然而,要记住这种次序通常牵涉到额外的空间负担。 排列算法列表 在这个表格中,n是要被排序的纪录数量以及k是不同键值的数量。 稳定的 冒泡排序(bubble sort) — O(n2) 鸡尾酒排序 (Cocktail sort, 双向的冒泡排序) — O(n2) 插入排序 (insertion sort)— O(n2) 桶排序 (bucket sort)— O(n); 需要 O(k) 额外 记忆体 计数排序 (counting sort) — O(n+k); 需要 O(n+k) 额外 记忆体 归并排序 (merge sort)— O(n log n); 需要 O(n) 额外记忆体 原地归并排序 — O(n2) 二叉树排序 (Binary tree sort) — O(n log n); 需要 O(n) 额外记忆体 鸽巢排序 (Pigeonhole sort) — O(n+k); 需要 O(k) 额外记忆体 基数排序 (radix sort)— O(n·k); 需要 O(n) 额外记忆体 Gnome sort — O(n2) Library sort — O(n log n) with high probability, 需要 (1+ε)n 额外记忆体 不稳定 选择排序 (selection sort)— O(n2) 希尔排序 (shell sort)— O(n log n) 如果使用最佳的现在版本 Comb sort — O(n log n) 堆排序 (heapsort)— O(n log n) Smoothsort — O(n log n) 快速排序 (quicksort)— O(n log n) 期望时间, O(n2) 最坏情况; 对於大的、乱数串列一般相信是最快的已知排序 Introsort — O(n log n) Patience sorting — O(n log n + k) 最外情况时间, 需要 额外的 O(n + k) 空间, 也需要找到最长的递增子序列(longest increasing subsequence) 不实用的排序算法 Bogo排序 — O(n × n!) 期望时间, 无穷的最坏情况。 Stupid sort — O(n3); 递回版本需要 O(n2) 额外记忆体 Bead sort — O(n) or O(√n), 但需要特别的硬体 Pancake sorting — O(n), 但需要特别的硬体 排序的算法 排序的算法有

  • 鏁版嵁缁撴瀯鐨勬椂闂澶嶆潅搴鍜岀┖闂村鏉搴︽湁浠涔堝尯鍒?
    绛旓細鏁版嵁缁撴瀯涓瘎浠风畻娉曠殑涓や釜閲嶈鎸囨爣鏄細绌洪棿澶嶆潅搴︼細缂栧啓绋嬪簭锛岃繍琛岃繃绋嬩腑闇瑕佸崰鐢ㄧ殑鍐呭瓨绌洪棿锛屽綋鐒惰秺灏忚秺濂锛涙椂闂村鏉傚害锛氱▼搴忚繍琛岃繃绋嬩腑鎵鐢ㄧ殑鏃堕棿锛岃秺灏戣秺濂姐傛椂闂村鏉傚害鏄悓涓闂鍙敤涓嶅悓绠楁硶瑙e喅锛岃屼竴涓畻娉曠殑璐ㄩ噺浼樺姡灏嗗奖鍝嶅埌绠楁硶涔冭嚦绋嬪簭鐨勬晥鐜囥傜畻娉曞垎鏋愮殑鐩殑鍦ㄤ簬閫夋嫨鍚堥傜畻娉曞拰鏀硅繘绠楁硶銆傝绠楁満绉戝...
  • 鏁版嵁缁撴瀯涓璇勪环绠楁硶鐨涓昏鎸囨爣鏄粈涔?
    绛旓細1銆佹椂闂村鏉傚害锛氱畻娉曠殑鏃堕棿澶嶆潅搴︽槸鎸囨墽琛岀畻娉曟墍闇瑕佺殑璁$畻宸ヤ綔閲銆備竴鑸潵璇达紝璁$畻鏈虹畻娉曟槸闂瑙勬ān 鐨勫嚱鏁癴(n)锛岀畻娉曠殑鏃堕棿澶嶆潅搴︿篃鍥犳璁板仛銆2銆佺┖闂村鏉傚害锛氱畻娉曠殑绌洪棿澶嶆潅搴︽槸鎸囩畻娉曢渶瑕佹秷鑰楃殑鍐呭瓨绌洪棿銆傚叾璁$畻鍜岃〃绀烘柟娉曚笌鏃堕棿澶嶆潅搴︾被浼硷紝涓鑸兘鐢ㄥ鏉傚害鐨勬笎杩戞ф潵琛ㄧず銆傚悓鏃堕棿澶嶆潅搴︾浉姣旓紝绌洪棿...
  • 鏁版嵁缁撴瀯 | 鏃堕棿涓庣┖闂村鏉傚害灏辩湅杩欑瘒浜
    绛旓細绌洪棿澶嶆潅搴︼紝椤惧悕鎬濅箟锛屽叧娉ㄧ殑鏄畻娉曡繍琛屾椂鎵闇鐨勯澶栧瓨鍌ㄧ┖闂銆侳unc1鐨勭┖闂村鏉傚害涓篛(1)锛屾病鏈夋樉钁楀鍔犲唴瀛樺紑閿銆傝屽湪閫掑綊鍑芥暟涓紝濡傞樁涔橀掑綊锛岀┖闂村鏉傚害涓篛(N)锛屽弽鏄犱簡閫掑綊璋冪敤鏍堢殑浣跨敤銆傛荤粨鏉ヨ锛屾椂闂村鏉傚害鍜岀┖闂村鏉傚害鏄畻娉曡璁$殑涓や釜鍏抽敭缁村害銆傜悊瑙e畠浠殑璁$畻鏂规硶鍜岄掑綊绛栫暐锛屽皢鏈夊姪浜庝紭鍖...
  • 鏁版嵁缁撴瀯涓畻娉曠殑鏃堕棿鍜岀┖闂村鏉傚害鎬庝箞璁$畻
    绛旓細}鍩烘湰鎿嶄綔鈥渪澧1鈥濈殑璇彞鐨勯搴﹀垎鍒负1.n鍜宯鐨勫钩鏂癸紟鍒欒繖涓変釜绋嬪簭娈电殑鏃堕棿澶嶆潅搴﹀垎鍒涓猴紟O(1). O(n)..O(n骞虫柟)锛庡垎鍒负甯搁噺闃讹紟绾挎ч樁锛庡拰骞虫柟闃讹紟锛庯紟绠楁硶鍙兘鍛堢幇銆鐨勬椂闂淬澶嶆潅搴﹁繕鏈夊鏁伴樁O(long n)銆锛庢寚鏁伴樁O(2 n鏂)绛夈锛庣┖闂村鏉傚害锛歴(n)=O(...
  • 瑙i噴绠楁硶鐨勬椂闂澶嶆潅搴鍜岀┖闂村鏉傚害
    绛旓細绠楁硶鐨勭┖闂村鏉傚害鏄寚绠楁硶鎵ц鏃舵墍闇鐨勬渶澶у瓨鍌ㄧ┖闂銆傞氬父锛岀┖闂村鏉傚害涔熺敤澶绗﹀彿琛ㄧず銆備緥濡傦紝濡傛灉绠楁硶闇瑕佸瓨鍌╪涓厓绱狅紝绌洪棿澶嶆潅搴﹀氨鏄疧(n)銆傚鏋滅畻娉曢渶瑕佸瓨鍌╪2涓厓绱狅紝绌洪棿澶嶆潅搴﹀氨鏄疧(n2)銆傚鏋滅畻娉曢渶瑕佸瓨鍌╨og n涓厓绱狅紝绌洪棿澶嶆潅搴﹀氨鏄疧(log n)銆傜畻娉曠殑鏃堕棿澶嶆潅搴﹀拰绌洪棿澶嶆潅搴︾殑鍏崇郴 绠楁硶鐨...
  • 鏁版嵁缁撴瀯涓璇勪环绠楁硶鐨涓や釜閲嶈鎸囨爣鏄
    绛旓細鏁版嵁缁撴瀯涓瘎浠风畻娉曠殑涓や釜閲嶈鎸囨爣鏄绌洪棿澶嶆潅搴︺佹椂闂村鏉傚害銆傜┖闂村鏉傚害(Space Complexity)鏄涓涓畻娉曞湪杩愯杩囩▼涓复鏃跺崰鐢ㄥ瓨鍌ㄧ┖闂村ぇ灏忕殑閲忓害锛岃鍋歋(n)=O(f(n))銆傛瘮濡傜洿鎺ユ彃鍏ユ帓搴忕殑鏃堕棿澶嶆潅搴︽槸O(n^2)锛岀┖闂村鏉傚害鏄疧(1)銆傝屼竴鑸殑閫掑綊绠楁硶灏辫鏈塐(n)鐨勭┖闂村鏉傚害浜嗭紝鍥犱负姣忔閫掑綊閮借瀛樺偍...
  • 鏁版嵁缁撴瀯鏃堕棿澶嶆潅搴鍜岀┖闂村鏉傚害鎬庝箞绠
    绛旓細绠楁硶澶嶆潅搴﹀垎涓烘椂闂村鏉傚害鍜岀┖闂村鏉傚害锛屼竴涓ソ鐨勭畻娉曞簲璇ュ叿浣撴墽琛屾椂闂寸煭锛屾墍闇绌洪棿灏戠殑鐗圭偣銆 闅忕潃璁$畻鏈虹‖浠跺拰杞欢鐨勬彁鍗囷紝涓涓畻娉曠殑鎵ц鏃堕棿鏄畻涓嶅お绮剧‘鐨勩傚彧鑳戒緷鎹粺璁℃柟娉曞绠楁硶杩涜浼扮畻銆傛垜浠姏寮纭欢鍜岃蒋浠剁殑鍥犵礌锛岀畻娉曠殑濂藉潖鐩存帴褰卞搷绋嬪簭鐨勮繍琛屾椂闂淬 鎴戜滑鐪嬩竴涓嬪皬渚嬪瓙锛 int value =...
  • 璇烽棶浠涔堝彨绌洪棿澶嶆潅搴,鍜鏃堕棿澶嶆潅搴?O(n^2)鍜孫(n)鏄粈涔堟剰鎬?
    绛旓細璁颁綔T(n)=O(f(n)),绉癘(f(n)) 涓虹畻娉曠殑娓愯繘鏃堕棿澶嶆潅搴锛岀畝绉版椂闂村鏉傚害銆傚湪鍚勭涓嶅悓绠楁硶涓紝鑻ョ畻娉曚腑璇彞鎵ц娆℃暟涓轰竴涓父鏁帮紝鍒欐椂闂村鏉傚害涓篛(1),鍙﹀锛屽湪鏃堕棿棰戝害涓嶇浉鍚屾椂锛屾椂闂村鏉傚害鏈夊彲鑳界浉鍚岋紝濡 T(n)=n2+3n+4涓嶵(n)=4n2+2n+1瀹冧滑鐨勯搴︿笉鍚岋紝浣嗘椂闂村鏉傚害鐩稿悓锛岄兘涓篛(n2)...
  • 銆鏁版嵁缁撴瀯銆戜竴绡囨枃绔犲甫浣犲交搴曞悆閫徛绠楁硶澶嶆潅搴
    绛旓細绠楁硶鏁堢巼鐨勫害閲 鏃堕棿澶嶆潅搴︼紝濡侽(n^2)锛屾彮绀轰簡绠楁硶杩愯鏃堕棿涓庤緭鍏ヨ妯$殑鍏崇郴銆傚畠涓嶄粎鏄悊璁轰笂鐨勬渶鍧忔儏鍐碉紝涔熸槸璇勪及绠楁硶鏁堢巼鐨勯噸瑕佹寚鏍囥绌洪棿澶嶆潅搴锛屽垯鍏虫敞绋嬪簭鍦ㄦ墽琛岃繃绋嬩腑棰濆瀛樺偍绌洪棿鐨勯渶姹傘傚疄渚嬭В鏋 妗堜緥1锛氫袱涓祵濂楀惊鐜紝鏃堕棿澶嶆潅搴︿负O(M+N)锛屽綋鍏朵腑涓涓繙澶т簬鍙︿竴涓椂锛屽奖鍝嶆晥鐜囨槑鏄撅紝濡侽(M...
  • 鏁版嵁缁撴瀯閲鎬庝箞绠鏃堕棿澶嶆潅搴鍜岀┖闂村鏉搴?
    绛旓細绌洪棿澶嶆潅搴 锛氱嚎鎬ц〃鍜岄摼琛ㄩ兘鏄嚎鎬х殑锛屾爲鐨勮瘽锛屼竴鑸槸O锛坙og2n锛夈傚浘鐨勮澶嶆潅寰堝锛屼竴鑸笉鑰冭檻銆傛椂闂村鏉傚害锛氬熀鏈繍绠楄鍙ョ殑鎵ц娆℃暟锛堜竴鑸槸鏈娣卞眰寰幆鍐呯殑璇彞锛夛紝姣斿 for(int i = 0; i < n; i ++) printf(" study\n"); // 鍩烘湰杩愮畻璇彞涓婅堪鐨勫鏉傚害涓篛锛坣锛夛紝 杩樻湁灏辨槸 瑕...
  • 扩展阅读:用空间换时间的算法 ... 八种排序时间复杂度 ... 空间心算法有用吗 ... 空间数据结构转换方法 ... 数据结构的十大算法 ... 数据挖掘十大算法 ... 一张图看懂时间复杂度 ... 数据结构真的很难学吗 ... 算法的时间复杂度和空间成什么比 ...

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