用vc线程模拟实现并行算法

原创 2003年04月20日 15:17:00

题目如下:令n2m次方,A是一个2n维的数组,待求最大值的数存放在A(n),A(n1),……A(2n-1)中,所求得的最大值置于A(1),于是算法描述如下:

  输入:n2m次方个数存在数组A(n2n1)中;

  输出:最大数置于A(1)中。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

Begin
For k=m-1 to 0 do
   For j=2k+1-1 to 2k par do
       A(j)=max(A(2j)
A(2j+1))
   End For
End For
End

具体实现:

  定义全局变量如下,array用于存放产生的随机数。

int g_nCount=0,j=0;
int *array;

  随机产生n个数并存于数组array中,程序代码如下:

void CDemoDlg::OnBtnInitial()
{
 // 初始化数组

 srand((unsigned)time(NULL));
 int i,temp;
 CString str;
 UpdateData(true);
 g_nCount=pow(2,m_intCount);
 array=new int[2*g_nCount];
 //根据用户的输入,产生2m次方的随机数并存于array[n]a[2n-1]
 for(i=g_nCount;i<2*g_nCount;i++)
 {

  temp=rand()/100;
  array[i]=temp;
 }
 //显示产生的n个随机数
 for(i=g_nCount;i<2*g_nCount;i++)
 {
  str.Format("Array[%d]= %d",i,array[i]);
  m_strArray+="/r/n";
  m_strArray+= str;
  m_strArray+="/r/n";
 }
 m_strArray+="/r/n";
 UpdateData(false);

}

void CDemoDlg::OnBtnCompute()
{
 // 启动线程进行计算
 int k;
 for(k=m_intCount-1;k>=0;k--)
 {
  for(j=pow(2,k);j<POW(2,K+1);J++)
  {
   AfxBeginThread(ComputeThread,GetSafeHwnd(),
   THREAD_PRIORITY_NORMAL);
  }

 }
 //线程体:较array[2j]array[2j+1]的大小,将大值置于array[j]
 UINT ComputeThread(LPVOID pParam)
 {
  if(array[2*j]>=array[2*j+1])
  {
   array[j]=array[2*j];
  }
  else
  {
   array[j]=array[2*j+1];
  }
  return 0;

 }
}
//
显示计算结果
void CDemoDlg::OnBtnShow()
{
 // TODO: Add your control notification handler code here
 int k;
 CString str;
 for(k=1;k<2*g_nCount;k++)
 {
  str.Format("Array[%d] %d",k,array[k]);
  m_strArray+="/r/n";
  m_strArray+= str;
  m_strArray+="/r/n";
 }

 UpdateData(false);
}
重置功能的实现代码,主要是将数组清空:
void CDemoDlg::OnBtnClear()
{
 // TODO: Add your control notification handler code here
 m_strArray.Empty ();
 m_ctrlCount.SetFocus();
 m_ctrlCount.Clear();
 m_ctrlCount.SetSel(1);

 UpdateData(false);

 g_nCount=0;
 j=0;

}

  

多线程模拟银行家算法

#include #include #include #include #define NUMBER_OF_CUSTOMERS 5 #define NUMBER_OF_RESOURCES 3 ...
  • u012427462
  • u012427462
  • 2015年10月22日 13:00
  • 1092

App11_08_用两个线程模拟存票、售票过程

//用两个线程模拟存票、售票过程,直到售完为止 存票->售票->存票->售票->存票... //wait() vs sleep():wait放弃CPU资源同时让出控制权(释放已有对象的互斥锁),sl...
  • tcherry
  • tcherry
  • 2015年07月24日 19:52
  • 599

vc+如何实现模拟键盘输入,自动输入文字(创世纪篇)

点击打开原文链接  键盘对于每个操作电脑的人员来说是最熟悉不过的了。键盘上的按键可分为两类: 按下后会在电脑的输入窗口上出现对应字符的按键,如字母键和数字键等,我们称之为字符键;按下后虽然看不到...
  • cswhit
  • cswhit
  • 2016年08月09日 11:13
  • 3602

云计算期末报告无图 kmeans和最短路径算法hadoop实现详解

《云计算应用开发实验》ubuntu 16.04真机 + hadoop2.6 + 本地伪分布  Hadoop kmeans和最短路径算法...
  • cai13160674275
  • cai13160674275
  • 2017年01月14日 15:49
  • 798

java 使用线程模拟 队列实现

package com.bjsxt.base.conn009; import java.util.LinkedList; import java.util.concurrent.TimeUnit; ...
  • u014535678
  • u014535678
  • 2017年03月06日 17:13
  • 358

VC++ 模拟按键

VC++ 模拟按键flyfish CWnd *p= FindWindow(NULL, _T("新建文本文档.txt - 记事本")); HWND h = p->GetSafeHwnd()...
  • flyfish1986
  • flyfish1986
  • 2016年10月17日 22:05
  • 1203

VC封装Ping命令的实现

本文给出了网络编程中封装ping命令的一种实现方式,能够在程序启动后一直ping目标网络。...
  • shufac
  • shufac
  • 2016年07月22日 23:31
  • 1574

算法---->并行算法

并行算法 一、并行算法 什么是并行算法? 它可理解为: 适合于在某类并行计算机上求解问题和处理数据的算法, 是一些可同时执行的诸进程的集合, 这些进程相互作用和协调作用, 从而达到对给定问题的求解。 ...
  • ncepustrong
  • ncepustrong
  • 2013年05月20日 16:32
  • 4562

实现线程的两种方法

在系统的开发中遇到多线程的情况的时候,以实现Runnable接口的方式为主要方式。这是因为实现接口的方式有很多的优点: 1、就是通过继承Thread类的方式时,线程类就无法继承其他的类来实现其...
  • u014746965
  • u014746965
  • 2014年12月31日 16:26
  • 545

VC启动一个新线程的三种方法

主要用AfxBeginThread()函数来 UINT  myproc(LPVOID  lParam) { CITTDlg *pWnd = (CITTDlg *)lParam; pWnd->KMe...
  • u014568921
  • u014568921
  • 2015年03月14日 19:53
  • 8614
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用vc线程模拟实现并行算法
举报原因:
原因补充:

(最多只允许输入30个字)