KNN算法简介与思路分析
简介KNN算法(K-Nearest Neighbors,K近邻算法),其基本思想是:如果一个样本在特征空间中的k个最相似的样本中的大多数属于某个类别,则该样本也属于这个类别。有点像“物以类聚,人以群分”。 用途(有监督学习) 分类问题(标签不连续):KNN算法可以用于分类问题,它根据样本的特征向量找到其k个最邻近的样本,并将这些样本的类别进行投票,选择出现次数最多的类别作为该样本的类别。 回归问题(标签连续):KNN算法可以用于回归问题,它根据样本的特征向量找到其k个最邻近的样本,并将这些样本的输出值进行平均,作为该样本的输出值。 如何确定样本的相似性?KNN算法的核心是计算样本之间的距离,距离的度量方法有很多种,常用的有欧氏距离、曼哈顿距离(街区距离)、切比雪夫距离等。样本距离越近,则样本之间的相似性越高。 算法流程1. 分类问题: 计算待分类样本与训练集中每个样本之间的距离。 按照距离升序排序。 取出距离最近的K个训练样本 进行多数表决(投票):统计K个样本中哪个类别的样本个数最多。 将未知样本的类别设置为多数表决的类别。 代码实现:1234567891011121314...
递归解决汉诺塔
题目描述汉诺塔由三根柱子(分别用A、B、C表示)和n个大小互不相同的空心盘子组成。一开始n个盘子都摞在柱子A上,大的在下面,小的在上面,形成了一个塔状的锥形体。对汉诺塔的一次合法的操作是指:从一根柱子的最上层拿一个盘子放到另一根柱子的最上层,同时要保证被移动的盘子一定放在比它更大的盘子上面(如果移动到空柱子上就不需要满足这个要求)。我们可以用两个字母来描述一次操作:第一个字母代表起始柱子,第二个字母代表目标柱子。例如,AB就是把柱子A最上面的那个盘子移到柱子B。汉诺塔的游戏目标是将所有的盘子从柱子A移动到柱子C上面。计算汉诺塔移动所需要的最少步骤数。 输入格式输入一个整数n(1≤n≤30),代表盘子的个数。 输出格式输出每一步操作的方法,最后输出一个数,这个数表示移动的次数。我们保证答案不会超过10的18次方。 输入输出样例 #1输入 #111 输出 #112Move disk 1 from A to C1 输入输出样例 #2输入 #212 输出 #21234Move disk 1 from A to BMove disk 2 from A to CMove disk 1...
贪心算法
贪心算法介绍贪心算法,顾名思义,就是采取贪心的策略去解决或者优化问题。其主要思想是:保证每次操作都是局部的最优解,从而得到全局最优解。(但其实从字面上来看,贪心显然不是一个好词,他仅仅局限于当下,而不是去纵观全局,因此,有时候贪心算法并不能得到全局最优解。) 贪心算法的思路我们首先肯定是要确定我们的贪心目标,比如性价比最高的商品,或者最短的时间,或者最少的钱。然后,我们按照这个目标,一步一步的进行贪心选择,直到我们达到目标。 贪心算法的应用背包问题洛谷P2240这里还是把题目写出来吧 题目描述阿里巴巴走进了装满宝藏的藏宝洞。藏宝洞里面有 $N(N \le 100)$ 堆金币,第 $i$ 堆金币的总重量和总价值分别是 $m_i,v_i(1\le m_i,v_i \le 100)$。阿里巴巴有一个承重量为 $T(T \le 1000)$ 的背包,但并不一定有办法将全部的金币都装进去。他想装走尽可能多价值的金币。所有金币都可以随意分割,分割完的金币重量价值比(也就是单位价格)不变。请问阿里巴巴最多可以拿走多少价值的金币? 输入格式第一行两个整数 $N,T$。 接下来 $N$ 行,每行两...
过河卒
题目来源:洛谷P1002题目描述棋盘上 $A$ 点有一个过河卒,需要走到目标 $B$ 点。卒行走的规则:可以向下、或者向右。同时在棋盘上 $C$ 点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。 棋盘用坐标表示,$A$ 点 $(0, 0)$、$B$ 点 $(n, m)$,同样马的位置坐标是需要给出的。 现在要求你计算出卒从 $A$ 点能够到达 $B$ 点的路径的条数,假设马的位置是固定不动的,并不是卒走一步马走一步。 输入格式一行四个正整数,分别表示 $B$ 点坐标和马的坐标。 输出格式一个整数,表示所有的路径条数。 输入输出样例 #1输入 #116 6 3 3 输出 #116 说明/提示对于 $100 %$ 的数据,$1 \le n, m \le 20$,$0 \le$ 马的坐标 $\le 20$。 大概思路这里我们先忽略马的控制点,只讨论卒从A点运动到B点的路径条数。 不难发现,如果B点与A点在同一条直线上,那么卒的路径就只有一条。 现在假设B点坐标为$(1,1)$,那路径是不是有两条?一个是先向下再向右,另一...
递归函数
前言在高中班群里水群的时候,大肌让我教他C++,昨天和xy聊天的时候他也间接性地“催更”了,甚至还把我的博客网址单独记录下来。呜呜呜,有点感动。 原本是计划寒假的时候再更新博客,因为我想把博客做好一点,但想了想,好像也没有哪个陌生人会关注我的博客,所以倒不如写自己想写的,学了什么就写什么,这样一来既可以督促自己重新消化所学的知识,又可以给别人提供参考。而且如果大肌都可以看明白,说明我写得还不错?哈哈哈哈,开玩笑的 递归函数递归函数,简单来说就是函数自己调用自己。可能有点抽象,那我们直接上代码吧。 现在我们要写一个等差数列的函数,首项是1,公差是3,怎么用递归函数来实现呢? 首先,我们定义的这个函数很显然有返回值,然后再观察等差数列的性质:后一项与前一项的差等于公差。我们先写一个大概的函数框架: 12345int f(int n){ int result; result = f(n-1) + 3; return result;} 我们先来举个例子,要求第四项是多少,我们就要知道第三项是多少,以此类推……直到我们要知道第一项是多少。好,然后我们要...
CS50 Week3
WEEK 3概述在CS50的第三周,我们主要了解到了三种算法:冒泡排序(bubble sort),选择排序(selection sort),以及归并排序(merge sort),还有递归的思想,并且对时间复杂度有了一个大概的了解。下面我们来总结一下这三种算法的特点以及代码实现。 btw,其实在C++中,我们不用自己实现排序算法,因为C++已经内置了排序函数,也就是std::sort(),并且sort()使用的是快速排序算法,其时间复杂度为O(nlogn)。 冒泡排序(Bubble Sort)冒泡排序是一种简单的排序算法。主要思想是通过对相邻元素进行比较和交换,使得较大的元素逐渐向上移动,直到最后一个元素。 特点 时间复杂度:O(n^2) 空间复杂度:O(1) 稳定性:稳定 代码实现1234567891011121314#include <stdio.h>void bubble_sort(int arr[], int n) { int i, j; for (i = 0; i < n - 1; i++) { for ...
如何用hexo搭建一个个人博客
1.前言其实关于博客的搭建我花了不少时间,在网上搜集查找了很多文章,期间还向AI请教了一下,前前后后差不多有两天吧,问题主要出现在了一些文件的配置上,所以借此机会,整理一下自己的经验,希望能帮助到大家。 2.准备工作由于我使用的是Windows系统,所以以下操作均在Windows环境下进行。 2.1 安装Node打开Node官网,下载与你的系统适配的安装程序,版本的话可以是选择低一点的,不然可能会出现不兼容的问题。安装完成后记得检查一下是否安装成功。键盘按下win+R,输入cmd,打开命令行窗口,输入以下命令: 1node -v 如果出现版本号,则说明安装成功。 2.2 安装Git 打开Git官网下载安装程序。 点击电脑开始菜单,我们可以看见Git Bash。等会我们会一直用到它。 2.3 安装Hexo 在Git Bash中输入以下命令: 1npm install -g hexo-cli 安装完成后,输入以下命令: 1hexo -v 如果出现版本号,则说明安装成功。 2.4 创建Github仓库(首先要确保你已经注册了Github账号) 打开Github...