- 浏览: 153179 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
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 1369(1) 类名首字母应该大写 ... -
java正则表达式及java.util.regex包的学习
2011-11-16 22:34 24777没有事做,就会堕落。。 这个世界有太多的浮躁,要耐得住诱惑; ... -
quartz的配置(转自网络)
2011-11-16 20:18 1207周允许的是1-7 其中1 ... -
[转自网络]freeMarker的常用语法(以后可能会用到)
2011-11-16 09:48 1215常用语法 EG.一个对象BOOK 1.输出 $…{book ... -
开源定时器quartz入门
2011-11-15 20:03 4879闲来无事学习了下quartz框架,其实JAVA下的定时器框架还 ... -
freeMarker入门
2011-11-14 22:26 1548freeMarker是一个 JAVA开源模版引擎 下面以创建 ... -
java.util.logging包的学习
2011-11-11 22:07 1346package sunfa.lx; import jav ... -
mybatis中的一个OOXX
2011-11-08 15:11 1244mybatis : mybatis XML中执行多条语句: ... -
Timer和ScheduledExecutorService区别
2011-10-09 23:59 3220Timer里面的任务如果执行时间太长,会独占Timer对象,使 ... -
java io流之 装饰模式
2011-10-05 21:41 1155初学java.io的时候容易被众多的IO类搞晕头,其实java ... -
java nio学习笔记<一>
2011-10-05 21:04 1094package nio; import java.i ... -
java.util.concurrent.atomic.*包的体会
2011-10-01 18:10 1469java.util.concurrent.atomic.*包的 ... -
CountDownLatch、CyclicBarrier让多线程变得更简单
2011-09-29 16:54 1107CountDownLatch 一个同步辅助类,在完成一组正在其 ... -
山寨同步队列 VS 官方BT的ArrayBlockingQueue ,结果官方落马!!!
2011-09-29 15:30 1034官方的java.util.concurrent.ArrayBl ... -
突然发现自己的JAVA基础很差
2011-09-25 11:50 1167今天因为一个问题上网搜索却牵扯出了另一个问题。。。纠结。、、还 ... -
java_Comparable & Comparator
2011-09-21 23:21 1442java有2个非常重要的排序接口:java.lang.Comp ... -
tomcat,jboss部署方式(热部署)
2011-06-26 16:08 2839tomcat: 1、直接把项目web文件夹放在webapps里 ... -
JAVA书籍(IO多线程等)
2011-05-29 15:47 1015留下这些书,纪念我曾经走过的路。 -
java IO的学习总结
2011-05-29 15:31 10521、JAVA中的IO流分字节流和字符流 2、InputStre ... -
关于JAVA3D游戏(摘自网络)
2011-01-02 16:56 23932006年8月,我们终于决定用计算机三维视觉游戏机制制作自己的 ...
相关推荐
Python 中数组和列表都是数据结构,但它们之间存在着很大的区别。本文将对 Python 中数组和列表进行深入分析,比较它们之间的区别。 Python 列表 Python 列表是一种内置数据结构,是包含在方括号 `[]` 的元素集合...
在VB中,可以创建零长度的数组,这在某些情况下可能很有用,例如等待用户输入数组大小后再进行初始化: ```vb Dim emptyArray() As String ``` 稍后,可以通过`ReDim`语句增加数组大小并赋值: ```vb ReDim empty...
更多信息使用说明List类的操作与C ++中的Vector类相似,但是其实现方式很简单,可以在像Arduino这样的处理器中使用。 但是,方法和变量的名称类似于C#中可用的通用List类,它更为现代和最新。 List类被初始化为...
这篇博客“用数组实现线性表各种操作(C语言)完结”很可能是详细介绍了如何使用C语言中的数组来构建并操作线性表。 线性表的操作主要包括: 1. 初始化:创建一个空的线性表,通常是在数组中分配空间,并将其长度设...
7. "09 向量点积计算.py":向量的点积运算在数学和物理学中很常见,这可能是将数学概念转化为编程问题。 8. "02 陶陶摘苹果.py":可能是一个模拟问题,比如陶陶每次可以摘到一定高度的苹果,数组记录苹果的高度,...
数组是一种基本的数据结构,在Python中可以通过列表(List)来实现数组的功能。数组是具有相同数据类型的元素序列,这些元素按照一定的顺序排列,并且可以通过索引来访问每一个元素。 - **定义**: - 数组通常用于...
Java中的数组和链表是两种常见的线性数据结构,各有优缺点,适用于不同的场景。下面我们将详细探讨这两种数据结构的区别。 **数组(Array)** 数组是一种在内存中连续存储相同类型元素的数据结构。它的主要特点...
在计算机科学中,数组和广义表是两种重要的数据结构,它们在编程和算法设计中起着基础性的作用。下面将详细阐述这两种数据结构的概念、特点以及相关知识点。 数组是一种线性数据结构,由相同类型的数据元素组成。...
后缀数组是字符串处理中的一个重要数据结构,尤其在算法竞赛(如OI)和文本处理领域广泛应用。罗穗骞,可能是某位知名的OI教练或专家,提供了关于后缀数组的源码和相关题目,帮助学习者深入理解这一概念。 后缀数组...
这些操作在日常编程中极为常见,理解并熟练掌握它们对提高代码效率有很大帮助。 5. **列表方法(List Methods)**: Python列表提供了丰富的内置方法,如`append()`、`extend()`、`insert()`、`remove()`、`pop()`、...
数据结构中的数组和广义表是两种重要的数据组织方式,它们在编程和计算机科学中扮演着基础的角色。 数组,作为一种基本的数据结构,是程序设计语言中的固有类型。它由一组具有相同数据类型的元素组成,这些元素通过...
由于每次查找都将搜索范围减半,二分查找的时间复杂度为O(log n),其中n是数组中元素的数量,这使得它在大数据集上具有很高的效率。 在二分查找的实现过程中,通常使用两个指针left和right来表示当前的搜索范围。这...
4. **插入与删除**:在某些语言中,插入和删除操作可能涉及移动元素,比如在动态数组(如Python的list)中。 5. **排序**:使用内置函数或自定义算法对数组进行升序或降序排列。 6. **搜索**:查找数组中的特定元素...
在这个"数组进阶示例.rar"中,我们可以看到一个名为"Test.java"的文件,这很可能是用Java语言编写的,用于演示数组的高级用法和技巧。Java是一种广泛应用的面向对象的编程语言,它对数组的支持非常全面。 1. **数组...
这种顺序存储方法使得数组的访问效率很高,因为可以通过下标直接计算出元素在内存中的位置。 矩阵的压缩存储主要针对特殊的矩阵,如特殊矩阵(对角矩阵、单位矩阵等)和稀疏矩阵(大部分元素为0的矩阵)。对于特殊...
// 处理逻辑,如计算数组总和 } ``` 客户端发送一个JSON数组,如`[1, 2, 3]`,Spring Boot会将其转换为`int[]`数组。 总结来说,Spring Boot提供了一套强大的工具来处理各种复杂的HTTP请求。通过`@RequestBody`和...
6. 遍历:按照顺序访问线性表中的所有元素,这在打印、计算或处理整个表时很有用。 7. 计算长度:返回线性表中元素的数量。 在C语言中,这些操作可以通过定义一个结构体来实现,结构体包含数组和表示当前元素数量...
此外,如果数组很大,返回整个数组可能影响性能。因此,有时会返回数组的引用或指针,但这需要谨慎处理,避免内存泄漏。 7. **语言特性的差异**:不同的编程语言处理子程序返回数组的方式有所不同。例如,静态类型...
内部设计了一个Unlimit无限宽的整数,用多个uint拼接起来,直接采用二进制做乘法和加法运算,因此速度最快...只需要0.5秒即可)(窗口版)"不同之处在于改List类型为Array类型,这样做使数组下标计算的速度极大地提高了。
在本博客中,我们将学习探讨Python的各种“序列”类,内置的三大常用数据结构——列表类(list)、元组类(tuple)和字符串类(str)。 不知道你发现没有,这些类都有一个很明显的共性,都可以用来保存多个数据元素...