随笔分类 - Java.Algorithm
摘要:* 用于产生排列结果的工具类
* 从n个元素中取出m个元素,按照一定的顺序排成一列。得到所有排列的方案
阅读全文
摘要:* 输出立方体的八个顶点坐标
* 边长为a的立方体一角在(0,0,0),其对角在(a,a,a),求所有顶点的坐标
* 这是一个可重排列问题,在2阶集合{"0","a"}中进行3次选取。
* 使用三重循环即可解决此问题。
阅读全文
摘要:八卦是三字符可重复排列的一种简单应用
如果在同一个n阶集合中依次进行k次选取,并且选过的元素还可以再选,则一共有n的k次方种不同的选取方式。此即可重排列方式。
按上面的定义,八卦即在一个2阶集合中进行3次选取,总计8(2的3次方)种选取方式.
用程序解决可重排列问题,可以用一重循环应对一次选取,k次选取就是k重循环,而n阶集合对应长度为n的一维数组。
阅读全文
摘要:若需要名单,得用一String数组存储名字,一等长int数组存储名字对应的下标,然后或用Arranger类进行全排列(例程),或用Combination类进行N选M的组合(例程),之后再用条件过滤,剩下的就是符合条件的名单; 若不需要名单,只需要数量,使用数量多重循环方式,穷举出符合条件的数量即可(
阅读全文
摘要:从数学和程序两方面入手,解决从1,2,3,......,100这一百个数中,任取两个数,使其能被4整除的取法问题。
阅读全文
摘要:【题干】从1,2,3......20这20个数中任取2数,使其和能被4整除的取法有几种? 【数学解法】 20个数可以分为4类: 4n+1类:1,5,9,13,17 4n+2类:2,6,10,14,18 4n+3类:3,7,11,15,19 4n+4类:4,8,12,16,20 若两数全在4n+4或是
阅读全文
摘要:【题干】 某校开设A类选修课3门,B类选修课4门,某同学从中共选3门。学校要求一类至少选一门,问不同选法有几种。 【数学解法】 只有两种情况:A类选一门B类选两门 和 A类选两门B类选一门 类别一:A类选一门B类选两门,C31*C42;(C31表示3中选1,以下类同) 类别二:A类选两门B类选一门,
阅读全文
摘要:【题干】 某台小型晚会由6个节目组成,演出顺序有如下要求:节目甲必须排在前两位,节目乙不能排在第一位,节目丙必须排在末位。问该台晚会演出顺序的编排方案有几种? 【数学解法】 类别1:甲排首位,丙排末位,其余四个全排列,有A44种; 类别2:甲排次位,丙排末位,首位从丁戊己种选一,中间三个全排列,有C
阅读全文
摘要:【原题干】 某单位安排7名员工在十一期间值班,每人值班一天。若7名员工中的甲乙排在相邻两天,丙不排在10月1日,丁不排在10月7日。问安排方案共有几种?(此题为10年重庆市高考理科第9题) 【数学解法】 首先总的无限制全排列方式有A77=5040种; 甲乙既然相邻便作为一个整体考虑,其内部有甲乙、乙
阅读全文
摘要:【题干】 由1,2,3,4,5,6组成的,没有重复数字,且1,3都不与5相邻的六位偶数的个数是?(此题为10年四川高考理科第10题) 【数学解答】 末位是246选1,其余全排列,总数是C31A55=360种;(C31表示三中选一,A55表示5个全排列) 相邻即捆绑,捆绑比不相邻更容易考虑; 假设末位
阅读全文
摘要:【题干】 用1,2,3,4,5,6组成没有重复数字的六位数,要求任何相邻两个数字的奇偶性不同,且1和2相邻,这样的六位数有几个?(此题为08年浙江高考文科第17题 理科第16题) 【数学解法】 6个连续数位中,12可占用的位置是01,12,23,34,45共5个位置; 12占住后,有12和21两种排
阅读全文
摘要:【代码】 import java.util.ArrayList; import java.util.List; public class Arrange { static List<List<Integer>> res = new ArrayList<>(); public static void
阅读全文
摘要:【代码】 package test230421; import java.util.ArrayList; import java.util.List; public class Arrange { static List<List<Integer>> result = new ArrayList<>
阅读全文
摘要:【代码】 import java.util.ArrayList; import java.util.List; /** * 用于产生数组全排列结果的工具类 * @since 2023/4/21 */ public class Arranger { // 保存在内部的原始元素数组的引用 private
阅读全文
摘要:【代码】 import java.util.ArrayList; import java.util.List; /** * 从数组中选择有限个数的组合器 * 比如从abc中选2个,会产生ab,ac,bc的结果 */ public class Combiner { /** * 选择的结果 */ pri
阅读全文
摘要:下面提供了两份代码,进阶篇的效率几乎比入门篇提高一个数量级。 提高效率的根源在于将b转换为周长C和a的函数,因此用一重循环就解决了问题。 这种通过改变算法提高效率的方式值得推崇。 入门篇: package test221201; import java.util.Set; import java.u
阅读全文
摘要:【代码】 package test230422; import java.util.ArrayList; import java.util.List; /** * 从数组中选择有限个数的组合器,支持泛型 * 比如从abc中选2个,会产生ab,ac,bc的结果 */ public class Comb
阅读全文
摘要:排列组合中的组合器实现,附带4选2,6选3,8选4,10选5的输出效果。
阅读全文
摘要:【需求】 有一个List,要求每次处理100个。 【代码】 int n=1523;// 链表长度 int start=0,end; int STEP=100; for(;;){ end=start+STEP; if(end>n){ end=n; System.out.println("Start="
阅读全文
摘要:LRU缓存机制运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。 获取数据 get(key) - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。写入数据 put(key, va
阅读全文