用vc執行緒模擬實現並行演算法 (轉)
題目如下:令n=2的m次方,A是一個2n維的陣列,待求最大值的數存放在A(n),A(n+1),……A(2n-1)中,所求得的最大值置於A(1),於是演算法描述如下:
輸入:n=2的m次方個數存在陣列A(n;2n-1)中;
輸出:最大數置於A(1)中。:namespace prefix = o ns = "urn:schemas--com::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];
//根據的輸入,產生2的m次方的隨機數並存於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+="rn";
m_strArray+= str;
m_strArray+="rn";
}
m_strArray+="rn";
UpdateData(false);
}
void CDemoDlg::OnBtnCompute()
{
// 啟動執行緒進行計算
int k;
for(k=m_intCount-1;k>=0;k--)
{
for(j=pow(2,k);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+="rn";
m_strArray+= str;
m_strArray+="rn";
}
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;
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-993346/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- VC++ 執行緒同步(轉)C++執行緒
- shell模擬“多執行緒”執行緒
- 模擬主執行緒等待子執行緒的過程執行緒
- VC多執行緒 C++ 多執行緒執行緒C++
- VC++中實現程式互斥執行 (轉)C++
- VC中ftp協議實現多執行緒斷點續傳(轉)FTP協議執行緒斷點
- vc入門寶典六(多執行緒) (轉)執行緒
- Java多執行緒並行處理任務的實現Java執行緒並行
- Thinking in Java---多執行緒模擬:銀行出納員模擬+飯店模擬+汽車裝配工廠模擬ThinkingJava執行緒
- 實現FTP多執行緒下載 (轉)FTP執行緒
- 在Vb下實現多執行緒 (轉)執行緒
- 聊聊執行緒技術與執行緒實現模型執行緒模型
- 玩轉java多執行緒 之多執行緒基礎 執行緒狀態 及執行緒停止實戰Java執行緒
- 用多執行緒,實現併發,TCP執行緒TCP
- 9.2 運用API實現執行緒同步API執行緒
- 用Pthread實現多執行緒操作thread執行緒
- 26、多執行緒與並行執行緒並行
- c#實現用SQL池(多執行緒),定時批量執行SQL語句 (轉)C#SQL執行緒
- [轉]Java 執行緒池的原理與實現Java執行緒
- java執行緒實現方式Java執行緒
- 如何實現多執行緒執行緒
- 多執行緒原理實現執行緒
- 執行緒池的實現執行緒
- 執行緒 (轉)執行緒
- 一個用於實現並行執行的 Java actor 庫並行Java
- 一行 Python 實現並行化 -- 日常多執行緒操作的新思路Python並行執行緒
- Java 執行緒池中的執行緒複用是如何實現的?Java執行緒
- 課程 3: 執行緒與並行執行緒並行
- 使用執行緒模擬解決銀行排隊叫號問題執行緒
- JAVA學習之路(多執行緒)—模擬售票(細解)Java執行緒
- shell佇列實現執行緒併發控制(轉)佇列執行緒
- VC訊號量和執行緒的用法執行緒
- 執行緒(一)——執行緒,執行緒池,Task概念+程式碼實踐執行緒
- 多執行緒實用講解執行緒
- Java多執行緒實現方式Java執行緒
- 執行緒池的實現原理執行緒
- 執行緒屏障CyclicBarrier實現原理執行緒
- 多執行緒具體實現執行緒