算法
算法
WGS.
道阻且长,与君共勉:你若对得起时间,时间便会对得起你。
展开
-
python实现关于动态规划背包问题
一个包可以背4kg的东西,现在有四件东西,重量分别为1kg,4kg,3kg,1kg,价值为:1500,3000,2000,2000;现在要求你,在包里背的东西价值最大,但是不能超过背包的最大载重量#几件物品的重量w = [0,1,4,3,1]#几件物品的价值v= [0, 1500, 3000, 2000, 2000]#物品数量n = len(w) - 1#包的载重量m = 4 #建立一个列表表示在包中的物品,元素是True时代表对应元素放入x = [] #放入包中的总价值va原创 2020-12-30 20:30:10 · 439 阅读 · 0 评论 -
动态规划---找最少硬币数
现在有11元,有面值为1,3,5元的币值,找出最少的硬币组合:import os Min=[x for x in range(12)];VN=[1,3,5];for i in range(1,12,1): #一直到这么多的面值的钱 for j in range(3): #钱的面额一共有三种 if VN[j]<=i and Min[i-VN[j]]+1<Min[i]: #如果这个时候钱的面额小于给定的面额,并且此时 Mi原创 2020-12-30 20:27:46 · 167 阅读 · 0 评论 -
(java) 动态规划:二维矩阵左上角到右下角路径最大和 (并打印路径)
给定一个矩阵,找出从左上到右下角的一条路,使得这条路上数字和最大。这条路前进的方向只能向右或向下。输入的第一行是矩阵的行数和列数。输出第一行是一个序列,为该条路上的数字,第二行是这些数字的和。例如:给定一个m=3,n=3的二维数组cost,如下图所示,从左上角的第一个单元格出发,可以向右,向下 走,最终达到右下角。走过的路径为:(0, 0) –> (0, 1) –> (1, 1) –> (2, 1).在这个过程中,花费的最小成本为: (1 + 4 + 3 + 3 + 4) = 15原创 2020-11-13 20:13:16 · 3204 阅读 · 5 评论 -
scala实现十大排序算法
文章目录swap冒泡选择插入希尔归并快排计数桶基数堆swap def swap(array: Array[Int], i: Int, j:Int): Unit ={ val tmp = array(i) array(i) = array(j) array(j) = tmp }冒泡 def bubblingSort(array: Array[Int]): Array[Int] ={ val arr = array for(i <- 1 until a原创 2020-11-04 19:05:02 · 559 阅读 · 3 评论 -
逻辑回归推导及代码实现
可以看这篇文章:https://blog.csdn.net/qq_42363032/article/details/105369195普通逻辑回归import numpyimport matplotlib.pyplot as pltif __name__ == '__main__': data = numpy.loadtxt('logicData2.txt', delimiter=',') x, y = data[:, :-1], data[:, -1] X = (原创 2020-05-20 19:53:58 · 525 阅读 · 1 评论 -
多变量线性回归
和单变量线性回归的比较python代码实现import numpyimport matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d import Axes3Dif __name__ == '__main__': numpy.random.seed(12) # 固定随机数 x1 = numpy.random.random(50) x2 = numpy.random.random(50) y = 3 + 0.7原创 2020-05-19 11:28:36 · 312 阅读 · 1 评论 -
单变量线性回归
可以参考我的这篇文章回归模型任务是确定参数theta线性回归模型矩阵表达及推导代价函数想要的效果就是使样本点均匀的分布在曲线的两侧代价函数的矩阵表达及推导梯度下降梯度下降推导就是对代价函数求偏导python实现import numpyimport matplotlib.pyplot as pltdata = numpy.loadtxt('G:\A_机器学习1\workspace/ex1data1.txt', delimiter=',')x = data[:原创 2020-05-19 11:24:21 · 504 阅读 · 1 评论 -
朴素贝叶斯题目应用及代码实现
首先回顾下公式通过一个题来看一下贝叶斯应用再看下一题如果条件是好多个特征的时候,那么后验概率的值就会有好多个,这时使用贝叶斯虽然准确但是计算量比较大,这里引入朴素贝叶斯:假设各特征相互独立,在降低一定准确率的情况下,大大的减少了计算量为了防止后验概率出现0的情况,加入平滑操作,当参数λ为1时,称为拉普拉斯平滑朴素贝叶斯对于贝叶斯来说,各特征相互独立,加入平滑操作代码实现,多项式模型和高斯模型import numpy as np"""数据预处理,取出所有特征X和所有结果y编原创 2020-05-10 10:00:56 · 802 阅读 · 0 评论 -
逻辑回归分类算法
首先明确,分类问题,"y"的值域一定是有限个,逻辑回归就是根据之前的数据,预测某事件为真的概率值为什么分类问题不能用线性回归?对于分类问题,y的取值为0或者1如果使用线性回归i,那么线性回归模型的输出值可能远大于1或者远小于0导致代价函数很大回归模型或者python代码实现z = numpy.dot(X, theta)h = 1/(1+numpy.exp(-z)) ...原创 2020-04-07 17:26:23 · 539 阅读 · 0 评论 -
python实现KNN分类算法
K近邻算法,简称KNN算法,作用就是分类三大要素距离度量(常用利用欧式距离和曼哈顿距离比较远近)K值选择(最近的K个邻居)决策规则(少数服从多数)已知训练集import numpyimport matplotlib.pyplot as plt'''已知训练集和训练集类别、测试集1.测试集广播和训练集一样的规格2.计算距离3.对距离列表排序返回最近的K个点的下标4...原创 2020-03-26 16:25:12 · 878 阅读 · 0 评论 -
华为面试题--求两序列的和最小差值序列
设计思路1.将两个序列和成一个序列并排序2.拿出最大元素Big,次大的元素Small3.在余下的序列S[:-2]进行平分,得到序列max_list,min_list4.将Small加到max序列,将Big加大min序列,重新计算新序列和,和大的为max_list,小的为min_list5.递归调用def mean(sorted_list): if not sorted_l...原创 2020-03-19 15:48:44 · 750 阅读 · 0 评论 -
算法应用,单变量线性回归&梯度下降:已知如下数据集,绘制出数据集的散点图并给出能够和所有散点拟合出最好的一条直线
import numpy as npimport matplotlib.pyplot as plt# 算法应用,单变量线性回归&梯度下降:已知如下数据集,绘制出数据集的散点图并给出能够和所有散点拟合出最好的一条直线# 预测函数def getHypo(X, theta): return np.dot(X, theta)# 代价函数def getCost(h, y):...原创 2020-03-10 15:36:12 · 451 阅读 · 0 评论 -
线性回归及梯度下降的推导
先引入一下回归的定义回归是监督学习的一个重要问题,回归用于预测输入变量和输出变量之间的关系。回归模型是表示输入变量到输出变量之间映射的函数。回归问题的学习等价于函数拟合:使用一条函数曲线使其很好的拟合已知函数且很好的预测未知数据。回归问题分为模型的学习和预测两个过程。基于给定的训练数据集构建一个模型,根据新的输入数据预测相应的输出。回归问题按照输入变量的个数可以分为一元回归和多元回归;按照输...原创 2020-03-10 14:51:26 · 1508 阅读 · 0 评论 -
图的广度优先搜索遍历
核心代码int sign2[MAX];//广度优先搜索遍历void BFS(MGraph G, int v){ cout<<G.vertex[v]<<" "; sign2[v] = 1; queue<int> q;//系统队列 q.push(v);//已被访问过结点下标入队 while(!q.empty()){ int w = q.fron...原创 2020-02-10 18:51:07 · 458 阅读 · 0 评论 -
标记矩阵实现图的深度优先搜索
图的深度优先搜索遍历(DFS)类似于二叉树的先序遍历。基本思想:首先访问出发点A,并将其标记为已访问过,然后选取与A邻近的并且未被访问过的任意一个顶点,比如D,访问它并且标记为已访问过;再选取与D邻接的未被访问的任意顶点,以此重复进行。当一个顶点所有的邻接顶点都被访问过时,则依次退回到最近被访问过的顶点,若该顶点还有其他啊邻近顶点未被访问,则从这么未被访问过的顶点中选取一个那个重复上述过程,直至...原创 2020-02-10 17:17:07 · 435 阅读 · 0 评论 -
C++ 快速排序
以枢轴为中心的交换排序设计思路:1.选择第一个元素作为基准2.用两个探头i和j作为下标分别指向序列的头和尾3.探头往里探,当j的元素比基准元素小时,跳出循环,判断探头i 4.当i的元素比基准元素大时, 交换两个探头的元素5.当i>j的时候,说明探头工作结束,即i==j的时候,两个探头移到一起,这时交换基准和i的值6.递归调用,左面和右面#include <io...原创 2020-01-11 18:36:51 · 333 阅读 · 0 评论 -
C++ 希尔排序
两个49在排序前后位置颠倒了,所以希尔排序是不稳定的希尔排序是基于插入排序的以下两点性质而提出改进方法的:1.插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率。2.但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位。希尔排序的基本思想是:先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记...原创 2020-01-10 20:11:42 · 1115 阅读 · 0 评论 -
C++ 直接插入排序
设计思路:1.首先把一个元素的第一个数看作一个有序的数列2.定义一个游动的下标,指向有序序列中的最后一个元素2.从有序序列后一个元素开始,往前比较,如果待比较元素比前一个元素小的话,额外用变量盛着待比较元素, 前一个元素后移一位 ,游标减减(此时权当游标+1的位置已经空出)。大的话,游标加一的位置即要插入的位置#include <iostream>using names...原创 2020-01-10 20:07:08 · 242 阅读 · 0 评论 -
C++ 会议安排(贪心算法)
描述:学校的小礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一些活动进行举办。小刘的工作就是安排学校小礼堂的活动,每个时间最多安排一个活动。现在小刘有一些活动计划的时间表,他想尽可能的安排更多的活动,请问他该如何安排。简短理解题意:在不发生冲突的情况下,一天最多可以安排多少个会议?目标:在有限的时间内,尽可能多地安排会议。贪心策略:1.选最早开始的会议...原创 2019-12-19 18:48:32 · 1946 阅读 · 0 评论 -
什么是贪心算法?
概念贪心的意思在于在作出选择时,每次都要选择对自身最为有利的结果,保证自身利益的最大化。就是每次选择新的局部最优解,去逼近全局最优解。贪心算法就是利用这种贪心思想而得出一种算法。贪心算法可以简单描述为:大事化小,小事化了。对于一个较大的问题,通过找到与子问题的重叠,把复杂的问题划分为多个小问题。并且对于每个子问题的解进行选择,找出最优值,进行处理,再找出最优值,再处理。也就是说贪心算法是一种...原创 2019-12-18 14:39:46 · 4137 阅读 · 0 评论 -
背包问题(贪心算法)
问题描述假设山洞中有n种宝物,每种宝物有一定重量w和相应价值v,毛驴运载能力有限,只能运走m重量的宝物,一种宝物只能拿一样,宝物可以分割,那么怎么才能使毛驴运走宝物的价值最大呢?贪心策略:1.每次都拿最轻的一个,这样价值不一定最大,所以pass掉2.每次都运走价值最大的一个,这样重量如果很重,价值总和不一定最大,所以pass掉3.因为宝物可以分割,所以每次都运走单位价值最大的一个,这...原创 2019-12-18 10:55:55 · 730 阅读 · 0 评论 -
最优装载问题(贪心算法)
问题描述:有一批集装箱要装上一艘载重量为c的轮船。其中集装箱i的重量为Wi。最优装载问题要求确定在装载体积不受限制的情况下,将尽可能多的集装箱装上轮船。(意思就是在不超过载重量的情况下最多能装多少)大体思路:首先用数组承载每个集装箱的重量为了方便,给数组排个序循环小于集装箱数量方法一:每个重量累加判断是否超过载重量方法二:定义剩余变量,剩余变量减每个的重量,然后判断每个的重量是否...原创 2019-12-16 19:54:56 · 12611 阅读 · 1 评论 -
二分查找算法
二分查找,也就是折半查找被查找的元素列表必须有序思路: 1.将被查数列的中间位置和查找关键字比较,相等直接返回2.如果不相等,根据中间位置分为左右俩表,判断大小确定查找关键字在左表还是右表3.重复此步骤#include "iostream"#include "iomanip"#include "string.h"#include "cmath"#include "al...原创 2019-12-13 14:54:39 · 233 阅读 · 0 评论 -
KMP算法实现求子串在主串的位置
#include <stdio.h>#include <stdlib.h>#include <string.h>void get_next(char t[], int next[]) { next[0] = -1; for (int i = 0; t[i] != '\0'; i++) { ne...原创 2019-12-13 11:17:01 · 1602 阅读 · 0 评论 -
C经典习题猴子分桃
#include "stdio.h"void main(){ //猴子吃桃 /* 穷举,桃小于10000 每个猴子都是拿出一个扔海里,然后再分成五份,拿走一份 对桃子穷举循环,还要对其操作,需要用到一个变量承载桃子数量,即每次分完后桃子的数量 */ int i,j; int temp; int count;...原创 2019-12-12 14:17:53 · 408 阅读 · 0 评论 -
分治算法求最小值
分治算法是将原问题分成多个独立的子问题并进行解决, 使原问题得到解决的算法分治法求最小值#include "stdio.h"int getMin(int arrs[],int low,int high);int main(){ int arrs[12] = {2,3,5,6,4,88,5,7,5,1,2,6}; int min = getMin(arrs,0,11); ...原创 2019-12-12 14:11:26 · 1854 阅读 · 0 评论