留言与评论(共有 0 条评论) |
发布时间:2020-04-12 09:05:46
java里面本身是包含算法的,只不过它的算法比着大数据python 那些,还是显得有点low的。在java编程学习的过程中,你会接触到一些排序,比如冒泡排序,选择排序,希尔排序,归并排序等,这可以当作是学习算法的入门吧。下面我们从几个阶段来讨论:
1.学习阶段
刚开始学习java编程,主要还是熟悉它的基本语法,以及常用的框架,做到能够开发企业级项目,对于一些算法你可以作为了解,毕竟初级阶段,你出去面试找工作,人家也不会难为你问到一些复杂的算法。
2.工作阶段
这个阶段你已经步入职场了,在职场中,你会发现,算法几乎用不到,可能是你还没到那个价格,但是这并不意味着,你就不需要学习算法了。相反,在你工作的同时,你就要留意公司里面所用的框架,关键的技术点,尤其是用到的算法。有了大致了解后,你就需要利用你工作之余的时间,开始学习算法了,因为你不会是想当一辈子的程序员吧?不想的话,你就要下足功夫去学算法,开源的框架等。
综上所述,你在学习阶段学习一些简单的算法,以及对算法有一个大致的了解,就足够了。在工作阶段,才是你学习算法的好时机。
以上就是我的回答,希望能帮助到你,谢谢。
java编程的学习与算法的学习是相辅相成的,算法的学习需要你已经有了一定的基础,下面我来告诉你学习算法以前怎么学习java编程。
1.从你建第一个java类,写下第一个main方法,输出第一个hello world开始,学习一个java方法的构成
2.学习Java的基本数据类型、变量类型、修饰符、运算符,学习条件语句、for循环等。
3.学习字符串、数组的操作,字符串、数组可以说是你在开发的过程中经常使用的部分。
4.学习Java的异常处理,你在编程过程中肯定需要考虑错误问题,如何对错误进行处理以及捕获异常需要你去掌握。
5.学习面向对象,了解Java的封装、继承、多态,掌握抽象类和接口的编写。
6.至此,你已经掌握了基本的Java知识,能够编写一些程序,但对于算法的实现需要你先去理解算法,然后转化为程序实现算法的逻辑。
1.算法的学习由浅入深,从实现简单的算法开始。比如,学习实现冒泡排序、快速排序、插入排序、归并排序等等,在这里你可以利用数组的知识去一一进行实现。
2.Java工具包提供了强大的数据结构,为此,你需要掌握几种接口和类:
3.下一步该学习更难一些的数据结构算法,分别为:
还有其他的一些算法,需要你去了解学习啦,想当年我去找实习面试官问了一个需要用字典树解决的问题,然而当时的我太年轻,没有太重视算法,结果可想而知、面试碰壁了。
4.刷leetcode
leetcode是一个老少皆宜的网站,你想刷算法题的话可以去那里,很多老司机在那里刷题保持写代码的手感,如果找工作刷leetcode也是必备之品。
当然有一点需要注意,很多算法题需要你利用数学知识去解决,所以在编写算法题时很可能需要你去恶补下数学。
还有一点友情提示,LeetCode是一个英文平台,你在做题时必备谷歌翻译,想他们参加ACM比赛都是去借大头目牛津英汉字典!
码了这么多字,点个赞关注下再走吧!!!
关注 猿见(本人咯),了解更多IT知识与见解,随着我看见不一样的世界!!
谢谢邀请回答!
我认为你在学习算法前,必须要掌握Java的一些基础理论知识,比如:理解并掌握&和&&,JVM、JRE和JDK的区别,path和classpath的作用,Java语言的三种技术架构等等。同时,请你不用耗太多时间去学数据结构,因为Java本身就有这库,直接用就是行了,不过对数据结构你肯定要有一定程度的了解,不然你知道有类库也不知道咋用,更不知何时用了。
当你学好10种算法后,可以深入学习Java的高级应用,譬如:线程开发、WEB编程、数据库开发、GUI的开发,等等。
以上建议属我个人的一点点想法,希望能对你有所帮助和启发!!?
谢谢邀请!
算法和数据结构对于编程来说是非常重要的,因为程序设计说到底就是一个算法问题,在后端开发、大数据以及人工智能相关的开发中,算法都是非常重要的从业基础。算法本身是独立于程序设计的,但是要想真正的掌握算法需要通过编程语言对算法予以实现,所以通常情况下都是掌握了编程基础之后再开始学习算法和数据结构。
以Web开发为例,学习Java的过程大概分为三个阶段,分别是编程语言基础、Web开发基础、分布式开发和框架开发,通常情况下在编程基础学习完之后就可以学习算法和数据结构了。Java编程基础包括掌握面向对象编程过程、数组、流程控制、封装、继承、多态、异常处理、IO、集合、多线程以及网络编程等内容。
算法设计的学习往往从排序开始,然后是递归求解、概率分析、随机算法、数据结构(栈、队列、链表、图、树等)、贪心算法、核算法、图算法等内容,算法的学习需要一个系统的过程,同时要结合实验进行。其实,算法的学习也可以先于编程语言的学习,不少算法设计的教材会提供基于算法的伪代码的实现过程,对于没有编程基础的人来说也能够了解算法的实现过程,看两个例子:
算法设计的基础是数学,所以在学习算法之前要对高等数学、线性代数、概率论和离散数学有一定的了解,因此数学对于计算机专业来说还是非常重要的,如果要想在软件研发这条路上走的更远,一定要有一个扎实的数学基础。
对于研发级程序员来说,几乎每天都要跟算法打交道,但是对于应用级程序员来说,与算法打交道的时候往往并不多,对于学习者来说要根据自身的知识结构来选择发展方向,做应用级研发也是可以的。
我的主要研究方向是大数据和人工智能,目前也是一名计算机专业的研究生导师,我会陆续在头条写一些关于互联网、大数据、人工智能等方面的文章,感兴趣的朋友可以关注我,相信一定会有所收获。
如果有大数据相关的问题,也可以咨询我,谢谢!
基础学完,学数据结构,然后学算法
算法说白了就是对时间和空间的平衡,换算。其实,算法在java中很少用到,不过也要学习一些(简单的),如遍历,栈,队列,当然还包括递归算法。其实我觉得递归算法很重要,尤其是访问文件目录时。(因此什么时候学并不是需要关注的问题,掌握了Java基础,就可以学了)
当然了,如果只是简单地做一般性应用,大可不必花大心思去学数据结构和算法设计。其一:这些与语言不相关;其二:这些都已经有现成的实现,自己直接调用就行。数据结构与算法设计的重要性,体现在优化而不是实现。
作为Java开发者,建议你在学习Java的基础语法后,就可以学习算法。算法主要是体现的是逻辑或方法,算法其实跟编程语言没有直接关系。
但是你在学习算法过程中,会看到很多算法是通过某种语言来讲解的,所以才建议你学习Java基础语法的。也就是说,只要你能看懂算法教程中的举例,就可以学习算法了。
算法是反应一个人逻辑思维能力的东西,大部分程序员在大部分工作中其实都用不到算法。但是我个人认为程序员对算法的学习应该是贯穿整个编程生涯的,就是只要你有空,就可以研究一小会算法,因为这是对逻辑思维的一个锻炼,即使你平时的工作用不到算法,但是一个良好的逻辑思维能力也是对你的编码有很大帮助的。
算法,首先要清楚什么算法,如果只是简单的查找和排序算法,在学习得语言基础阶段就会接触,其他一些算法,要了解数据结构的相关知识,比如堆栈,队列,链表,图,树等,更高级的算法就要涉及数学知识,比如ai的学习算法,涉及,离散数学,概率统计等。另外,就是要明白,你学习算法的目的是什么,千万不要为了算法而算法,一切学习全在于应用,一定要用到实践中去。
java编程初中级并不会基础太多算法吧,算法主要用于大数据和人工智能居多
一般大学计算机系把语言编程和算法分为两门课:Java Programming 和数据结构及算法(Data Structure and Algorithm)。大部分算法教科书都是有关C++或Java算法和结构的。
算法原理集成学习(ensemble leaning)通过构建并结合多个学习器来完成学习任务,通过将多个学习器结合,常常可以获得比单一学习器显著优越的效果和泛化能力。集成学习中的基学习器可以是同质的,也可以是异质的。根据个体学习器的生成方式,目前的集成学习方法大致可分为三大类:一类是Bagging,个体学习器之间不存在强依赖关系,可以同时并行化训练和生成,最终结果通常通过投票机制产出,随机森林是这一类型的代表;另一类是Boosting,个体学习器之间存在强依赖关系,后一学习器依赖前一学习器的结果,,因此必须以序列化形式串行生成,我们下节会讲到的Adaboost和GBDT是这一类型的代表;其实还有第三类,叫Stacking,即将初级学习器的输出次级学习器的输入特征,深层神经网络甚至可以理解为Stacking集成学习的变种。
随机森林(Random Forest)是以决策树为基学习器构建的Bagging集成学习算法,其实现简单、计算开销小、并且在很多现实任务中表现出抢眼的效果。其主要通过样本扰动和属性扰动使得集成学习的泛化性显著提高。样本扰动是指通过对初始训练集采样构建每一棵决策树;属性扰动是指对基决策树的每个节点,分裂时从该节点的属性集合中随机选择k个属性(k一般去log(d,2),d为属性数量)。
模型训练代码地址:https://github.com/qianshuang/ml-exp
def train():
print("start training...")
# 处理训练数据
train_feature, train_target = process_file(train_dir, word_to_id, cat_to_id)
# 模型训练
model.fit(train_feature, train_target)
def test():
print("start testing...")
# 处理测试数据
test_feature, test_target = process_file(test_dir, word_to_id, cat_to_id)
# test_predict = model.predict(test_feature) # 返回预测类别
test_predict_proba = model.predict_proba(test_feature) # 返回属于各个类别的概率
test_predict = np.argmax(test_predict_proba, 1) # 返回概率最大的类别标签
# accuracy
true_false = (test_predict == test_target)
accuracy = np.count_nonzero(true_false) / float(len(test_target))
print()
print("accuracy is %f" % accuracy)
# precision recall f1-score
print()
print(metrics.classification_report(test_target, test_predict, target_names=categories))
# 混淆矩阵
print("Confusion Matrix...")
print(metrics.confusion_matrix(test_target, test_predict))
if not os.path.exists(vocab_dir):
# 构建词典表
build_vocab(train_dir, vocab_dir)
categories, cat_to_id = read_category()
words, word_to_id = read_vocab(vocab_dir)
# kNN
# model = neighbors.KNeighborsClassifier()
# decision tree
# model = tree.DecisionTreeClassifier()
# random forest
model = ensemble.RandomForestClassifier(n_estimators=10) # n_estimators为基决策树的数量,一般越大效果越好直至趋于收敛
train()
test()运行结果:
ead_category...
read_vocab...
start training...
start testing...
accuracy is 0.875000
precision recall f1-score support
娱乐 0.83 0.91 0.87 89
房产 0.78 0.83 0.80 104
教育 0.81 0.81 0.81 104
家居 0.75 0.71 0.73 89
游戏 0.93 0.95 0.94 104
时政 0.78 0.79 0.78 94
时尚 0.94 0.89 0.92 91
体育 0.98 0.97 0.97 116
财经 0.95 0.91 0.93 115
科技 0.99 0.96 0.97 94
avg / total 0.88 0.88 0.88 1000
Confusion Matrix...
--------------------- 了解更多干货文章可以关注小程序八斗问答
留言与评论(共有 0 条评论) |
全站搜索