算法通关村第三关--青铜挑战

1.青铜挑战

1.1线性表

线性表就具有相同特征数据元素的一个有限序列,其中所含元素的个数称为线性表的长度,从不同角度,线性表有不同分类

语言角度:

图a为一体式结构,存储表信息的单元与元素存储区以连续的方式安排在一块存储区里,两部分数据的整体形成一个完整的顺序表对象,例如c和cpp

图b为分离式结构,表对象里只保存与整个表有关的信息(即容量和元素个数),实际数据元素存放在另一个独立的元素存储区里,通过链接与基本表对象关联,例如java和python

存储角度:

顺序型和链表型

从访问限制的角度:

栈和队列访问受限,只能在固定位置进行操作

从扩容的角度:

采用分离式结构的顺序表,若将数据区更换为存储空间更大的区域,则可以在不改变表对象的前提下对其数据存储区进行了扩充,所有使用这个表的地方都不必修改。只要程序的运行环境(计算机系统)还有空闲存储,这种表结构就不会因为满了而导致操作无法进行。人们把采用这种技术实现的顺序表称为动态顺序表,因为其容量可以在使用中动态变化。

扩充的两种策略:

第一种:每次扩充增加固定数目的存储位置,如每次扩充增加10个元素位置,这种策略可称为线性增长。特点:节省空间,但是扩充操作频繁,操作次数多。

第二种:每次扩充容量加倍,如每次扩充增加一倍存储空间。特点:减少了扩充操作的执行次数,但可能会浪费空间资源。以空间换时间,推荐的方式。

1.2数组的插入和删除

数组的插入和删除操作重点在于插入或删除结点位置的确定,结点的移动,以及一些边界位置的判断

代码如下

插入操作

    /**
     *
     * @param arr 进行插入操作的数组
     * @param size 数组已存储元素的个数
     * @param key 插入的数
     * @return
     */
    //该插入操作的前提是数组是非递减
    public  static  int insert(int[] arr,int size,int key){
        //数组已满无法插入
        if(size==arr.length){
            return 0;
        }
        //初始插入位置为size,遍历一次后若index还是size,说明插在尾部
        int index=size;
        for(int i=0;i<size;i++){
            if(key<=arr[i]){
                index=i;
                break;
            }
        }
        //后移操作
        for(int j=size;j>index;j--){
            arr[j]=arr[j-1];
        }
        arr[index]=key;
        size=size+1;
        return index;
    }

删除操作

    /**
     *
     * @param arr 删除操作的数组
     * @param size 已经存储的元素个数
     * @param key 删除的元素的值
     * @return
     */
    //本方法适用于删除第一个值为key的元素
    public static int delete(int[] arr,int size,int key){
        int index=-1;
        for(int i=0;i<size;i++){
            if(arr[i]==key){
                index=i;
                break;
            }
        }
        //前移操作
        if(index!=-1){
            for(int j=index;j<size-1;j++){
                arr[j]=arr[j+1];
            }
            size=size-1;
        }
        return size;
    }

  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
头歌(K-means)聚类算法是一种常用的无监督机器学习方法,用于将数据集划分为多个具有相似特征的簇。在K-means的第一步,也就是加载数据,你需要按照以下步骤操作: 1. **数据准备**:首先,你需要确保你有一个包含数值特征的数据集。这些特征可以是连续的,如身高、体重等,或者是离散的,如年龄组别、颜色编码等。数据可以存储在CSV、Excel、数据库或其他适合处理的文件格式中。 2. **数据导入**:使用合适的编程语言和库,如Python的Pandas库,读取数据。例如: ```python import pandas as pd data = pd.read_csv('your_data.csv') # 替换为你的数据文件路径 ``` 3. **数据预处理**:对数据进行清洗,处理缺失值、异常值或标准化/归一化数值特征,使其适合K-means算法的要求。 4. **选择特征**:如果数据包含大量特征,可能需要选择影响聚类效果的关键特征。可以使用相关性分析或降维技术(如PCA)来确定。 5. **创建数据矩阵**:将数据转化为数值型矩阵,方便算法处理。如果数据已经是数组形式,可以直接使用。 6. **定义参数**:设置K-means的参数,如簇的数量(k)、迭代次数、初始化簇中心的方法(如随机或K-means++)等。 完成这些步骤后,你就为K-means算法做好了数据加载和预处理的准备,可以进入算法的实际运行阶段了。接下来,你可能会进行数据划分到初始簇、迭代更新簇中心以及评估结果等操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值