float FindIntervalSize(List <float> S) { float intervalsize = (S.Max() - S.Min()) / S.Count; var T = new List <float>(S); while (T.Count > 0) { Buckets buckets = new Buckets(intervalsize); while (T.Count > 0 && !buckets.HasBucketLargerThan(Math.Sqrt(S.Count))) { float r = T[T.Count - 1]; T.RemoveAt(T.Count - 1); int bucket = buckets.Bucket(r); buckets.Add(bucket, r); } intervalsize = buckets.BucketsWithMoreThanOneItem() .Select(items => FindIntervalSize(items)) .Union(new[] { intervalsize }) .Min(); } Buckets morebuckets = new Buckets(intervalsize); S.ForEach(r => morebuckets.Add(morebuckets.Bucket(r), r)); intervalsize = morebuckets.BucketsWithMoreThanOneItem() .Select(items => FindIntervalSize(items)) .Union(new[] { intervalsize }) .Min(); return(intervalsize); }
float FindIntervalSize(List<float> S) { float intervalsize = (S.Max() - S.Min()) / S.Count; var T = new List<float>(S); while (T.Count > 0) { Buckets buckets = new Buckets(intervalsize); while (T.Count > 0 && !buckets.HasBucketLargerThan(Math.Sqrt(S.Count))) { float r = T[T.Count - 1]; T.RemoveAt(T.Count - 1); int bucket = buckets.Bucket(r); buckets.Add(bucket, r); } intervalsize = buckets.BucketsWithMoreThanOneItem() .Select(items => FindIntervalSize(items)) .Union(new[] { intervalsize }) .Min(); } Buckets morebuckets = new Buckets(intervalsize); S.ForEach(r => morebuckets.Add(morebuckets.Bucket(r), r)); intervalsize = morebuckets.BucketsWithMoreThanOneItem() .Select(items => FindIntervalSize(items)) .Union(new[] { intervalsize }) .Min(); return intervalsize; }