zoukankan      html  css  js  c++  java
  • 原地算法(in-place algorithm)

    原地算法(in-place algorithm)

    在计算机科学中,一个原地算法(in-place algorithm)基本上不需要额外辅助的数据结构,然而,允许少量额外的辅助变量来转换数据的算法。当算法运行时,输入的数据通常会被要输出的部分覆盖掉。不是原地算法有时候称为非原地(not-in-place)或不得其所(out-of-place)

    假设我们有n个元素的数组,此时需要我们将数组逆转。其实正常来说我们第一反应肯定会我在创建一个空数组来进行存储,然后在新数组中的最小下标指向原数组的最大下标。这样我们的新数组就会产生垃圾

    vector<int> ReseverArray(vector<int>&v){
        int n = v.size();
        int len = n -1;
        vector<int>newV(n);
        for(int i=0;i<n;++i){
            newV[i] = v[len--];
        }
     	return newV;   
    }
    

    我们不由然想到如何通过数组本身实现逆转(即不利于额外空间实现)

    vector<int> ReseverArray(vector<int>&v){
        int n = v.size();
        for(int i = 0;i<n/2;++i){
            swap(v[i],v[n-i-1]);
        }
        return v;
    }
    

    这种在只在现有的数组里面进行操作,不在额外的开辟空间,就是一种原地算法了。


    快速排序通常被描述为一个原地算法,但是事实上并不是。大部分的实现需要O(log n)的空间来支持它的分治法(divide-and-conquer)递归

  • 相关阅读:
    Mybatis学习01:利用mybatis查询数据库
    SpringBoot_登录注册
    python抓取中科院大学招聘
    centos7设置固定IP
    PIL给图片加水印
    You can ignore those files in your build.gradle
    mysql事件执行时间
    wampserver2.5域名解析错误问题
    Mysql错误消息 语言设置
    js控制select多选
  • 原文地址:https://www.cnblogs.com/RioTian/p/12620886.html
Copyright © 2011-2022 走看看