E-COM-NET
首页
在线工具
Layui镜像站
SUI文档
联系我们
推荐频道
Java
PHP
C++
C
C#
Python
Ruby
go语言
Scala
Servlet
Vue
MySQL
NoSQL
Redis
CSS
Oracle
SQL Server
DB2
HBase
Http
HTML5
Spring
Ajax
Jquery
JavaScript
Json
XML
NodeJs
mybatis
Hibernate
算法
设计模式
shell
数据结构
大数据
JS
消息中间件
正则表达式
Tomcat
SQL
Nginx
Shiro
Maven
Linux
《算法系列》
遗传算法-变异算法
遗传
算法系列
(4)变异算法在基因交叉之后产生的子代个体,其变量可能以很小的概率或者步长发生转变,这个过程称为变异(Mutation)。
ArthurKingYs
·
2025-03-22 22:42
遗传算法
遗传算法
神经网络
【手撕
算法系列
】多头自注意力机制MHSA
importtorch.nnasnnclassAttention(nn.Module):def__init__(self,dim,num_heads=8,qkv_bias=False,qk_scale=None,attn_drop=0.,proj_drop=0.,num_classes=20):super().__init__()self.num_classes=num_classesself.n
Nastu_Ho-小何同学
·
2025-03-16 07:10
python
深度学习
机器学习
手写机器学习
算法系列
——K-Means聚类算法(一)
代码仓库(数字空间项目,GN可上)不想看的话,我也将代码上传到本博客中。1.聚类算法简介在数据科学和机器学习领域,聚类(Clustering)算法是一种无监督学习方法,它将相似的对象分到同一个组,而不同的对象则被分到不同的组。这种算法的主要目标是根据数据的特征进行分组,以此找出数据的内在结构。聚类算法的一个核心特点就是它并不需要预先知道数据的类别,而是通过算法自动进行分组。在实际应用中,我们常见的
木有鱼丸223
·
2025-03-14 16:52
手写机器学习算法系列
机器学习
算法
聚类
算法系列
之深度/广度优先搜索解决水桶分水的最优解及全部解
在算法学习中,广度优先搜索(BFS)适用于解决最短路径问题、状态转换问题等。深度优先搜索(DFS)适合路径搜索等问题。本文将介绍如何利用广度优先搜索解决寻找3个3、5、8升水桶均分8升水的最优解及深度优先搜索寻找可以解决此问题的所有解决方案。问题描述我们有三个水桶,容量分别为3升、5升和8升。初始状态下,8升的水桶装满水,其他两个水桶为空。我们的目标是通过一系列倒水操作,最终使得8升水桶中的水被均
修己xj
·
2025-03-12 11:39
算法
算法
宽度优先
Day60 图论part10
今天大家会感受到Bellman_ford
算法系列
在不同场景下的应用。建议依然是:一刷的时候,能理解原理,知道Bellman_ford解决不同场景的问题,照着代码随想录能抄下来代码就好,就算达标。
2401_83448199
·
2025-03-09 05:20
图论
算法系列
之数据结构-二叉搜索树
二叉查找树(BinarySearchTree,简称BST)是一种常用的数据结构,它能够高效地进行查找、插入和删除操作。二叉查找树的特点是,对于树中的每个节点,其左子树中的所有节点都小于该节点,而右子树中的所有节点都大于该节点。本文将介绍如何使用Java实现二叉查找树,并实现常见的操作。二叉搜索树BST二叉搜索树的核心思想和二分查找类似,都是基于分治思想,利用了有序性,通过比较和分治,将问题规模减半
修己xj
·
2025-03-07 23:41
算法
算法
数据结构
算法系列
之数据结构-Huffman树
在数据压缩领域,Huffman编码是一种经典的无损压缩算法,而Huffman树则是实现这种编码的关键数据结构。它以其高效性和简洁性被广泛应用于各种场景,从文件压缩到通信协议,都离不开Huffman树的身影。本文将深入探讨Huffman树的原理、构建过程以及其Java如何实现Huffman树。Huffman树的构建步骤Huffman树(哈夫曼树)又称最优二叉树,是一种带权路径长度最短的二叉树,常用于
修己xj
·
2025-03-07 23:41
算法
算法
数据结构
java
排序
算法系列
10-基数排序
基数排序简介实现(java)复杂度和稳定性1.基数排序简介非比较排序,从个位开始,分配,收集,逐位进行计数排序,桶排序的一种实现2.实现(java)publicclassRadixSort{publicstaticvoidmain(String[]args){int[]arr={40,35,5,63,21,82,96,77,52,19};System.out.println("原数组:"+Arra
dulang2015
·
2025-03-04 21:23
数据结构与算法
排序算法
数据结构
算法系列
之双指针(待完善题目)
1.简介双指针是指在遍历数据结构(如数组、链表等)时,使用两个指针变量来辅助解决问题的方法。这两个指针可以同时移动,也可以一个指针固定而另一个指针移动,通过对指针的操作和相互配合,能够更高效地处理数据,解决各种问题。2.对向指针也叫左右指针,两个指针分别从数据结构的两端开始,相向移动。常用于数组的排序、回文串的判断等问题。例如在快速排序算法中,就可以利用对向双指针来划分数据。2.1分类教练使用整数
邪恶的贝利亚
·
2025-03-03 08:44
c++数据与算法
算法
算法系列
之动态规划
动态规划(DynamicProgramming,简称DP)是一种用于解决复杂问题的算法设计技术。它通过将问题分解为更小的子问题,并存储这些子问题的解来避免重复计算,从而提高算法的效率。本文将介绍动态规划的基本概念、适用场景、复杂度分析,并通过Java代码实现经典的动态规划问题。动态规划介绍动态规划的核心思想是将一个复杂的问题分解为若干个相互重叠的子问题,通过解决这些子问题来构建原问题的解。动态规划
修己xj
·
2025-03-01 08:03
算法
算法
动态规划
代理模式
【
算法系列
】有趣的计数排序
文章目录计数排序(CountingSort)详解一、基本思想1.基本原理2.适用场景3.稳定性二、实现步骤1.统计频率2.累积频率3.构建输出数组4.复制回原数组三、代码实现四、时间复杂度分析五、空间复杂度分析六、计数排序的优缺点七、总结计数排序(CountingSort)详解计数排序(CountingSort)是一种非比较型排序算法,适用于整数排序。它通过计算每个元素出现的次数来确定它们在输出数
binbinxyz
·
2025-02-27 10:32
算法
排序算法
数据结构
java
【
算法系列
】希尔排序算法
文章目录希尔排序算法:一种高效的排序方法一、基本思想二、实现步骤1.初始化增量2.分组与排序3.缩小增量4.最终排序三、代码实现四、增量序列的选择1.Shell增量序列2.Hibbard增量序列3.Sedgewick增量序列五、时间复杂度六、总结希尔排序算法:一种高效的排序方法在讨论希尔排序之前,我们先回顾一下选择排序的基本概念。选择排序是一种简单的排序算法,其核心思想是通过多次遍历数组,逐步找到
binbinxyz
·
2025-02-27 09:30
排序算法
算法
java
【Linux-网络】HTTP的清风与HTTPS的密语
个人主页:谁在夜里看海.个人专栏:《C++系列》《Linux系列》《
算法系列
》⛰️道阻且长,行则将至目录引言一、HTTP1.概述2.URL结构转义3.格式请求格式响应格式二、HTTPS1.概念2.加密方式对称加密非对称加密
谁在夜里看海.
·
2025-02-19 12:35
LINUX
网络
http
https
linux
牛掰的
算法系列
:K折交叉验证(KFold)常见使用方法
讲解了交叉验证的基本思想之后,接下来将学习几个常用的交叉迭代器及其使用方法。1.K折交叉验证K折交叉验证(KFold)会将数据集划分为k个分组,成为折叠(fold)。如果k的值等于数据集实例的个数,那么每次的测试集就只有一个,这种处理方式称为“留一”。Scikit中提供了KFold方法进行分组。#导入相关模块In[1]:fromsklearn.model_selectionimportKFold#
羽蒙等风来
·
2025-02-11 02:11
机器学习算法
机器学习
python
LeetCode算法题1:二分查找及扩展应用
文章目录前言一、二分查找二、第一个错误的版本三、搜索插入位置总结前言Leetcode
算法系列
:https://leetcode-cn.com/study-plan/algorithms/?
消逝者
·
2025-02-10 13:56
LeetCode算法
算法
leetcode
职场和发展
打卡第60天------图论
今天大家会感受到Bellman_ford
算法系列
在不同场景下的应用。建
感谢上Di_123
·
2024-08-31 18:04
前端算法题
图论
算法系列
--滑动窗口与双指针
简述个人理解滑动窗口与双指针:双指针:以r为基础指针并根据题目要求来移动l或者保持l不动,同时ans由每一步的r-l来更新。滑动窗口:以l为基础指针,并且l~r看做一个窗口,r不断右移,根据题目要求来右移一次l或者保持l不动,特点是r-l始终不减,ans为最终的r-l区别:双指针算法当需要移动l指针时,可能移动多个单位以满足要求。而滑动窗口算法当需要移动l指针时,每次必定只移动一个单位!算法选择:
爱吃奶糖_
·
2024-02-19 22:31
算法题
算法系列
-leetcode-69.X的平方根
69.x的平方根(简单)给你一个非负整数x,计算并返回x的算术平方根。由于返回类型是整数,结果只保留整数部分,小数部分将被舍去。注意:不允许使用任何内置指数函数和算符,例如pow(x,0.5)或者x**0.5。示例1:输入:x=4输出:2示例2:输入:x=8输出:2解释:8的算术平方根是2.82842...,由于返回类型是整数,小数部分将被舍去。二分查找注意小数部分要舍弃从0和x开始,每次都取中间
吃鱼吐泡泡
·
2024-02-13 10:01
算法
leetcode
算法
leetcode
VBA和VBScript的SHA2加密哈希算法
NIST目前正在进行一项竞赛,目的是为SHA-3寻找新的
算法系列
。这些新功能可能不一定源自SHA-2算法。MD5算法是使用最广泛的哈希算法之一,但是发现它存在很多弱点,因此强烈建议停止使用MD5。
cxygs5788
·
2024-02-11 23:34
数据结构与算法
机器学习(machine learning)大合集
2、机器学习实战之AdaBoost算法boosting
算法系列
的基本思想,如下图:adaBoost分类器就是一种元算法分类器,adaBoost分类器利用同一种基
AI信仰者
·
2024-02-07 17:54
蓝桥杯精选赛题
算法系列
——迷宫——DFS
已收录此专栏。今天我们会全面学习DFS的相关知识,包括理论、模板、真题等。深度优先搜索(DFS,Depth-FirstSearch)和宽度优先搜索(BFS,Breadth-FirstSearch,或称为广度优先搜索)是基本的暴力技术,常用于解决图、树的遍历问题。我们以老鼠走迷宫为例说明BFS和DFS的原理吧。迷宫内的路错综复杂,老鼠从入口进去后,怎么才能找到出口?有两种方案:1.一只老鼠走迷宫。它
wzyannn
·
2024-01-31 02:07
蓝桥杯算法大全
蓝桥杯
算法
数据结构
结构与
算法系列
(二叉搜索树)
关于树对于树的数据结构大家都了解,只是树的类型有很多,所以可能又会对树产生一种陌生感。树其实就是由有限n(n>=1)个节点组成的一个具有层次关系的集合,它看起来像一棵倒挂的树,所以称之为“树”。树的特点每个节点有若干个或0个子节点;根节点没有父节点;每一个非根节点有且只有一个父节点;每个子节点可以分为多个不相交的子树;二叉搜索树二叉搜索树(BinarySearchTree,简写BST),又称为二叉
timothyue1
·
2024-01-30 13:22
二叉树的遍历(左中右及层级)
以后我们又多了一个
算法系列
,会带着大家一起向着成神之路迈进。什么是二叉树?简单介绍下,二叉树是一种典型的树状结构。
热心的大肚皮
·
2024-01-29 23:42
【模拟
算法系列
】详解5道题
本文讲解模拟
算法系列
的5道经典题,在讲解题目的同时提供AC代码,点击题目即可打开对应OJ链接目录模拟算法的介绍1、替换所有的问号2、提莫攻击3、Z字形变换4、外观数列5、数青蛙模拟算法的介绍题目中明确告诉你要干什么
姜暮、
·
2024-01-28 19:49
【算法之路】
算法
数据结构
c++
leetcode
算法之链表反转
算法系列
1、链表反转文章目录
算法系列
一、核心思路二、循环反转2.1示例代码三、递归反转3.1示例代码四、总结一、核心思路现在有一个单向链表,链表的第一个节点指向第二个,第二个节点指向第三个,以此类推,组成一个链表
YPhen
·
2024-01-27 14:05
算法
链表
算法
数据结构
[
算法系列
] 两数之和——无序数组(Java)
publicint[]twoSum(int[]nums,inttarget){Mapmap=newHashMap<>();for(inti=0;i
没有一杯咖啡逃过九块九除了我
·
2024-01-26 05:06
算法
算法
java
[
算法系列
] 两数之和——有序数组(Java)
publicint[]twoSum(int[]nums,inttarget){int[]ans=newint[2];for(inti=0,j=nums.length-1;itarget){j--;}else{i++;}}returnans;}
没有一杯咖啡逃过九块九除了我
·
2024-01-26 05:06
算法
算法
java
[
算法系列
] x的平方根——牛顿迭代(Java)
publicdoublegetSqrt(doubleinput){doublex=1;doublex1=x-(x*x-input)/(2*x);while(x-x1>0.00000001||x-x1<-0.00000001){x=x1;x1=x-(x*x-input)/(2*x);}returnx1;}
没有一杯咖啡逃过九块九除了我
·
2024-01-26 05:36
算法
算法
java
[
算法系列
] 文件或文件夹的复制(Java)
publicclassSthHomework02{publicstaticvoidmain(String[]args){Scannerinput=newScanner(System.in);System.out.println("请输入原文件夹地址");Filesrc=newFile(input.nextLine());while(true){System.out.println("请输入目的文件
没有一杯咖啡逃过九块九除了我
·
2024-01-26 05:35
算法
java
算法
[
算法系列
] 随机字符不重复(Java)
publicstaticStringgenerate(){char[]letters={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};boolean[]flags=newboolean[letters.length];char[]cho
没有一杯咖啡逃过九块九除了我
·
2024-01-26 05:35
算法
java
算法
【c++笔记】用c++解决一系列质数问题!
质数是c语言和c++中比较常见的数学问题,本篇文章将带你走进有关质数的一系列基础问题,其中包含常见的思路总结,本篇文章过后,将会持续更新c++
算法系列
,感兴趣的话麻烦点个关注吧!
AM越.
·
2024-01-26 01:00
c++
笔记
开发语言
【c++】算法:高精度(经典加减乘除){含解析(图解)}
Hi~o(* ̄▽ ̄*)ブ,今天来一起看看c++算法之高精度之后会持续更新有关c++
算法系列
,欢迎观看!
AM越.
·
2024-01-26 01:00
c++
开发语言
Leetcode
算法系列
| 11. 盛最多水的容器
目录1.题目2.题解C#解法一:暴力C#解法二:双指针(左指针大于右指针,left++)C#解法三:双指针优化(左指针小于等于最小高度,left++)Java解法一:双指针Python3解法一:双指针1.题目给定一个长度为n的整数数组height。有n条垂线,第i条线的两个端点是(i,0)和(i,height[i])。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。返回容器可以储存
游戏开发小Y
·
2024-01-22 20:37
Leetcode算法系列
算法
leetcode
c#
unity
数据结构
泛型
算法系列
33:merge()&&inplace_merge()
#include#include#include#include#include#includeusingnamespacestd;/************************************************************************//**/templateinline_OutItmy_Merge(_InIt1_First1,_InIt1_Last1,
进击的横打
·
2024-01-20 22:14
C++
STL
merge
算法
iterator
distance
vector
each
泛型
算法系列
26:inplace_merge()
#include#include#include#includeusingnamespacestd;/************************************************************************//**/templateinlinevoidmy_inplace_merge(_BidIt_First,_BidIt_Mid,_BidIt_Last){
进击的横打
·
2024-01-20 22:13
C++
STL
merge
算法
distance
iterator
class
each
算法系列
十一:十大经典排序算法之——计数排序
文章目录1.计数排序1.1算法思想1.2排序过程1.3算法详解1.4动图演示1.5代码实例解释2.总结1.计数排序什么是计数排序?计数排序是一个非基于比较的排序算法,该算法于1954年由HaroldH.Seward提出。它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο(n+k)(其中k是整数的范围),快于任何比较排序算法。当然这是一种牺牲空间换取时间的做法,而且当O(k)>O(n*log(n
Pisces_224
·
2024-01-16 02:40
算法学习
算法
排序算法
数据结构
极坐标格式算法(PFA)-SAR成像
算法系列
(六)
系列文章目录《SAR学习笔记》《SAR学习笔记-代码部分》《SAR学习笔记后续-phased工具箱介绍》《SAR学习笔记-SAR成像
算法系列
(一)》《后向投影算法(BPA)-SAR成像
算法系列
(二)》《
【杨(_> <_)】
·
2024-01-15 08:44
信号处理
SAR
代码实现
信号处理
算法
学习
蓝桥杯精选赛题
算法系列
——翻硬币——贪心法
已收录此专栏。今天我们来学一学贪心算法。贪心(Greedy)可以说是最容易理解的算法思想:把整个问题分解成多个步骤,在每个步骤,都选取当前步骤的最优方案,直到所有步骤结束;在每一步,都不考虑对后续步骤的影响,在后续步骤中也不再回头改变前面的选择。简单地说,其思想就是“走一步看一步”、“目光短浅”。那这贪心法有啥用呢?贪心法有广泛的应用。例如图论中的最小生成树算法、单源最短路径算法Dijkstra,
wzyannn
·
2024-01-13 15:55
蓝桥杯算法大全
算法
蓝桥杯
贪心算法
java程序员面试怎么介绍项目,2022最新
接下来我就给大家来做介绍:他是拥有5年Java开发经验,其中3年以上第二阶段:千亿流量高并发高可用分布式系统之技术底层支撑篇(面试);第三阶段:面试
算法系列
篇:技术底层支撑之数据结构算法-从萌新到BAT
阳阳2013哈哈
·
2024-01-09 08:07
Java
程序员
java
面试
程序人生
Leetcode
算法系列
| 12. 整数转罗马数字
目录1.题目2.题解C#解法一:模拟C#解法二:硬编码数字1.题目罗马数字包含以下七种字符:I,V,X,L,C,D和M。字符数值I1V5X10L50C100D500M1000例如,罗马数字2写做II,即为两个并列的1。12写做XII,即为X+II。27写做XXVII,即为XX+V+II。通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如4不写做IIII,而是IV。数字1在数字5的左
游戏开发小Y
·
2024-01-09 06:49
Leetcode算法系列
算法
leetcode
c#
python
数据结构
unity
【Python排序
算法系列
】—— 希尔排序
个人主页:Aileen_0v0热门专栏:华为鸿蒙系统学习|计算机网络|数据结构与算法个人格言:"没有罗马,那就自己创造罗马~"目录希尔排序(ShellSort)由来和特点理解过程演示Step1:Step2:Step3:实现代码:SelfCheck总结:希尔排序(ShellSort)由来和特点希尔排序是一种高效的排序算法,由美国计算机科学家DonaldShell于1959年提出。希尔排序基于插入排序
Aileen_0v0
·
2024-01-08 01:26
数据结构与算法
排序算法
算法
数据结构
python
动态规划
希尔排序
目标检测-One Stage-EfficientDet
EfficientNetEfficientNet-B0baselineMBConv参数优化EfficientNetB0-B7参数二、EfficientDetBiFPN复合缩放方法总结前言EfficientDet是google在2019年11月发表的一个目标检测
算法系列
学海一叶
·
2024-01-06 06:04
目标检测
目标检测
目标跟踪
人工智能
计算机视觉
深度学习
LeetCode算法题4:DFS和BFS
合并二叉树DFS:BFS:上面BFS算法存在的问题:修改1:修改2:四、填充每个节点的下一个右侧节点指针思路1:树的层序遍历思路2:五、01矩阵BFS:DP:六、腐烂的橘子BFS:总结前言Leetcode
算法系列
消逝者
·
2024-01-04 09:46
LeetCode算法
深度优先
算法
leetcode
广度优先
【CSDN软件工程师能力认证学习精选】python机器学习手写
算法系列
——线性回归
CSDN软件工程师能力认证(以下简称C系列认证)是由中国软件开发者网CSDN制定并推出的一个能力认证标准。C系列认证历经近一年的实际线下调研、考察、迭代、测试,并梳理出软件工程师开发过程中所需的各项技术技能,结合企业招聘需求和人才应聘痛点,基于公开、透明、公正的原则,甑别人才时确保真实业务场景、全部上机实操、所有过程留痕、存档不可篡改。我们每天将都会精选CSDN站内技术文章供大家学习,帮助大家系统
高校俱乐部
·
2024-01-04 01:28
CSDN软件工程师能力认证
学习能力
机器学习
python
【Python排序
算法系列
】—— 插入排序
个人主页:Aileen_0v0热门专栏:华为鸿蒙系统学习|计算机网络|数据结构与算法个人格言:"没有罗马,那就自己创造罗马~"2023年度总结→http://t.csdnimg.cn/yIeru目录插入排序理解过程演示:插入排序实现代码:SelfCheck我的思路:总结:插入排序理解插入排序时间复杂度仍然是O(n²),但算法思路与冒泡排序、选择排序不同插入排序维持一个已排好序的子列表,其位置始终在
Aileen_0v0
·
2024-01-03 06:26
数据结构与算法
排序算法
算法
java
python
经验分享
学习
开发语言
深度学习从入门到不想放弃-5
天可见发生了多少事情...今天我们讲讲特征,算是基础篇的一个番外篇延伸,我省着在后面的文章里写了,怕扰乱了思路严格来说这个属于基础机器学习领域里的了,我又不讲决策树,贝叶斯,隐马尔可夫啥的(不在这个系列写,也许在别的
算法系列
文章里写
周博洋K
·
2024-01-03 05:25
深度学习
人工智能
【
算法系列
| 11】深入解析查找算法之—插值查找
序言心若有阳光,你便会看见这个世界有那么多美好值得期待和向往。决定开一个算法专栏,希望能帮助大家很好的了解算法。主要深入解析每个算法,从概念到示例。我们一起努力,成为更好的自己!今天第11讲,讲一下查找算法的—插值查找算法一、基础介绍查找算法是计算机科学中的一类算法,用于在数据集中寻找特定值或数据项。其目标是确定数据是否存在于给定的数据结构中,并找到数据项的位置(索引)或其他相关信息。不同的查找算
颜淡慕潇
·
2024-01-02 15:51
算法系列
算法
插值查找算法
Java-插值查找
python-插值查找
设计模式(4)--对象行为(9)--策略
2.三种角色抽象策略(Strategy)、具体策略(ConcreteStrategy)、上下文环境(Context)3.优点3.1可重用的相关
算法系列
。
myepicure888
·
2023-12-31 15:19
设计模式
设计模式
Leetcode
算法系列
| 8. 字符串转换整数 (atoi)
目录1.题目2.题解C#解法一:及其臃肿的代码C#解法二:DFA(确定有穷自动机)1.题目请你来实现一个myAtoi(strings)函数,使其能将字符串转换成一个32位有符号整数(类似C/C++中的atoi函数)。函数myAtoi(strings)的算法如下:1.读入字符串并丢弃无用的前导空格2.检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。确定最终结果是负数还是正数。
游戏开发小Y
·
2023-12-31 12:10
Leetcode算法系列
算法
leetcode
数据结构
c#
unity
Leetcode
算法系列
| 9. 回文数
目录1.题目2.题解C#解法一:反转一半数字Java解法一:反转一半数字1.题目给你一个整数x,如果x是一个回文整数,返回true;否则,返回false。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121是回文,而123不是。示例1:输入:x=121输出:true示例2:输入:x=-121输出:false解释:从左向右读,为-121。从右向左读,为121-。因此它不是一个回
游戏开发小Y
·
2023-12-31 12:10
Leetcode算法系列
算法
leetcode
数据结构
c#
unity
上一页
1
2
3
4
5
6
7
8
下一页
按字母分类:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
其他