生活随笔
收集整理的這篇文章主要介紹了
带权中位数-算法导论第三版第九章思考题9-2
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
帶權(quán)中位數(shù)-算法導(dǎo)論第三版第九章思考題9-2
b 時(shí)間復(fù)雜度O(nlgn)
float find_median_with_weights_b ( float * array
, int length
)
{ quick_sort
< float > ( array
, 0 , length
- 1 ) ; float sum
= 0 ; int index
= 0 ; while ( sum
< 0.5 ) { sum
+= array
[ index
] ; index
++ ; } return array
[ index
- 1 ] ;
}
輔助代碼quick_sort 鏈接地址 c 時(shí)間復(fù)雜度Θ(n)
float find_median_with_weights_c ( float * array
, int start
, int end
, float last_left_sum
, float last_right_sum
)
{ select
< float > ( array
, start
, end
, ( end
- start
) / 2 ) ; float left_sum
= 0 ; float right_sum
= 0 ; for ( int i
= start
; i
< start
+ ( end
- start
) / 2 ; ++ i
) { left_sum
+= array
[ i
] ; } for ( int i
= start
+ ( end
- start
) / 2 + 1 ; i
< end
+ 1 ; ++ i
) { right_sum
+= array
[ i
] ; } if ( left_sum
+ last_left_sum
< 0.5 && right_sum
+ last_right_sum
< 0.5 ) { return array
[ start
+ ( end
- start
) / 2 ] ; } else if ( left_sum
> 0.5 ) { last_right_sum
+= right_sum
; end
= ( end
- start
) / 2 - 1 ; } else { last_left_sum
+= left_sum
; start
= start
+ ( end
- start
) / 2 ; } return find_median_with_weights_c ( array
, start
, end
, last_left_sum
, last_right_sum
) ;
}
float find_median_with_weights_c ( float * array
, int length
)
{ return find_median_with_weights_c ( array
, 0 , length
- 1 , 0 , 0 ) ;
}
輔助代碼select 鏈接地址
總結(jié)
以上是生活随笔 為你收集整理的带权中位数-算法导论第三版第九章思考题9-2 的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔 網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔 推薦給好友。