热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

03机器学习_(贝叶斯分类算法与应用)

机器学习算法day02_贝叶斯分类算法及应用课程大纲

机器学习算法day02_贝叶斯分类算法及应用

课程大纲



























朴素贝叶斯算法原理

Bayes算法概述

Bayes算法思想

Bayes算法要点

朴素贝叶斯算法案例1

需求

Python实现

朴素贝叶斯算法案例2

需求

Python实现

 

 

 

 

课程目标:

1、理解朴素贝叶斯算法的核心思想

2、理解朴素贝叶斯算法的代码实现

3、掌握朴素贝叶斯算法的应用步骤:数据处理、建模、运算和结果判定

4、

1. 朴素贝叶斯分类算法原理

1.1 概述

贝叶斯分类算法是一大类分类算法的总称

贝叶斯分类算法以样本可能属于某类的概率来作为分类依据

朴素贝叶斯分类算法是贝叶斯分类算法中最简单的一种

注:朴素的意思是条件概率独立性

 

1.2 算法思想

朴素贝叶斯的思想是这样的:

如果一个事物在一些属性条件发生的情况下,事物属于A的概率>属于B的概率,则判定事物属于A

 

 

通俗来说比如,你在街上看到一个黑人,我让你猜这哥们哪里来的,你十有八九猜非洲。为什么呢?

在你的脑海中,有这么一个判断流程:

1、这个人的肤色是黑色 <特征>

2、黑色人种是非洲人的概率最高 <条件概率:黑色条件下是非洲人的概率>

3、没有其他辅助信息的情况下,最好的判断就是非洲人

这就是朴素贝叶斯的思想基础。

&#160;

再扩展一下,假如在街上看到一个黑人讲英语,那我们是怎么去判断他来自于哪里?

提取特征:

肤色:&#160;黑

语言: 英语

&#160;

黑色人种来自非洲的概率: 80%

黑色人种来自于美国的概率:20%

&#160;

讲英语的人来自于非洲的概率:10%

讲英语的人来自于美国的概率:90%

&#160;

在我们的自然思维方式中,就会这样判断:

这个人来自非洲的概率:80% * 10% = 0.08

这个人来自美国的概率:20% * 90% =0.18

我们的判断结果就是:此人来自美国!

&#160;

其蕴含的数学原理如下:

p(A|xy)=p(Axy)/p(xy)=p(Axy)/p(x)p(y)=p(A)/p(x)*p(A)/p(y)* p(xy)/p(xy)=p(A|x)p(A|y)







朴素贝叶斯分类器

  朴素贝叶斯分类器的表示形式:

&#160;

  当特征为为x时,计算所有类别的条件概率,选取条件概率最大的类别作为待分类的类别。由于上公式的分母对每个类别都是一样的,因此计算时可以不考虑分母,即

&#160;

  朴素贝叶斯的朴素体现在其对各个条件的独立性假设上,加上独立假设后,大大减少了参数假设空间。  

&#160;

&#160;

&#160;

&#160;

&#160;

&#160;

&#160;

&#160;

1.3 算法要点


1.3.1 算法步骤

1、分解各类先验样本数据中的特征

2、计算各类数据中,各特征的条件概率

(比如:特征1出现的情况下,属于A类的概率p(A|特征1),属于B类的概率p(B|特征1),属于C类的概率p(C|特征1)......)

3、分解待分类数据中的特征(特征1、特征2、特征3、特征4......)

4、计算各特征的各条件概率的乘积,如下所示:

判断为A类的概率:p(A|特征1)*p(A|特征2)*p(A|特征3)*p(A|特征4).....

判断为B类的概率:p(B|特征1)*p(B|特征2)*p(B|特征3)*p(B|特征4).....

判断为C类的概率:p(C|特征1)*p(C|特征2)*p(C|特征3)*p(C|特征4).....

......

5、结果中的最大值就是该样本所属的类别

&#160;

1.3.2 算法应用举例

大众点评、淘宝等电商上都会有大量的用户评论,比如:








1、衣服质量太差了!!!!颜色根本不纯!!!

2、我有一有种上当受骗的感觉!!!!

3、质量太差,衣服拿到手感觉像旧货!!!

4、上身漂亮,合身,很帅,给卖家点赞

5、穿上衣服帅呆了,给点一万个赞

6、我在他家买了三件衣服!!!!质量都很差!

0

0

0

1

1

0

&#160;

其中1/2/3/6是差评,4/5是好评

现在需要使用朴素贝叶斯分类算法来自动分类其他的评论,比如:







a、这么差的衣服以后再也不买了

b、帅,有逼格

……

&#160;

&#160;

1.3.3 算法应用流程

1、分解出先验数据中的各特征

(即分词,比如“衣服”“质量太差”“差”“不纯”“帅”“漂亮”,“赞”……)

2、计算各类别(好评、差评)中,各特征的条件概率

(比如 p(“衣服”|差评)、p(“衣服”|好评)、p(“差”|好评) 、p(“差”|差评)……)

3、分解出待分类样本的各特征

(比如分解a: “差” “衣服” ……)

4、计算类别概率

P(好评) = p(好评|“差”) *p(好评|“衣服”)*……

P(差评) = p(差评|“差”) *p(差评|“衣服”)*……

5、显然P(差评)的结果值更大,因此a被判别为“差评”

&#160;

&#160;

2. 朴素贝叶斯分类算法案例1

2.1 需求

客户评论分类:

以在线社区的留言板为例。为了不影响社区的发展,我们要屏蔽侮辱性的言论,所以要构建一个快速过滤器,如果某条留言使用了负面或者侮辱性的语言,那么就将该留言标识为内容不当。过滤这类内容是一个很常见的需求。对此问题建立两个类别:侮辱类和非侮辱类,使用1和0分别标识。

有以下先验数据,使用bayes算法对未知类别数据分类
































帖子内容

类别

&#39;my&#39;,&#39;dog&#39;,&#39;has&#39;,&#39;flea&#39;,&#39;problems&#39;,&#39;help&#39;,&#39;please&#39;

0

&#39;maybe&#39;,&#39;not&#39;,&#39;take&#39;,&#39;him&#39;,&#39;to&#39;,&#39;dog&#39;,&#39;park&#39;,&#39;stupid&#39;

1

&#39;my&#39;,&#39;dalmation&#39;,&#39;is&#39;,&#39;so&#39;,&#39;cute&#39;,&#39;I&#39;,&#39;love&#39;,&#39;him&#39;

0

&#39;stop&#39;,&#39;posting&#39;,&#39;stupid&#39;,&#39;worthless&#39;,&#39;garbage&#39;

1

&#39;mr&#39;,&#39;licks&#39;,&#39;ate&#39;,&#39;my&#39;,&#39;steak&#39;,&#39;how&#39;,&#39;to&#39;,&#39;stop&#39;,&#39;him&#39;

0

&#39;quit&#39;,&#39;buying&#39;,&#39;worthless&#39;,&#39;dog&#39;,&#39;food&#39;,&#39;stupid&#39;

1

&#160;

待分类数据:












&#39;love&#39;,&#39;my&#39;,&#39;dalmation&#39;

?

&#39;stupid&#39;,&#39;garbage&#39;

?

&#160;

&#160;

2.2 模型分析

参见1.3.2

跟1.3.2节中的举例基本一致,中文换成英文即可

&#160;

2.2 Python实现


(1) 词表到词向量的转换函数








from numpy import *

#过滤网站的恶意留言

# 创建一个实验样本

def loadDataSet():

&#160;&#160;&#160;&#160;postingList = [[&#39;my&#39;,&#39;dog&#39;,&#39;has&#39;,&#39;flea&#39;,&#39;problems&#39;,&#39;help&#39;,&#39;please&#39;],

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;[&#39;maybe&#39;,&#39;not&#39;,&#39;take&#39;,&#39;him&#39;,&#39;to&#39;,&#39;dog&#39;,&#39;park&#39;,&#39;stupid&#39;],

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;[&#39;my&#39;,&#39;dalmation&#39;,&#39;is&#39;,&#39;so&#39;,&#39;cute&#39;,&#39;I&#39;,&#39;love&#39;,&#39;him&#39;],

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;[&#39;stop&#39;,&#39;posting&#39;,&#39;stupid&#39;,&#39;worthless&#39;,&#39;garbage&#39;],

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;[&#39;mr&#39;,&#39;licks&#39;,&#39;ate&#39;,&#39;my&#39;,&#39;steak&#39;,&#39;how&#39;,&#39;to&#39;,&#39;stop&#39;,&#39;him&#39;],

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;[&#39;quit&#39;,&#39;buying&#39;,&#39;worthless&#39;,&#39;dog&#39;,&#39;food&#39;,&#39;stupid&#39;]]

&#160;&#160;&#160;&#160;classVec = [0,1,0,1,0,1]

&#160;&#160;&#160;&#160;return postingList, classVec

# 创建一个包含在所有文档中出现的不重复词的列表

def createVocabList(dataSet):

&#160;&#160;&#160;&#160;vocabSet = set([]) &#160;&#160;&#160;&#160;&#160;#创建一个空集

&#160;&#160;&#160;&#160;for document in dataSet:

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;vocabSet = vocabSet | set(document) &#160;&#160;#创建两个集合的并集

&#160;&#160;&#160;&#160;return list(vocabSet)

&#160;

#将文档词条转换成词向量

def setOfWords2Vec(vocabList, inputSet):

&#160;&#160;&#160;&#160;returnVec = [0]*len(vocabList) &#160;&#160;&#160;&#160;&#160;&#160;&#160;#创建一个其中所含元素都为0的向量

&#160;&#160;&#160;&#160;for word in inputSet:

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if word in vocabList:

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;#returnVec[vocabList.index(word)] = 1 &#160;&#160;&#160;&#160;#index函数在字符串里找到字符第一次出现的位置 &#160;词集模型

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;returnVec[vocabList.index(word)] += 1 &#160;&#160;&#160;&#160;&#160;#文档的词袋模型 &#160;&#160;&#160;每个单词可以出现多次

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else: print "the word: %s is not in my Vocabulary!" % word

&#160;&#160;&#160;&#160;return returnVec

&#160;

(2)&#160;从词向量计算概率








#朴素贝叶斯分类器训练函数 &#160;&#160;从词向量计算概率

def trainNB0(trainMatrix, trainCategory):

&#160;&#160;&#160;&#160;numTrainDocs = len(trainMatrix)

&#160;&#160;&#160;&#160;numWords = len(trainMatrix[0])

&#160;&#160;&#160;&#160;pAbusive = sum(trainCategory)/float(numTrainDocs)

&#160;&#160;&#160;# p0Num = zeros(numWords); p1Num = zeros(numWords)

&#160;&#160;&#160;&#160;#p0Denom = 0.0; p1Denom = 0.0

p0Num = ones(numWords); &#160;&#160;#避免一个概率值为0,最后的乘积也为0

p1Num = ones(numWords); &#160;&#160;#用来统计两类数据中,各词的词频 &#160;&#160;&#160;&#160;

p0Denom = 2.0; &#160;#用于统计0类中的总数

p1Denom = 2.0 &#160;#用于统计1类中的总数

&#160;&#160;&#160;&#160;for i in range(numTrainDocs):

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if trainCategory[i] == 1:

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;p1Num += trainMatrix[i]

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;p1Denom += sum(trainMatrix[i])

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else:

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;p0Num += trainMatrix[i]

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;p0Denom += sum(trainMatrix[i])

&#160;&#160;&#160;# p1Vect = p1Num / p1Denom

&#160;&#160;&#160;&#160;#p0Vect = p0Num / p0Denom

&#160;&#160;&#160;&#160;p1Vect = log(p1Num / p1Denom) &#160;&#160;&#160;#在类1中,每个次的发生概率

&#160;&#160;&#160;&#160;p0Vect = log(p0Num / p0Denom) &#160;&#160;&#160;&#160;&#160;#避免下溢出或者浮点数舍入导致的错误 &#160;&#160;下溢出是由太多很小的数相乘得到的

&#160;&#160;&#160;&#160;return p0Vect, p1Vect, pAbusive

&#160;

(3)&#160;根据现实情况修改分类器

注意:主要从以下两点对分类器进行修改

① 贝叶斯概率需要计算多个概率的乘积以获得文档属于某个类别的概率,即计算p(w0|1)p(w1|1)p(w2|1)。如果其中一个概率值为0,那么最后的乘积也为0

② 第二个问题就是下溢出,这是由于太多过小的数相乘造成的。由于大部分因子都非常小,所以程序会下溢出或者得不到正确的答案。解决办法是对乘积取自然对数这样可以避免下溢出或者浮点数舍入导致的错误。

③ 每个单词的出现与否作为一个特征,被称为词集模型;在词袋模型中,每个单词可以出现多次。







#朴素贝叶斯分类器

def classifyNB(vec2Classify, p0Vec, p1Vec, pClass1):

&#160;&#160;&#160;&#160;p1 = sum(vec2Classify*p1Vec) + log(pClass1)

&#160;&#160;&#160;&#160;p0 = sum(vec2Classify*p0Vec) + log(1.0-pClass1)

&#160;&#160;&#160;&#160;if p1 > p0:

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return 1

&#160;&#160;&#160;&#160;else: return 0

def testingNB():

&#160;&#160;&#160;&#160;listOPosts, listClasses = loadDataSet()

&#160;&#160;&#160;&#160;myVocabList = createVocabList(listOPosts)

&#160;&#160;&#160;&#160;trainMat = []

&#160;&#160;&#160;&#160;for postinDoc in listOPosts:

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;trainMat.append(setOfWords2Vec(myVocabList, postinDoc))

&#160;&#160;&#160;&#160;p0V, p1V, pAb = trainNB0(array(trainMat), array(listClasses))

&#160;&#160;&#160;&#160;testEntry = [&#39;love&#39;,&#39;my&#39;,&#39;dalmation&#39;]

&#160;&#160;&#160;&#160;thisDoc = array(setOfWords2Vec(myVocabList, testEntry))

&#160;&#160;&#160;&#160;print testEntry, &#39;classified as: &#39;, classifyNB(thisDoc, p0V, p1V, pAb)

&#160;&#160;&#160;&#160;testEntry = [&#39;stupid&#39;,&#39;garbage&#39;]

&#160;&#160;&#160;&#160;thisDoc = array(setOfWords2Vec(myVocabList, testEntry))

&#160;&#160;&#160;&#160;print testEntry, &#39;classified as: &#39;, classifyNB(thisDoc, p0V, p1V, pAb)


(4)&#160;运行测试








>>>reload(bayes)

>>>bayes.testingNB()

[&#39;love&#39;,&#39;my&#39;,&#39;dalmation&#39;] classified as: 0

[&#39;stupid&#39;,&#39;garbage&#39;] classified as: 1


3、朴素贝叶斯分类算法案例2

3.1 需求

利用大量邮件先验数据,使用朴素贝叶斯分类算法来自动识别垃圾邮件

&#160;

3.2 python实现








#过滤垃圾邮件

def textParse(bigString): &#160;&#160;&#160;&#160;&#160;#正则表达式进行文本解析

&#160;&#160;&#160;&#160;import re

&#160;&#160;&#160;&#160;listOfTokens = re.split(r&#39;\W*&#39;,bigString)

&#160;&#160;&#160;&#160;return [tok.lower() for tok in listOfTokens if len(tok) > 2]

&#160;

def spamTest():

&#160;&#160;&#160;&#160;docList = []; classList = []; fullText = []

&#160;&#160;&#160;&#160;for i in range(1,26): &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;#导入并解析文本文件

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;wordList = textParse(open(&#39;email/spam/%d.txt&#39; % i).read())

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;docList.append(wordList)

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;fullText.extend(wordList)

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;classList.append(1)

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;wordList = textParse(open(&#39;email/ham/%d.txt&#39; % i).read())

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;docList.append(wordList)

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;fullText.extend(wordList)

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;classList.append(0)

&#160;&#160;&#160;&#160;vocabList = createVocabList(docList)

&#160;&#160;&#160;&#160;trainingSet = range(50);testSet = []

&#160;&#160;&#160;&#160;for i in range(10): &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;#随机构建训练集

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;randIndex = int(random.uniform(0,len(trainingSet)))

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;testSet.append(trainingSet[randIndex]) &#160;&#160;&#160;#随机挑选一个文档索引号放入测试集

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;del(trainingSet[randIndex]) &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;#将该文档索引号从训练集中剔除

&#160;&#160;&#160;&#160;trainMat = []; trainClasses = []

&#160;&#160;&#160;&#160;for docIndex in trainingSet:

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;trainMat.append(setOfWords2Vec(vocabList, docList[docIndex]))

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;trainClasses.append(classList[docIndex])

&#160;&#160;&#160;&#160;p0V, p1V, pSpam = trainNB0(array(trainMat), array(trainClasses))

&#160;&#160;&#160;&#160;errorCount = 0

&#160;&#160;&#160;&#160;for docIndex in testSet: &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;#对测试集进行分类

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;wordVector = setOfWords2Vec(vocabList, docList[docIndex])

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if classifyNB(array(wordVector), p0V, p1V, pSpam) != classList[docIndex]:

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;errorCount += 1

&#160;&#160;&#160;&#160;print &#39;the error rate is: &#39;, float(errorCount)/len(testSet)



推荐阅读
  • 本文介绍了贝叶斯垃圾邮件分类的机器学习代码,代码来源于https://www.cnblogs.com/huangyc/p/10327209.html,并对代码进行了简介。朴素贝叶斯分类器训练函数包括求p(Ci)和基于词汇表的p(w|Ci)。 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文介绍了如何使用python从列表中删除所有的零,并将结果以列表形式输出,同时提供了示例格式。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
author-avatar
天雨
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有