自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(95)
  • 问答 (1)
  • 收藏
  • 关注

原创 二分法求最值:面向答案编程

思路求最值的算法题一般是贪心或者动规,但也有其他的情况,既找不到局部最优也写不出递推公式,这个时候或许可以尝试一下二分。二分的思路很简单,即面向答案编程。它不关心具体的操作过程,而是先确定答案的范围,二分得到中间值,判断当前值是否满足要求,继续二分直到找到结果。简直是另辟蹊径有木有?例子lc5219. 每个小孩最多能分到多少糖果https://leetcode-cn.com/problems/maximum-candies-allocated-to-k-children/.给你一个 下标从 0

2022-04-03 16:02:09 1025

原创 记一道动态规划算法题:0-1背包之两个背包问题

题目描述某公司有一批货物,系了2个轮船进行运输。每条轮船上可以运输不同容量的货物。由于2个轮船的发船时间不一样,同一个货物通过不同的轮船运输到终点后,利润也是不一样的,现在需要根据不同轮船的容量、货物的容量以及在不同轮船上进行运输的利润有效地分配货物,从而达到货物价值最大化。每个货物只有1件。输入:第一行输入为A B M,A代表轮船A的容量,B代表轮船B的容量,M代表货物的个数。之后M行分别代表每个货物的容量、使用轮船A运输的利润、使用轮船B运输的利润。输出:最大利润。例子:输入:5 6

2022-01-06 08:54:04 2338

原创 推荐系统实践Task2:数据库的基本使用

1 MySQLMySQL 是最流行的关系型数据库管理系统,在项目中用来存储结构化的数据(用户、新闻特征)。那么如何用Python连接数据库呢?首先,安装MySQL。教程在这里:https://www.runoob.com/mysql/mysql-install.html.然后,安装 mysql-connector:python -m pip install mysql-connector创建数据库连接:import mysql.connectormydb = mysql.connector.

2021-12-18 21:05:49 1542

原创 推荐系统实践Task1:熟悉新闻推荐系统基本流程

1 环境搭建操作系统:Windows10MySQL:8.0.25Redis:5.0.14Mongodb:5.0.5Python 3.8前端IDE:WebStorm2021.12 项目导入前端项目:待补充。。。

2021-12-14 21:50:41 1682

原创 记一道关于堆的算法题

1 题目描述有20个数组,每个数组中有500个数,降序排列,输出这20个数组中最大的500个数。2 解法我开始想的是归并的方法。每个数组用一个指针指向第一个元素,然后比较得到最大值,指向最大值的指针后移,一共循环500次。但是这样的时间复杂度是O(n*k),可以用堆将其降为O(nlogk)。(假如数组有k个,每个数组中有n个元素)具体做法是先取每个数组的首元素建立一个大小为k的大顶堆,pop出最大值保存到res数组,然后push下一个数进去。这里的下一个数就是最大值在数组中的后面一个数。因此我们需要

2021-12-06 20:30:24 973

原创 pytorch:多标签分类的损失函数和准确率计算

1 损失函数我们先用sklearn生成一个多标签分类数据集。from sklearn.datasets import make_multilabel_classificationX, y = make_multilabel_classification(n_samples=1000, n_features=10, n_classes=

2021-12-04 21:35:11 13229 4

原创 如何使用huggingface微调模型

1 安装包pip install transformers[sentencepiece]pip install datasets2 导入数据from datasets import load_datasetraw_datasets = load_dataset("glue", "sst2")raw_datasets这里使用的是GLUE中SST2数据集,主要针对电影评论来做情感分类(二分类)。3 pipeline整个流程是先分词,将文本转化为向量,输入到模型,得到输出后再进行后处理

2021-11-29 15:35:30 4814 6

原创 机器学习笔记:决策树

1 基本概念熵描述信息的不确定度。熵越大,信息的不确定度越大。信息量I(x)=−log(p(x)) I(x)=-log(p(x))I(x)=−log(p(x))信息是用来消除随机不确定性的东西。衡量信息量大小就看这个信息消除不确定性的程度。事件发生的概率越低,信息量越大。举个例子,“一个人是女性”和“一个人是大学老师”哪个信息量大呢?显然是后者。前者的概率是1/2,后者的概率远小于1/2。信息熵可能产生的信息量的期望。H(x)=−∑i=1np(xi)log(p(xi))H(x)=-\su

2021-11-25 17:21:49 504

原创 机器学习笔记:线性回归与逻辑回归

1 线性回归公式f(x)=wTx+bf(x)=w^Tx+bf(x)=wTx+b损失函数均方误差:loss=∑i=1n(y−wTxi−b)2loss=\sum_{i=1}^{n}(y-w^Tx_i-b)^2loss=i=1∑n​(y−wTxi​−b)2其中yyy为实际值。均方误差有非常好的几何意义。它对应了常用的欧几里得距离或简称"欧氏距离" 。基于均方误差最小化来进行模型求解的方法称为最小二乘法(分别对www和bbb求偏导,令其等于0,再求解)。在线性回归中,最小二乘法就是试图找到一

2021-11-21 22:34:09 724

原创 机器学习笔记:贝叶斯原理和朴素贝叶斯分类

1 贝叶斯原理p(A∣B)=p(A)×p(B∣A)p(B)p(A|B)=\frac{p(A)×p(B|A)}{p(B)}p(A∣B)=p(B)p(A)×p(B∣A)​提到贝叶斯大家都会想到这个计算条件概率的公式。的确,我当时做这些概率题时都是直接套公式,很少思考背后的原理。那么今天就来捋一捋吧。首先,条件概率就是后验概率,后验概率是由先验概率和补充信息决定的。举个例子,当你看到一个有新生儿的家庭阳台上晾着粉色的小衣服,你会如何猜测这个新生儿的性别呢?这里的先验概率就是0.5,补充信息是粉色的小衣

2021-11-17 15:05:18 765

原创 机器学习笔记:模型评估与选择

1 经验误差与泛化误差学习器在训练集上的误差称为"训练误差" (training error)或"经验误差" (empirical error) ,在新样本上的误差称为"泛化误差" (generalizationerror)。2 训练集和验证集的划分留出法直接将数据集 划分为两个互斥的集合,一个为训练集,一个为验证集。当样本类别不均时采用分层抽样。交叉验证法交叉验证的做法就是将数据集粗略地分为比较均等不相交的k份,然后取其中的一份进行测试,另外的k-1份进行训练,然后求得error的平均值

2021-11-15 20:42:01 1069

原创 尾插法建立单链表(Python版)

习惯了力扣模式,碰到acm模式让手动建立单链表就不会了。记录一下吧。class ListNode: def __init__(self, val=0, next=None): self.val = val self.next = nextdef createList(nums):#输入一个数组,返回链表头结点 prehead=ListNode() p=prehead for item in nums: node=ListNo

2021-10-12 21:14:15 939

原创 求二进制矩阵中的路径总数(机器人运动,dfs)

题目描述在m×n的二进制矩阵中,1代表不可通过,0代表可通过。机器人从(0,0)出发,每次可向下或向右移动一格。问走到(m-1,n-1)一共有多少条路径?代码def get_path_num(matrix: List[List[int]]) -> int: m,n=len(matrix),len(matrix[0]) total=0 moves=[(1,0),(0,1)] def dfs(x,y): if x==m-1 and y==n-1:

2021-09-14 19:20:12 113

原创 LeetCode 1091:二进制矩阵中的最短路径

题目描述给你一个 n x n 的二进制矩阵 grid 中,返回矩阵中最短 畅通路径 的长度。如果不存在这样的路径,返回 -1 。二进制矩阵中的 畅通路径 是一条从 左上角 单元格(即,(0, 0))到 右下角 单元格(即,(n - 1, n - 1))的路径,该路径同时满足下述要求:路径途经的所有单元格都的值都是 0 。路径中所有相邻的单元格应当在 8 个方向之一 上连通(即,相邻两单元之间彼此不同且共享一条边或者一个角)。畅通路径的长度 是该路径途经的单元格总数。解题思路DFS和BFS都可以

2021-09-14 13:36:29 294

原创 LeetCode 912:排序数组(快速排序、归并排序和堆排序)

快速排序class Solution: def sortArray(self, nums: List[int]) -> List[int]: def quickSort(l,r): if l>=r: return import random pivot = random.randint(l, r) nums[l], nums[pivot] =

2021-09-07 17:08:54 1020

原创 LeetCode 251:数组中的第K个最大元素(快速排序、堆排序)

快速排序快速排序一个典型的分治算法,每次经过「划分」操作后,一定可以确定一个元素的最终位置,并且保证该元素左边的元素都小于等于它,右边的元素都大于等于它。所以只要某次划分的元素位置q为倒数第 k个下标的时候,我们就已经找到了答案。因此我们可以改进快速排序算法来解决这个问题:在分解的过程当中,我们会对子数组进行划分,如果划分得到的 q正好就是我们需要的下标,就直接返回 a[q];如果 q 比目标下标小,就递归右子区间,否则递归左子区间。这样就可以把原来递归两个区间变成只递归一个区间,提高了时间效率。这就是

2021-06-15 22:41:19 223 2

原创 Python实现TF-IDF提取关键词(sklearn库的使用)

TF-IDF算法TF−IDF=TF×IDFTF-IDF=TF\times IDFTF−IDF=TF×IDFTF=单词w在文档中出现的次数文档总词数TF=\frac{单词w在文档中出现的次数}{文档总词数}TF=文档总词数单词w在文档中出现的次数​IDF=log文档总数包含单词w的文档数+1IDF=log\frac{文档总数}{包含单词w的文档数}+1IDF=log包含单词w的文档数文档总数​+1Python实现TfidfVectorizer是sklearn中的库,可以用来计算TF-IDF值。fr

2021-05-31 09:09:48 14330 18

原创 Python正则表达式去掉非中文字符

import rere.sub('[^\u4e00-\u9fa5]+', '', '5.8 abc啊啊啊')re.sub(pattern, repl, string, count=0, flags=0)pattern : 正则中的模式字符串。repl : 替换的字符串,也可为一个函数。string : 要被查找替换的原始字符串。count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。“\u4e00”和“\u9fa5”是unicode编码,并且正好是中文编码的开始和结束的两个

2021-05-28 19:34:31 7753 2

原创 pandas melt函数:将数据从列合并到行

pandas.melt(frame, id_vars=None, value_vars=None, var_name=None, value_name='value', col_level=None, ignore_index=True)frame:要处理的数据集(dataframe)。id_vars:不需要被转换的列名。value_vars:需要转换的列名,如果剩下的列全部都要转换,就不用写了。var_name和value_name是自定义设置对应的列名。col_level :如果列是Mul

2021-05-07 16:20:20 440

原创 LeetCode 416:分割等和子集(转化为0-1背包问题)

题目描述问题转化可以理解成是否能从给定数组里取出部分元素,使这些元素总和刚好为数组总和的一半。由于没个元素只能使用一次,所以就是0-1背包问题了。二维数组解法确定dp数组及下标含义dp[i][j]表示是否能从下标不大于i的元素中取出部分元素使得这些元素总和刚好为j(值为True或False)。j的范围是0~target,target就是数组总和的一半。递推公式dp[i][j]=dp[i-1][j] or dp[i-1][j-nums[i]]两种选择:1)不使用下标为i的元素,此时dp[

2021-05-01 20:57:39 170 1

原创 LeetCode 322 :零钱兑换(完全背包,二维数组和一维数组两种解法)

题目给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。你可以认为每种硬币的数量是无限的。二维数组解法def coinChange(self, coins: List[int], amount: int) -> int: m=len(coins) n=amount+1 dp=[[float('inf')] * n for i in ra

2021-04-26 13:10:45 480 1

原创 Leetcode刷题技巧总结篇(python版)

持续更新……1 求字符差值python不可以直接进行字符减运算。当需要进行字符之间的减运算时,我们可以用ord()函数。ord()是python自带的函数,无需导入。2 字符串反转string='leetcode'print(string[::-1])3 数组元素计数import collectionsli=[1,2,2,4,5,5]cnt = collections.Counter(li)print(cnt)4 字典遍历cnt={1:4,2:3}# 遍历键值对for

2021-04-05 00:08:28 10399 1

原创 回溯算法详解

算法思想回溯实际上是一种试探算法,这种算法跟暴力搜索最大的不同在于,在回溯算法里,是一步一步地小心翼翼地进行向前试探,会对每一步探测到的情况进行评估,如果当前的情况已经无法满足要求,那么就没有必要继续进行下去,也就是说,它可以帮助我们避免走很多的弯路。回溯算法的特点在于,当出现非法的情况时,算法可以回退到之前的情景,可以是返回一步,有时候甚至可以返回多步,然后再去尝试别的路径和办法。这也就意味着,想要采用回溯算法,就必须保证,每次都有多种尝试的可能。解题步骤判断当前情况是否非法,如果非法就立即返

2021-04-03 16:28:17 19442

原创 平衡二叉树如何调整(简洁易懂)

LL型RR型LR型RL型

2021-03-30 21:20:35 3643 2

原创 Leetcode230:二叉搜索树中第K小的元素(python版)

题目描述给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。解题关键二叉排序树的中序遍历是有序的。方法对二叉树进行中序遍历,用count计数,当遍历到第k个节点时将当前节点的值赋给变量re,最后返回re。class Solution: def __init__(self): self.count = 0 self.re=0 def kthSmallest(self, root:

2021-03-29 10:46:47 285 1

原创 Leetcode160:相交链表(相交的定义是什么)

看上面这个例子时我就很疑惑,如果是两个点值相同就是相交,那么1才是交点啊。然后发现不是的,1这个点并不相同,因为前面的节点是不一样的,只有前后节点都一样才算相同。那么就好办了。一个很好理解的方法是先计算出两个链表的长度差d,然后让长的那个先走d步,再让两者同时出发,相遇(节点相同)处即为交点。如果两者皆走到了空值,即不相交。def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode: le.

2021-03-27 11:03:21 609 1

原创 零基础入门数据挖掘-心跳信号分类预测

https://tianchi.aliyun.com/competition/entrance/531883/information.task1数据和baseline下载下来后可直接运行,装上几个包就行了。阿里天池实验室不好用,还是用自己的jupyter吧。

2021-03-16 21:27:26 540 1

原创 机器人的运动范围DFS、BFS两种解法(python)

题目地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?这是一个搜索问题,可以用深度优先搜索(DFS)和广度优先搜索(BFS)两种方法解决。DFSdef movingCount(self, threshold,

2021-03-15 21:16:26 300 1

原创 位运算求子集的理解

var subsets = function(nums) { const ans = []; const n = nums.length; for (let mask = 0; mask < (1 << n); ++mask) { const t = []; for (let i = 0; i < n; ++i) { if (mask & (1 << i)) {

2021-03-08 19:10:12 397

原创 数据结构与算法python版:合并两个有序数组

def mergeTwoLists(l1, l2): i = j = 0 l3 = [] while i < len(l1) and j < len(l2): if l1[i] <= l2[j]: l3.append(l1[i]) i = i + 1 else: l3.append(l2[j]) j = j + 1 if i &lt

2021-02-23 11:52:40 82

原创 Leetcode11:盛最多水的容器(js版)

题目描述:给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器。方法一:双重循环var maxArea = function(height) { var area=0; for(var i = 0; i < height.length;i++){

2021-02-14 11:37:52 161 1

原创 leetcode:整数反转(js版)

var reverse = function (x) { if (x < 0) { return -reverse(-x); } var n = x.toString().length; var i = 0; var y = 0; nums = []; while (x != 0) { y = y + (x % 10) * Math.pow(10, n - i - 1); x = Math.floor(x / 10); i++; }

2021-01-29 23:36:04 103

原创 leetcode:最长回文子串(js版)

动态规划的方法。var longestPalindrome = function(s) { var max_len=1; var start=0; var arr=new Array(); for (let j=1;j<s.length;j++){ for(let i=0;i<s.length-1;i++){ arr[i] = new Array(); if(j-i<=2){

2021-01-28 18:46:40 195

原创 leetcode:寻找两个正序数组的中位数

语言:js方法:归并排序时间复杂度:遍历全部数组 O(m+n)空间复杂度:开辟了一个数组,保存合并后的两个数组 O(m+n)var findMedianSortedArrays = function (nums1, nums2) { var i=0,j=0,k=0; var num3=new Array(); while(i<nums1.length&&j<nums2.length){ if(nums1[i]>nums2[j]

2021-01-24 21:20:20 70

原创 数据结构与算法Java版:尾插法建立链表

public class AddTail { Node head; public static void main(String[] args) { AddTail list = new AddTail(); list.add(1); list.add(2); list.add(3); list.add(4); list.add(5); list.add(6); System.out.println("链表:"); printList(list.head); }

2021-01-18 11:52:30 197

原创 VSCode如何清除终端/命令行历史记录

直接在命令行输出clear或者cls即可。

2021-01-13 19:30:46 16097 4

原创 数据结构与算法Java版:删除链表的倒数第 n 个节点

题目描述给定一个链表,删除链表的倒数第 n 个节点。例如,给定一个链表: 1 -> 2 -> 3 -> 4 -> 5, 和 n = 2。当删除了倒数第二个节点后,链表变为 1 -> 2 -> 3 -> 5。你可以假设,给定的 n 是有效的。额外要求就是,要在一趟扫描中实现,即时间复杂度是 O(n)。方法快慢指针。public static Node deleteLastn(Node head, int n) { Node fast = head;

2021-01-11 16:42:00 108

原创 数据结构与算法Java版:堆排序

public class HeapSort { public static void sort(int []arr){ //1.构建大顶堆 原始树结构为列表层次遍历结果 for(int i=arr.length/2-1;i>=0;i--){ //从第一个非叶子结点从下至上,从右至左调整结构 adjustHeap(arr,i,arr.length); } //2.调整堆结构+交换堆顶元

2021-01-10 11:38:32 95

原创 数据结构与算法Java版:快速排序

代码public class Sort { public static void quickSort(int[] a, int low, int high) { int p = a[low], i = low, j = high, t; if (low >= high) { return; } while (i < j) { while (a[j] >= p && i < j) { j--; } while (a

2021-01-01 19:56:34 87 1

原创 数据结构与算法Java版:归并排序

首先将数组不断地二分,直到最后每个部分只包含 1 个数据。然后再对每个部分分别进行排序,最后将排序好的相邻的两部分合并在一起,这样整个数组就有序了。public class Sort { public static void customMergeSort(int[] a, int[] tmp, int start, int end) { if (start < end) { int mid = (start + end) / 2; customMergeSort(a, tmp,

2020-12-31 21:01:28 61

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除