Joseph Born Kadane Created 2026-10-25 Updated 2026-11-05
Joseph Born Kadane is a statistician whose work connects Bayesian statistics, decision theory and applications of probability to practical evidence. In his own research statement, he describes work on prior elicitation: constructing probability distributions from an investigator's background knowledge, as well as on the foundations and computation of Bayesian inference.[ref]
https://www.stat.cmu.edu/GSS/kadane.html. Carnegie Mellon, Joseph B. Kadane research statement, theoretical interests
His institutional biography records that he joined Carnegie Mellon in 1971 and headed its statistics department from 1972 to 1981.[ref]
https://www.cmu.edu/dietrich/statistics-datascience/people/emeritus/joseph-kadane.html. Carnegie Mellon departmental biography, Bio
In computing, his name is also attached to Kadane's algorithm for the maximum subarray problem: the best segment ending at a new position either extends the preceding best-ending segment or starts at that position. This gives a linear-time dynamic programming solution.Portrait of Joseph Born Kadane
. Photograph from Carnegie Mellon University's official researcher profile. Source.This version of Kadane's algorithm, named for Joseph Born Kadane, permits the empty subsequence. For , let be the maximum of zero and the weight of a contiguous subsequence ending exactly at position . Let be the best weight anywhere in the first positions. UseA segment ending at either extends one ending at or starts at ; the zero candidate permits discarding a negative predecessor and the empty answer. Any best segment of the first positions either ends at or already occurs in the first . These two decompositions prove the dynamic programming equations by induction.
Here is an implementation returning endpoints, using zero-based indexing:There is exactly one addition per input element, hence additions and comparisons. Auxiliary storage is . The all-negative case retains interval and weight zero. The example returns and weight 8, hence the desired contiguous subsequence.
best_segment(a):
end_weight = best_weight = 0
start = best_lo = best_hi = 0
for j in range(len(a)):
trial = end_weight + a[j]
if trial <= 0:
end_weight = 0
start = j+1
else:
end_weight = trial
if end_weight > best_weight:
best_weight = end_weight
best_lo, best_hi = start, j+1
return (best_lo, best_hi, best_weight)