- 浏览: 149892 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
hardPass:
貌似二分法,没有一个合并的过程
简单_分治算法 -
zhufeng1981:
讲解的不错,支持一下。
简单_分治算法 -
a346063587:
嗯。。的确,基础很重要!
关于递归和尾递归的原理 -
zhufeng1981:
huoyj 写道基础很重要,这是永远不变的真理。 很赞同这句话 ...
关于递归和尾递归的原理 -
huoyj:
基础很重要,这是永远不变的真理。 很赞同这句话
关于递归和尾递归的原理
原帖地址:
http://www.iteye.com/topic/711162
http://www.iteye.com/topic/711162
package thread; import java.util.Iterator; import java.util.Random; import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.CyclicBarrier; public class SegmentCount { public static void main(String[] args) { int[] arr = new int[10123]; Random ran = new Random(); int sum = 0; for (int i = 0; i < arr.length; i++) { arr[i] = ran.nextInt(10000); sum += arr[i]; } System.out.println("结果应该为:" + sum); // 多线程进行数组拆分计算 int threadSize = 10; int avg = arr.length / threadSize;// 平均任务数 int surplus = arr.length % threadSize;// 剩余任务数 threadSize = surplus > 0 ? (++threadSize) : threadSize; final ConcurrentLinkedQueue<Integer> queue = new ConcurrentLinkedQueue<Integer>();// 结果队列 CyclicBarrier barrier = new CyclicBarrier(threadSize, new Runnable() { public void run() { System.out.println("统计:"); System.out.println(queue); int sum = 0; Iterator<Integer> it = queue.iterator(); while (it.hasNext()) { sum += Integer.valueOf(it.next().toString()); } System.out.println("sum:" + sum); } }); for (int i = 1; i <= threadSize; i++) { int end = i * avg; end = (end > arr.length) ? arr.length : end; new Thread(new Segment(barrier, arr, (i - 1) * avg, end, queue)) .start(); } } } class Segment implements Runnable { CyclicBarrier barrier; int[] arr; int start; int end; ConcurrentLinkedQueue<Integer> queue; public Segment(CyclicBarrier barrier, int[] arr, int start, int end, ConcurrentLinkedQueue<Integer> queue) { super(); this.barrier = barrier; this.arr = arr; this.start = start; this.end = end; this.queue = queue; } int sum = 0; public void run() { System.out.println(Thread.currentThread().getName() + ",start:" + start + ",end:" + end); for (int i = start; i < end; i++) { sum += arr[i]; } queue.offer(sum); try { barrier.await(); } catch (InterruptedException e) { e.printStackTrace(); } catch (BrokenBarrierException e) { e.printStackTrace(); } } }
package thread; import java.util.ArrayList; import java.util.List; import java.util.Random; import java.util.concurrent.Callable; import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.FutureTask; public class SegmentCount2 { public static void main(String[] args) throws InterruptedException, ExecutionException { int[] arr = new int[10123]; Random ran = new Random(); int sum = 0; for (int i = 0; i < arr.length; i++) { arr[i] = ran.nextInt(10000); sum += arr[i]; } System.out.println("结果应该为:" + sum); // 多线程进行数组拆分计算 int threadSize = 10; int avg = arr.length / threadSize;// 平均任务数 int surplus = arr.length % threadSize;// 剩余任务数 threadSize = surplus > 0 ? (++threadSize) : threadSize; ExecutorService pool = Executors.newCachedThreadPool(); List<Segment2> tasks = new ArrayList<Segment2>(); for (int i = 1; i <= threadSize; i++) { int end = i * avg; end = (end > arr.length) ? arr.length : end; tasks.add(new Segment2(arr, (i - 1) * avg, end)); } // 执行给定的任务,当所有任务完成时,返回保持任务状态和结果的 Future 列表。 List<Future<Integer>> result = pool.invokeAll(tasks); int summ = 0; for (int i = 0; i < result.size(); i++) { FutureTask<Integer> task = (FutureTask<Integer>) result.get(i); summ += Integer.valueOf(task.get().toString()); } System.out.println("总共:" + summ); pool.shutdown(); } } class Segment2 implements Callable<Integer> { int[] arr; int start; int end; public Segment2(int[] arr, int start, int end) { super(); this.arr = arr; this.start = start; this.end = end; } int sum = 0; public Integer call() throws Exception { System.out.println(Thread.currentThread().getName() + ",start:" + start + ",end:" + end); for (int i = start; i < end; i++) { sum += arr[i]; } return sum; } }
package thread; import java.util.Iterator; import java.util.Random; import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutionException; public class SegmentCount3 { public static void main(String[] args) throws InterruptedException, ExecutionException { int[] arr = new int[10123]; Random ran = new Random(); int sum = 0; for (int i = 0; i < arr.length; i++) { arr[i] = ran.nextInt(10000); sum += arr[i]; } System.out.println("结果应该为:" + sum); // 多线程进行数组拆分计算 int threadSize = 10; int avg = arr.length / threadSize;// 平均任务数 int surplus = arr.length % threadSize;// 剩余任务数 threadSize = surplus > 0 ? (++threadSize) : threadSize; final ConcurrentLinkedQueue<Integer> queue = new ConcurrentLinkedQueue<Integer>();// 结果队列 CountDownLatch beginSignal = new CountDownLatch(1); CountDownLatch endSignal = new CountDownLatch(threadSize); for (int i = 1; i <= threadSize; i++) { int end = i * avg; end = (end > arr.length) ? arr.length : end; new Thread(new Segment3(beginSignal, endSignal, arr, (i - 1) * avg, end, queue)).start(); } System.out.println("开闸"); beginSignal.countDown(); endSignal.await(); System.out.println("统计:" + queue); Iterator<Integer> it = queue.iterator(); int summ = 0; while (it.hasNext()) { summ += it.next(); } System.out.println(summ); } } class Segment3 implements Runnable { CountDownLatch beginSignal; CountDownLatch endSignal; int[] arr; int start; int end; ConcurrentLinkedQueue<Integer> queue; public Segment3(CountDownLatch beginSignal, CountDownLatch endSignal, int[] arr, int start, int end, ConcurrentLinkedQueue<Integer> queue) { super(); this.beginSignal = beginSignal; this.endSignal = endSignal; this.arr = arr; this.start = start; this.end = end; this.queue = queue; } int sum = 0; public void run() { try { beginSignal.await(); System.out.println(Thread.currentThread().getName() + ",start:" + start + ",end:" + end); for (int i = start; i < end; i++) { sum += arr[i]; } queue.offer(sum); endSignal.countDown(); } catch (InterruptedException e) { e.printStackTrace(); } } }
发表评论
-
高效编写JAVA代码的几条建议(转)
2011-11-23 20:34 1321(1) 类名首字母应该大写 ... -
java正则表达式及java.util.regex包的学习
2011-11-16 22:34 24727没有事做,就会堕落。。 这个世界有太多的浮躁,要耐得住诱惑; ... -
quartz的配置(转自网络)
2011-11-16 20:18 1169周允许的是1-7 其中1 ... -
[转自网络]freeMarker的常用语法(以后可能会用到)
2011-11-16 09:48 1167常用语法 EG.一个对象BOOK 1.输出 $…{book ... -
开源定时器quartz入门
2011-11-15 20:03 4811闲来无事学习了下quartz框架,其实JAVA下的定时器框架还 ... -
freeMarker入门
2011-11-14 22:26 1492freeMarker是一个 JAVA开源模版引擎 下面以创建 ... -
java.util.logging包的学习
2011-11-11 22:07 1281package sunfa.lx; import jav ... -
mybatis中的一个OOXX
2011-11-08 15:11 1200mybatis : mybatis XML中执行多条语句: ... -
Timer和ScheduledExecutorService区别
2011-10-09 23:59 3168Timer里面的任务如果执行时间太长,会独占Timer对象,使 ... -
java io流之 装饰模式
2011-10-05 21:41 1119初学java.io的时候容易被众多的IO类搞晕头,其实java ... -
java nio学习笔记<一>
2011-10-05 21:04 1058package nio; import java.i ... -
java.util.concurrent.atomic.*包的体会
2011-10-01 18:10 1431java.util.concurrent.atomic.*包的 ... -
CountDownLatch、CyclicBarrier让多线程变得更简单
2011-09-29 16:54 1071CountDownLatch 一个同步辅助类,在完成一组正在其 ... -
山寨同步队列 VS 官方BT的ArrayBlockingQueue ,结果官方落马!!!
2011-09-29 15:30 988官方的java.util.concurrent.ArrayBl ... -
突然发现自己的JAVA基础很差
2011-09-25 11:50 1132今天因为一个问题上网搜索却牵扯出了另一个问题。。。纠结。、、还 ... -
java_Comparable & Comparator
2011-09-21 23:21 1375java有2个非常重要的排序接口:java.lang.Comp ... -
tomcat,jboss部署方式(热部署)
2011-06-26 16:08 2804tomcat: 1、直接把项目web文件夹放在webapps里 ... -
JAVA书籍(IO多线程等)
2011-05-29 15:47 970留下这些书,纪念我曾经走过的路。 -
java IO的学习总结
2011-05-29 15:31 10131、JAVA中的IO流分字节流和字符流 2、InputStre ... -
关于JAVA3D游戏(摘自网络)
2011-01-02 16:56 23352006年8月,我们终于决定用计算机三维视觉游戏机制制作自己的 ...
相关推荐
更多信息使用说明List类的操作与C ++中的Vector类相似,但是其实现方式很简单,可以在像Arduino这样的处理器中使用。 但是,方法和变量的名称类似于C#中可用的通用List类,它更为现代和最新。 List类被初始化为...
内部设计了一个Unlimit无限宽的整数,用多个uint拼接起来,直接采用二进制做乘法和加法运算,因此速度最快...只需要0.5秒即可)(窗口版)"不同之处在于改List类型为Array类型,这样做使数组下标计算的速度极大地提高了。
在本博客中,我们将学习探讨Python的各种“序列”类,内置的三大常用数据结构——列表类(list)、元组类(tuple)和字符串类(str)。 不知道你发现没有,这些类都有一个很明显的共性,都可以用来保存多个数据元素...
因为数组中各元素的类型和长度都必须一致,以便于编译系统处理。为了解决这个问题,C语言中给出了另一种构造数据类型——“结构”。 它相当于其它高级语言中的记录。 “结构”是一种构造类型,它是由若干“成员...
在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...
写在前面: ...在之前的基础上根据意见加入了文件读取的功能,用户可以直接在指定文件夹下新建一个data.txt来进行计算,这个在数据量大的情况下免去了一个个手动输入的麻烦,功能是一样的 from functools i
Numpy专门针对ndarray的操作和运算进行了设计,所以数组的存储效率和输入输出性能远优于Python中的嵌套列表,数组越大,Numpy的优势就越明显。 从图中我们可以看出ndarray在存储数据的时候,数据与数据的地址都是...
(10)编写一个程序实现如下功能:调用名为tj的函数,求一个二维数组中正数、负数的代数和,以及零的个数。 (11)编写一个程序实现如下功能:调用一个名为gm的函数,该函数实现简单的加密。加密方法如下:先定义...
这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix)),支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数...
该类的大部分构造器和方法都已经过时,但是该类使用非常方便,因此目前使用还很普遍,该类的另一个主要功能是,在数据库操作中,它允许将毫秒值表示为SQL DATE值,是数据库操作中java.sql.Date的父类。关于数据库...
无论您是计划聚会,创建客人名单,去杂货店购物和创建杂货店列表,还是与朋友就有史以来的前十部电影进行辩论,您都可能已经在数组形式中进行了很多思考。 作为程序员,数组成为强大的工具。 例如,如果您在纸上列...
书中列出了C用户经常问的400多个经典问题,涵盖了初始化、数组、指针、字符串、内存分配、库函数、C预处理器等各个方面的主题,并分别给出了解答,而且结合代码示例阐明要点。 《你必须知道的495个C语言问题》结构...
第3版 机械工业出版社 教学内容和要求 知识点 重要程度 使用频度 难度 Java 入门 高 中 易 变量和运算符 高 高 中 控制结构 高 高 易 数组 高 高 中 方法 很高 高 中 封装 很高 很高 难...
本书是第II卷,以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用Java进行桌面程序开发各个方面的知识和技巧,主要包括Java语法与面向对象技术、Java高级应用、窗体与控件应用、文件操作...
02_模板数组类_作业讲解和思想强化(数据类型和算法的分离)_传智扫地僧 03_类型转换_static_cast和reinterpret_cast 04_类型转换_dynamic_cast和reinterpret_cast_传智扫地僧 05_类型转换_const_cast 06_异常的基本...
6.数据结构中评价算法的两个重要指标是(时间复杂度和空间复杂度) 【北京理工大学 2001 七、1(2分)】 7. 数据结构是研讨数据的_(1)物理结构_和_(2)逻辑结构 _,以及它们之间的相互关系,并对与这种结构定义...