java分类算法(最简单的分类算法)

今天给各位分享java分类算法的知识,其中也会对最简单的分类算法进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

1、Java 排序算法(选择、冒泡)等等2、Java实现通用组合算法3、Java算法4、JAVA 二分算法只能对数字进行查找吗5、java二分搜索算法怎样实现?6、java中哪些可以涉及算法

Java 排序算法(选择、冒泡)等等

//选择排序

publicstaticvoidselectionSort(int[] elements){

for(inti = 0; i elements.length-1; ++i){

intk = i;

for(intj = i; j elements.length; ++j){

if(elements[k] elements[j]){

k = j;

}

}

if(k != i){//交换元素

inttemp = elements[i];

elements[i] = elements[k];

elements[k] = temp;

}

} }

//冒泡排序

static void bubblesort(int[] a){

int temp;

for(int i=0; ia.length;++i){

for(int j=a.length-1;ji;–j){

if(a[j] a[j-1]){

temp = a[j];

a[j] = a[j-1];

a[j-1] = temp;

}

}

}

}

楼上说的没错,你得自己去学会解决问题。好好加油吧…

java分类算法(最简单的分类算法)

Java实现通用组合算法

Java实现通用组合算法 存在一个类似{ }这样的集合 经过 取 组合 其他位置用非字母数字字符替代 比如使用*号 得到类似{ *** *** }这样的集合

现在有这样的需求

存在一个类似{ }这样的集合 经过 取 组合 其他位置用非字母数字字符替代 比如使用*号 得到类似{ *** *** }这样的集合

还要求对于{ *** *** }这样的集合 再次经过 取 组合 其他位置用非字母数字字符替代 比如使用*号 得到类似{***** ***** *** * * }这样的集合

对于这样的要求 实现的思路如下

首先 主要思想是基于信息编码原理 通过扫描字符串 将 组合变为 组合

其次 对于每个数字字符串 设置一个单线程 在单线程类中设置一个List用来存放待处理数字字符串(可能含有*号 或者不含有)中每个数字的(而非*号)索引位置值

再次 设置BitSet来标志每个位置是否被*号替换得到新的组合字符串

最后 在扫描原始待处理数字字符串的过程中 根据设置的字符列表List中索引 来操作BitSet 对于每一个BitSet得到一个新的组合

使用Java语言实现如下

package shirdrn;import java util ArrayList;import java util BitSet;import java util Collection;import java util Collections;import java util HashSet;import java util Iterator;import java util List;/*** 通用组合拆分类(基于单线程)* 可以完成两种功能 * 第一 可以将完全数字串拆分成为含有*号的字符串 * 例如 输入集合{ } Splitter类会遍历该集合 对每个字符串 创建一个SplitterThread* 线程来处理 如果是 取 组合 即starCount= = 经过线程处理得到类似****** ***** * 等结果* 第二 根据从带有*号的字符串经过拆分过滤后得到的字符串集合 对其中每一个字符串进行组合* 例如 输入集合 取 组合字符串集合{ *** *** }* CommonSplitter类会遍历该集合 对每个带有*号的字符串 创建一个SplitterThread* 线程来处理 如果是 串 组合 即starCount= = 经过线程处理得到类似****** ***** * 等结果* @author 时延军*/public class CommonSplitter {private int starCount;private boolean duplicate;private Collection filteredContainer;public Collection getFilteredContainer() {return filteredContainer;}/*** 构造一个Spilitter实例* @param container 输入的待处理字符串集合* @param starCount 如果对于长度为N的数字字符串 进行M组合(即N取M) 则starCount=N M* @param duplicate 是否去重*/public CommonSplitter(Collection container int starCount boolean duplicate) {this duplicate = duplicate;this starCount = starCount;if(this duplicate) { // 根据指定是否去重的选择 选择创建容器filteredContainer = Collections synchronizedSet(new HashSet());}else {filteredContainer = Collections synchronizedList(new ArrayList());}Iterator it = erator();while(it hasNext()) {new Thread(new SplitterThread(it next() trim())) start();}try {Thread sleep( );} catch (InterruptedException e) {e printStackTrace();}}/*** 对一个指定的N场比赛的长度为N的单式投注字符串进行组合* 输入单式投注注字符串string 例如 组合得到类似****** ***** * 结果的集合** @author 时延军*/class SplitterThread implements Runnable {private char[] charArray;private int len; // 数字字符的个数List occupyIndexList = new ArrayList(); // 统计字符串中没有带*的位置的索引private List container = new ArrayList();private BitSet startBitSet; // 比特集合起始状态private BitSet endBitSet; // 比特集合终止状态 用来控制循环public SplitterThread(String string) {this charArray = string toCharArray();this len = string replace( * ) length();this startBitSet = new BitSet(len);this endBitSet = new BitSet(len);// 初始化startBitSet 左侧占满*符号int count = ; //for (int i= ; iif(charArray[i] != * ) {if(count starCount) {this startBitSet set(i true);count++;}occupyIndexList add(i);}}// 初始化endBit 右侧占满*符号count = ;for (int i = string length() ; i ; i ) {if(charArray[i] != * ) {if(count starCount) {this endBitSet set(i true);count++;}ccupyIndexList add(i);}}// 根据起始startBitSet 构造带*的组合字符串并加入容器char[] charArrayClone = this charArray clone();for (int i= ; iif (this startBitSet get(i)) {charArrayClone[i] = * ;}}ntainer add(new String(charArrayClone));}public void run() {this split();synchronized(filteredContainer) {filteredContainer addAll(ntainer);}}public void split() {while(!this startBitSet equals(this endBitSet)) {int zeroCount = ; // 统计遇到 后 左边 的个数int oneCount = ; // 统计遇到 后 左边 的个数int pos = ; // 记录当前遇到 的索引位置char[] charArrayClone = this charArray clone();// 遍历startBitSet来确定 出现的位置for (int i= ; iif (!this startBitSet get(this occupyIndexList get(i))) {zeroCount++;}if (this startBitSet get(this occupyIndexList get(i)) !this startBitSet get(this occupyIndexList get(i+ ))) {pos = i;oneCount = i zeroCount;// 将 变为 this startBitSet set(this occupyIndexList get(i) false);this startBitSet set(this occupyIndexList get(i+ ) true);break;}}// 将遇到 后 左侧的 全部移动到最左侧int count = Math min(zeroCount oneCount);int startIndex = this occupyIndexList get( );int endIndex = ;if(pos count ) {pos ;endIndex = this occupyIndexList get(pos);for (int i= ; ithis startBitSet set(startIndex true);this startBitSet set(endIndex false);startIndex = this occupyIndexList get(i+ );pos ;if(pos ) {endIndex = this occupyIndexList get(pos);}}}// 将遇到 的位置用*替换for (int i= ; iif (this startBitSet get(this occupyIndexList get(i))) {charArrayClone[this occupyIndexList get(i)] = * ;}}ntainer add(new String(charArrayClone));}}}}

测试用例如下所示

package shirdrn;import java util ArrayList;import java util Collection;import junit framework TestCase;import shirdrn util GoodTools;public class TestCommonSplitter extends TestCase {private CommonSplitter splitter;public void setSplitter(Collection container int starCount boolean duplicate) {this splitter = new CommonSplitter(container starCount duplicate);}public void testSplliter() {Collection container = new ArrayList();container add( * ** );int starCount = ;boolean duplicate = true;this setSplitter(container starCount duplicate);System out println(this splitter getFilteredContainer());}public void testSplliter () {Collection container = new ArrayList();container add( * * * );int starCount = ;boolean duplicate = true;this setSplitter(container starCount duplicate);System out println(this splitter getFilteredContainer());assertEquals( this splitter getFilteredContainer() size());}public void testNoStar() {Collection container = new ArrayList();container add( );int starCount = ;boolean duplicate = true;this setSplitter(container starCount duplicate);System out println(this splitter getFilteredContainer());assertEquals( this splitter getFilteredContainer() size());}public void testSplitter_ _ () {// 场: String multiSeq = ;Collection container = GoodTools getNSingleList(multiSeq);assertEquals( container size());int starCount = ;boolean duplicate = false;this setSplitter(container starCount duplicate);assertEquals( this splitter getFilteredContainer() size());}}上述测试耗时大约 s左右

上述算法实现主要是针对两种条件进行实现的 即

第一个是完全数字字符串 —— 带有*号的组合数字字符串

第二个带有*号的组合数字字符串 —— 在该基础上继续组合得到带有*号的组合数字字符串

lishixinzhi/Article/program/Java/hx/201311/25538

Java算法

int t;//声明变量

t=a;//将a赋值给t

a=b;//将b赋值给a

b=t;//再将t赋值给b

最终结果是将a和b中的值进行了一次交换,t是中间变量,主要作用是辅助交换操作。这个算法在做冒泡排序的时候会经常用到!

JAVA 二分算法只能对数字进行查找吗

2分法查找,前提是要有序,要排序,必然要比较大小,所以只要一个类它实现了Comparable接口的compareTo(T o)方法(Comparable在java.lang包中)或是实现一个比较器对象接口Comparator(Comparator在java.util包),都可以进行比较了。不管是String型,计本数据类型,还是其他什么的,都可以用2分发查找了。给你看看API

java.util.Collections中2分法的API

binarySearch

public static T int binarySearch(List? extends Comparable? super T list,

T key)使用二分搜索法搜索指定列表,以获得指定对象。在进行此调用之前,必须根据列表元素的自然顺序对列表进行升序排序(通过 sort(List) 方法)。如果没有对列表进行排序,则结果是不确定的。如果列表包含多个等于指定对象的元素,则无法保证找到的是哪一个。

此方法对“随机访问”列表运行 log(n) 次(它提供接近固定时间的位置访问)。如果指定列表没有实现 RandomAccess 接口并且是一个大型列表,则此方法将执行基于迭代器的二分搜索,执行 O(n) 次链接遍历和 O(log n) 次元素比较。

参数:

list – 要搜索的列表。

key – 要搜索的键。

返回:

如果搜索键包含在列表中,则返回搜索键的索引;否则返回 (-(插入点) – 1)。插入点 被定义为将键插入列表的那一点:即第一个大于此键的元素索引;如果列表中的所有元素都小于指定的键,则为 list.size()。注意,这保证了当且仅当此键被找到时,返回的值将 = 0。

抛出:

ClassCastException – 如果列表中包含不可相互比较 的元素(例如,字符串和整数),或者搜索键无法与列表的元素进行相互比较。

——————————————————————————–

binarySearch

public static T int binarySearch(List? extends T list,

T key,

Comparator? super T c)使用二分搜索法搜索指定列表,以获得指定对象。在进行此调用之前,必须根据指定的比较器对列表进行升序排序(通过 sort(List, Comparator) 方法)。如果没有对列表进行排序,则结果是不确定的。如果列表包含多个等于指定对象的元素,则无法保证找到的是哪一个。

此方法对“随机访问”的列表运行 log(n) 次(它提供接近固定时间的位置访问)。如果指定列表没有实现 RandomAccess 接口并且是一个大型列表,则此方法将执行基于迭代器的二分搜索,执行 O(n) 次链接遍历和 O(log n) 次元素比较。

参数:

list – 要搜索的列表。

key – 要搜索的键。

c – 排序列表的比较器。null 值指示应该使用元素的自然顺序。

返回:

如果搜索键包含在列表中,则返回搜索键的索引;否则返回 (-(插入点) – 1)。插入点 被定义为将键插入列表的那一点:即第一个大于此键的元素索引;如果列表中的所有元素都小于指定的键,则为 list.size()。注意,这保证了当且仅当此键被找到时,返回的值将 = 0。

抛出:

ClassCastException – 如果列表中包含使用指定的比较器不可相互比较 的元素,或者使用此比较器无法相互比较搜索键与列表元素。

java.util.Comparator接口。

A        int compare(T o1,T o2)比较用来排序的两个参数。根据第一个参数小于、等于或大于第二个参数分别返回负整数、零或正整数。

在前面的描述中,符号 sgn(expression) 表示 signum 数学函数,根据 expression 的值为负数、0 还是正数,该函数分别返回 -1、0 或 1。

实现程序必须确保对于所有的 x 和 y 而言,都存在 sgn(compare(x, y)) == -sgn(compare(y, x))。(这意味着当且仅当 compare(y, x) 抛出异常时 compare(x, y) 才必须抛出异常。)

实现程序还必须确保关系是可传递的:((compare(x, y)0)  (compare(y, z)0)) 意味着 compare(x, z)0。

最后,实现程序必须确保 compare(x, y)==0 意味着对于所有的 z 而言,都存在 sgn(compare(x, z))==sgn(compare(y, z))。

虽然这种情况很普遍,但并不 严格要求 (compare(x, y)==0) == (x.equals(y))。一般说来,任何违背这个条件的 Comparator 都应该清楚地指出这一事实。推荐的语言是“注意:此 Comparator 强行进行与 equals 不一致的排序。”

参数:

o1 – 要比较的第一个对象。

o2 – 要比较的第二个对象。

返回:

根据第一个参数小于、等于或大于第二个参数分别返回负整数、零或正整数。

抛出:

ClassCastException – 如果参数的类型不允许此 Comparator 对它们进行比较。

B                 boolean equals(Object obj)指示某个其他对象是否“等于”此 Comparator。此方法必须遵守 Object.equals(Object) 的常规协定。此外,仅当 指定的对象也是一个 Comparator,并且强行实施与此 Comparator 相同的排序时,此方法才返回 true。因此,comp1.equals(comp2) 意味着对于每个对象引用 o1 和 o2 而言,都存在 sgn(comp1.compare(o1, o2))==sgn(comp2.compare(o1, o2))。

注意,不 重写 Object.equals(Object) 方法总是 安全的。然而,在某些情况下,重写此方法可以允许程序确定两个不同的 Comparator 是否强行实施了相同的排序,从而提高性能。

覆盖:

类 Object 中的 equals

参数:

obj – 要进行比较的引用对象。

返回:

仅当指定的对象也是一个 Comparator,并且强行实施与此 Comparator 相同的排序时才返回 true。

以及java.lang.Comparable

public interface ComparableT此接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的 compareTo 方法被称为它的自然比较方法。

实现此接口的对象列表(和数组)可以通过 Collections.sort(和 Arrays.sort)进行自动排序。实现此接口的对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器。

对于类 C 的每一个 e1 和 e2 来说,当且仅当 e1.compareTo(e2) == 0 与 e1.equals(e2) 具有相同的 boolean 值时,类 C 的自然排序才叫做与 equals 一致。注意,null 不是任何类的实例,即使 e.equals(null) 返回 false,e.compareTo(null) 也将抛出 NullPointerException。

建议(虽然不是必需的)最好使自然排序与 equals 一致。这是因为在使用自然排序与 equals 不一致的元素(或键)时,没有显式比较器的有序集合(和有序映射表)行为表现“怪异”。尤其是,这样的有序集合(或有序映射表)违背了根据 equals 方法定义的集合(或映射表)的常规协定。

例如,如果将两个键 a 和 b 添加到没有使用显式比较器的有序集合中,使 (!a.equals(b)  a.compareTo(b) == 0),那么第二个 add 操作将返回 false(有序集合的大小没有增加),因为从有序集合的角度来看,a 和 b 是相等的。

实际上,所有实现 Comparable 的 Java 核心类都具有与 equals 一致的自然排序。java.math.BigDecimal 是个例外,它的自然排序将值相等但精确度不同的 BigDecimal 对象(比如 4.0 和 4.00)视为相等。

从数学上讲,定义给定类 C 上自然排序的关系式 如下:

{(x, y)|x.compareTo(y) = 0}。

整体排序的商 是:

{(x, y)|x.compareTo(y) == 0}。

它直接遵循 compareTo 的协定,商是 C 的等价关系,自然排序是 C 的整体排序。当说到类的自然排序与 equals 一致 时,是指自然排序的商是由类的 equals(Object) 方法定义的等价关系。

{(x, y)|x.equals(y)}。

compareTo

int compareTo(T o)比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。

实现类必须确保对于所有的 x 和 y 都存在 sgn(x.compareTo(y)) == -sgn(y.compareTo(x)) 的关系。(这意味着如果 y.compareTo(x) 抛出一个异常,则 x.compareTo(y) 也要抛出一个异常。)

实现类还必须确保关系是可传递的:(x.compareTo(y)0  y.compareTo(z)0) 意味着 x.compareTo(z)0。

最后,实现者必须确保 x.compareTo(y)==0 意味着对于所有的 z,都存在 sgn(x.compareTo(z)) == sgn(y.compareTo(z))。 强烈推荐 (x.compareTo(y)==0) == (x.equals(y)) 这种做法,但并不是 严格要求这样做。一般来说,任何实现 Comparable 接口和违背此条件的类都应该清楚地指出这一事实。推荐如此阐述:“注意:此类具有与 equals 不一致的自然排序。”

在前面的描述中,符号 sgn(expression) 指定 signum 数学函数,该函数根据 expression 的值是负数、零还是正数,分别返回 -1、0 或 1 中的一个值。

参数:

o – 要比较的对象。

返回:

负整数、零或正整数,根据此对象是小于、等于还是大于指定对象。

抛出:

ClassCastException – 如果指定对象的类型不允许它与此对象进行比较。

java二分搜索算法怎样实现?

应该要用递归方法吧? binarySearch()方法应该要带四个参数(数组,要查找的数值,查找范围的最左边下标,查找范围的最右边下标)。然后就利用递归方法在 if (x a[middle]) 和 else 后面通过修改查找范围自调用binarySearch()方法;

java中哪些可以涉及算法

个人理解算法就是计算的方法,从1+1到矩阵啥的都算吧,java中冒泡排序就是一类算法,有多种算法可以达到冒泡的目的,高大上的有各种加密算法,其实算法感觉挺多的,其实你对电脑进行的操作在内存中就进行了很多的逻辑运算

java分类算法的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于最简单的分类算法、java分类算法的信息别忘了在本站进行查找喔。

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年4月2日 18:02:40
下一篇 2024年4月2日 18:08:47

相关推荐

  • java解压核心失败,java解压war

    javazip压缩包过大解压失败 javazip解压过大失败究其原因是因为文件名中文所致,而ZIPFile默认使用UTF-8,在遇到解压非UTF-8的时候就会报错。 重新下载文件:如果您下载的文件损坏,尝试重新下载文件并解压缩。 使用其他解压缩程序:尝试使用其他解压缩程序解压缩文件。有时候不同的解压缩程序对于不同的文件有不同的处理方式。 由于解压缩软件版本不…

    2024年5月21日
    4100
  • java中怎样产生随机数,java中如何产生随机数

    java中随机数怎么生成 1、Math类的random()方法可以生成[0,1)之间的随机浮点数。double类型数据强制转换成int类型,整数部分赋值给int类型变量,小数点之后的小数部分将会丢失。int b=(int)(Math.random()*10);//生成[0,9]之间的随机整数。 2、可以先通过random方法生成一个随机数,然后将结果乘以10…

    2024年5月21日
    3500
  • java编写xmldtd规范的简单介绍

    如何用一个java程序来判断一个xml文件是否符合一个DTD的要求 还大量使用了 TrAX 的 javax.xml.transform.Source 接口来表示 XML 文档。简言之,SchemaFactory 读取模式文档(通常是 XML 文件)并创建 Schema 对象。Schema 创建一个 Validator 对象。 XML的校验是通过XML Sch…

    2024年5月21日
    3800
  • java所有session,Java所有类都直接或间接继承

    Java里设置session的几种方式 ,引入包servlet-api.jar 。 具体设置很简单,方法有三种:(1)在主页面或者公共页面中加入:session.setMaxInactiveInterval(600);参数600单位是秒,即在没有10分钟活动后,session将失效。 session = request.getsession();sessio…

    2024年5月21日
    4200
  • 张龙java培训视频,张龙 java

    我想更好的了解Java语言 1、找Java教程进行学习 首先可以去找一个Java的课程进行学习,能够找到相应的视频学习是非常有用的。在学习基础的时候,从Java的基础开始,如果没有扎实的基础,后续的学习会变得更加困难。 2、简单性 Java看起来设计得很像C++,但是为了使语言小和容易熟悉,设计者们把C++语言中许多可用的特征去掉了,这些特征是一般程序员很少…

    2024年5月21日
    4100
  • java读写xml配置文件,java 读写xml

    JAVA读取XML文件 1、只要更改XML配置文件,就可以正常运行。localhostsqlnameusernamepassword上面这个myenv.xml配置文件一般是放在tomcat的WEB-INF/classes目录下。 2、我们要在应用程序中打开数据库,就必须完成对该文件中drivername、sConnStr、username、password的…

    2024年5月21日
    4000
  • java网站application,java 网站

    Java中Applet与Application有什么不同? 【答案】: 联系:Applet和Application都是Java程序。区别:(1)Applet只运行于HTML主页中,此种能力使主页设计者在设计时有更大的灵活性,Applet可以运行在任何机器上。 Application,即”Java应用程序“,是可以独立运行的Java程序,由Java解释器控制执…

    2024年5月21日
    3100
  • java里怎么画柱状图,java如何绘制图形

    在jsp页面中如何做柱状,饼状,曲线图 1、JFreeChart 可以绘制饼状图,折线图,柱状图等. awt/swing里可以使用,JSP里也可以使用 JFreeChart是 Java平台下开源的图表类库,是一个完全基于Java的图表开发技术。 2、用JFreeChart,可到网上下载JFreeChart包,然后把它添加到java库。如果是用JSP生成的话,…

    2024年5月21日
    4000
  • java中国象棋ppt,java中国象棋用了什么算法

    中国象棋走法规则用Java怎么编程 1、各子类的走棋移动规则不同,各自重写父类的判断是否能走到的方法。 2、车的规则就是 目标点 不能超过前面的第一个人。炮的规则就是 目标点 必须超过前面的第一个 不超过前面的第二个人。 3、这个属于java.swing里面的知识,只要学了,在加一点点算法就可以弄出来。 求中国象棋棋子和棋盘素材棋子:中国象棋的棋子包括将、士…

    2024年5月21日
    3900
  • 构建最大堆java,jvm中最大堆大小有没有限制

    java性能优化,程序员的必修课! 同时可以避免一些因为性能优化导致的程序问题,比如你想针对数据库做缓存,那么这点就显得尤为重要了。 先不要急着优化 在必要之前,一定不要急着进行优化,这是一种非常重要的性能调优方法。在进行调优过程中,我们应该遵守最佳的实践方法,这样才能得到有效的实现。 尽量重用目标 特别是,使用代表字符串收敛的String目标应该使用Str…

    2024年5月21日
    4300

发表回复

登录后才能评论



关注微信