diff --git a/C# DDC Algorithm/DDC Algorithm.csproj b/C# DDC Algorithm/DDC Algorithm.csproj
index e287be8..9a8efdf 100644
--- a/C# DDC Algorithm/DDC Algorithm.csproj
+++ b/C# DDC Algorithm/DDC Algorithm.csproj
@@ -49,6 +49,12 @@
+
+ Always
+
+
+ Always
+
\ No newline at end of file
diff --git a/C# DDC Algorithm/LatScaled.csv b/C# DDC Algorithm/LatScaled.csv
new file mode 100644
index 0000000..24a198d
--- /dev/null
+++ b/C# DDC Algorithm/LatScaled.csv
@@ -0,0 +1,400 @@
+1
+0.9974937
+0.9949875
+0.9924813
+0.9899751
+0.9874687
+0.9849625
+0.9824562
+0.97995
+0.9774438
+0.9749373
+0.9724311
+0.9699249
+0.9674187
+0.9649124
+0.962406
+0.9598998
+0.9573936
+0.9548873
+0.9523811
+0.9498747
+0.9473684
+0.9448622
+0.942356
+0.9398498
+0.9373434
+0.9348371
+0.9323309
+0.9298247
+0.9273185
+0.924812
+0.9223058
+0.9197996
+0.9172934
+0.9147871
+0.9122807
+0.9097745
+0.9072682
+0.904762
+0.9022558
+0.8997493
+0.8972431
+0.8947369
+0.8922307
+0.8897244
+0.8872181
+0.8847118
+0.8822056
+0.8796993
+0.8771932
+0.8746867
+0.8721805
+0.8696743
+0.867168
+0.8646618
+0.8621554
+0.8596492
+0.8571429
+0.8546367
+0.8521305
+0.8496242
+0.8471178
+0.8446116
+0.8421054
+0.8395991
+0.8370928
+0.8345865
+0.8320802
+0.829574
+0.8270677
+0.8245615
+0.8220552
+0.819549
+0.8170427
+0.8145364
+0.8120301
+0.8095238
+0.8070176
+0.8045114
+0.8020051
+0.7994989
+0.7969925
+0.7944863
+0.79198
+0.7894737
+0.7869675
+0.7844612
+0.7819549
+0.7794487
+0.7769424
+0.7744362
+0.7719299
+0.7694236
+0.7669174
+0.7644111
+0.7619048
+0.7593985
+0.7568923
+0.7543861
+0.7518798
+0.7493735
+0.7468672
+0.744361
+0.7418547
+0.7393484
+0.7368422
+0.7343358
+0.7318296
+0.7293234
+0.7268171
+0.7243109
+0.7218046
+0.7192983
+0.7167921
+0.7142857
+0.7117795
+0.7092732
+0.706767
+0.7042608
+0.7017545
+0.6992482
+0.6967419
+0.6942356
+0.6917294
+0.6892231
+0.6867169
+0.6842105
+0.6817043
+0.6791981
+0.6766918
+0.6741855
+0.6716792
+0.669173
+0.6666667
+0.6641604
+0.6616542
+0.6591479
+0.6566417
+0.6541354
+0.6516291
+0.6491229
+0.6466166
+0.6441103
+0.6416041
+0.6390978
+0.6365916
+0.6340852
+0.631579
+0.6290728
+0.6265665
+0.6240602
+0.6215539
+0.6190477
+0.6165414
+0.6140351
+0.6115289
+0.6090226
+0.6065164
+0.6040101
+0.6015038
+0.5989976
+0.5964912
+0.593985
+0.5914788
+0.5889724
+0.5864663
+0.5839599
+0.5814537
+0.5789475
+0.5764411
+0.5739349
+0.5714286
+0.5689223
+0.5664161
+0.5639098
+0.5614036
+0.5588973
+0.556391
+0.5538848
+0.5513785
+0.5488722
+0.5463659
+0.5438597
+0.5413535
+0.5388471
+0.5363409
+0.5338346
+0.5313284
+0.5288221
+0.5263158
+0.5238096
+0.5213033
+0.518797
+0.5162908
+0.5137845
+0.5112783
+0.508772
+0.5062657
+0.5037595
+0.5012532
+0.4987469
+0.4962406
+0.4937344
+0.4912282
+0.4887218
+0.4862156
+0.4837093
+0.481203
+0.4786968
+0.4761905
+0.4736843
+0.471178
+0.4686717
+0.4661655
+0.4636592
+0.4611529
+0.4586466
+0.4561404
+0.4536342
+0.4511279
+0.4486216
+0.4461153
+0.4436091
+0.4411028
+0.4385965
+0.4360903
+0.433584
+0.4310777
+0.4285715
+0.4260652
+0.423559
+0.4210526
+0.4185464
+0.4160402
+0.4135339
+0.4110276
+0.4085213
+0.4060151
+0.4035088
+0.4010025
+0.3984963
+0.39599
+0.3934838
+0.3909775
+0.3884712
+0.385965
+0.3834586
+0.3809524
+0.3784462
+0.3759399
+0.3734336
+0.3709273
+0.3684211
+0.3659149
+0.3634085
+0.3609023
+0.358396
+0.3558898
+0.3533835
+0.3508772
+0.348371
+0.3458647
+0.3433584
+0.3408522
+0.3383459
+0.3358397
+0.3333333
+0.3308271
+0.3283209
+0.3258145
+0.3233083
+0.320802
+0.3182958
+0.3157896
+0.3132832
+0.310777
+0.3082707
+0.3057644
+0.3032582
+0.3007519
+0.2982457
+0.2957394
+0.2932331
+0.2907269
+0.2882206
+0.2857143
+0.283208
+0.2807018
+0.2781956
+0.2756892
+0.273183
+0.2706767
+0.2681704
+0.2656642
+0.2631579
+0.2606517
+0.2581454
+0.2556391
+0.2531329
+0.2506266
+0.2481204
+0.245614
+0.2431078
+0.2406016
+0.2380953
+0.235589
+0.2330827
+0.2305765
+0.2280702
+0.2255639
+0.2230577
+0.2205514
+0.2180451
+0.2155389
+0.2130326
+0.2105264
+0.20802
+0.2055138
+0.2030076
+0.2005013
+0.197995
+0.1954887
+0.1929825
+0.1904763
+0.1879699
+0.1854637
+0.1829574
+0.1804512
+0.1779449
+0.1754386
+0.1729324
+0.1704261
+0.1679198
+0.1654136
+0.1629073
+0.160401
+0.1578947
+0.1553885
+0.1528823
+0.1503759
+0.1478697
+0.1453634
+0.1428572
+0.1403509
+0.1378446
+0.1353384
+0.1328321
+0.1303258
+0.1278196
+0.1253133
+0.1228071
+0.1203007
+0.1177945
+0.1152883
+0.112782
+0.1102757
+0.1077694
+0.1052632
+0.102757
+0.1002506
+0.09774441
+0.09523808
+0.09273186
+0.09022563
+0.08771931
+0.08521307
+0.08270675
+0.08020052
+0.0776943
+0.07518797
+0.07268175
+0.07017542
+0.0676692
+0.06516297
+0.06265665
+0.06015042
+0.0576441
+0.05513787
+0.05263164
+0.05012532
+0.04761909
+0.04511281
+0.04260654
+0.04010026
+0.03759399
+0.03508776
+0.03258149
+0.03007521
+0.02756893
+0.02506266
+0.02255643
+0.02005015
+0.01754388
+0.0150376
+0.01253133
+0.0100251
+0.007518826
+0.005012551
+0.002506275
+0
diff --git a/C# DDC Algorithm/LonScaled.csv b/C# DDC Algorithm/LonScaled.csv
new file mode 100644
index 0000000..a80c4a0
--- /dev/null
+++ b/C# DDC Algorithm/LonScaled.csv
@@ -0,0 +1,700 @@
+0
+0.001430621
+0.002861241
+0.004291862
+0.005722482
+0.007153076
+0.008583697
+0.01001432
+0.01144494
+0.01287556
+0.01430615
+0.01573677
+0.01716739
+0.01859801
+0.02002863
+0.02145923
+0.02288985
+0.02432047
+0.02575109
+0.02718171
+0.0286123
+0.03004292
+0.03147354
+0.03290416
+0.03433479
+0.03576538
+0.037196
+0.03862662
+0.04005724
+0.04148786
+0.04291845
+0.04434907
+0.04577969
+0.04721032
+0.04864094
+0.05007153
+0.05150215
+0.05293277
+0.05436339
+0.05579401
+0.05722461
+0.05865522
+0.06008585
+0.06151647
+0.06294709
+0.06437768
+0.0658083
+0.06723892
+0.06866954
+0.07010017
+0.07153076
+0.07296138
+0.074392
+0.07582262
+0.07725324
+0.07868383
+0.08011445
+0.08154507
+0.08297569
+0.08440632
+0.08583691
+0.08726753
+0.08869815
+0.09012877
+0.09155939
+0.09298998
+0.0944206
+0.09585123
+0.09728184
+0.09871247
+0.1001431
+0.1015737
+0.1030043
+0.1044349
+0.1058655
+0.1072961
+0.1087268
+0.1101574
+0.111588
+0.1130186
+0.1144492
+0.1158798
+0.1173104
+0.1187411
+0.1201717
+0.1216023
+0.1230329
+0.1244635
+0.1258941
+0.1273248
+0.1287554
+0.130186
+0.1316166
+0.1330472
+0.1344778
+0.1359085
+0.1373391
+0.1387697
+0.1402003
+0.1416309
+0.1430615
+0.1444921
+0.1459228
+0.1473534
+0.148784
+0.1502146
+0.1516452
+0.1530758
+0.1545064
+0.1559371
+0.1573677
+0.1587983
+0.1602289
+0.1616595
+0.1630901
+0.1645208
+0.1659514
+0.167382
+0.1688126
+0.1702432
+0.1716738
+0.1731044
+0.1745351
+0.1759657
+0.1773963
+0.1788269
+0.1802575
+0.1816881
+0.1831188
+0.1845494
+0.18598
+0.1874106
+0.1888412
+0.1902718
+0.1917024
+0.1931331
+0.1945637
+0.1959943
+0.1974249
+0.1988555
+0.2002861
+0.2017167
+0.2031474
+0.204578
+0.2060086
+0.2074392
+0.2088698
+0.2103004
+0.2117311
+0.2131617
+0.2145923
+0.2160229
+0.2174535
+0.2188841
+0.2203147
+0.2217454
+0.223176
+0.2246066
+0.2260372
+0.2274678
+0.2288984
+0.230329
+0.2317597
+0.2331903
+0.2346209
+0.2360515
+0.2374821
+0.2389127
+0.2403434
+0.241774
+0.2432046
+0.2446352
+0.2460658
+0.2474964
+0.2489271
+0.2503577
+0.2517883
+0.2532189
+0.2546495
+0.2560801
+0.2575107
+0.2589414
+0.260372
+0.2618026
+0.2632332
+0.2646638
+0.2660944
+0.267525
+0.2689556
+0.2703863
+0.2718169
+0.2732475
+0.2746781
+0.2761087
+0.2775394
+0.2789699
+0.2804006
+0.2818312
+0.2832618
+0.2846924
+0.286123
+0.2875536
+0.2889843
+0.2904149
+0.2918455
+0.2932761
+0.2947067
+0.2961373
+0.297568
+0.2989986
+0.3004292
+0.3018598
+0.3032904
+0.304721
+0.3061517
+0.3075823
+0.3090129
+0.3104435
+0.3118741
+0.3133047
+0.3147353
+0.316166
+0.3175966
+0.3190272
+0.3204578
+0.3218884
+0.323319
+0.3247496
+0.3261803
+0.3276109
+0.3290415
+0.3304721
+0.3319027
+0.3333333
+0.334764
+0.3361945
+0.3376252
+0.3390558
+0.3404864
+0.341917
+0.3433476
+0.3447782
+0.3462089
+0.3476395
+0.3490701
+0.3505007
+0.3519313
+0.3533619
+0.3547926
+0.3562232
+0.3576538
+0.3590844
+0.360515
+0.3619457
+0.3633763
+0.3648069
+0.3662375
+0.3676681
+0.3690987
+0.3705294
+0.3719599
+0.3733906
+0.3748212
+0.3762518
+0.3776824
+0.379113
+0.3805436
+0.3819743
+0.3834049
+0.3848355
+0.3862661
+0.3876967
+0.3891273
+0.3905579
+0.3919886
+0.3934192
+0.3948498
+0.3962804
+0.397711
+0.3991416
+0.4005722
+0.4020029
+0.4034335
+0.4048641
+0.4062947
+0.4077253
+0.4091559
+0.4105866
+0.4120172
+0.4134478
+0.4148784
+0.416309
+0.4177396
+0.4191703
+0.4206009
+0.4220315
+0.4234621
+0.4248927
+0.4263233
+0.427754
+0.4291845
+0.4306152
+0.4320458
+0.4334764
+0.434907
+0.4363376
+0.4377683
+0.4391989
+0.4406295
+0.4420601
+0.4434907
+0.4449213
+0.4463519
+0.4477825
+0.4492132
+0.4506438
+0.4520744
+0.453505
+0.4549356
+0.4563662
+0.4577968
+0.4592275
+0.4606581
+0.4620887
+0.4635193
+0.4649499
+0.4663806
+0.4678112
+0.4692417
+0.4706724
+0.472103
+0.4735336
+0.4749642
+0.4763949
+0.4778255
+0.4792561
+0.4806867
+0.4821173
+0.483548
+0.4849786
+0.4864092
+0.4878397
+0.4892704
+0.490701
+0.4921316
+0.4935622
+0.4949928
+0.4964235
+0.4978541
+0.4992847
+0.5007153
+0.5021459
+0.5035765
+0.5050072
+0.5064378
+0.5078683
+0.509299
+0.5107296
+0.5121602
+0.5135909
+0.5150214
+0.516452
+0.5178827
+0.5193133
+0.5207439
+0.5221745
+0.5236051
+0.5250357
+0.5264664
+0.527897
+0.5293276
+0.5307582
+0.5321888
+0.5336195
+0.5350501
+0.5364807
+0.5379113
+0.5393419
+0.5407726
+0.5422031
+0.5436338
+0.5450643
+0.546495
+0.5479257
+0.5493562
+0.5507869
+0.5522174
+0.5536481
+0.5550787
+0.5565093
+0.5579399
+0.5593705
+0.5608011
+0.5622318
+0.5636624
+0.565093
+0.5665236
+0.5679542
+0.5693849
+0.5708154
+0.5722461
+0.5736766
+0.5751073
+0.576538
+0.5779685
+0.5793991
+0.5808297
+0.5822604
+0.583691
+0.5851216
+0.5865522
+0.5879828
+0.5894135
+0.5908441
+0.5922747
+0.5937053
+0.5951359
+0.5965665
+0.5979972
+0.5994278
+0.6008583
+0.602289
+0.6037196
+0.6051502
+0.6065809
+0.6080114
+0.609442
+0.6108727
+0.6123033
+0.6137339
+0.6151645
+0.6165951
+0.6180257
+0.6194564
+0.620887
+0.6223176
+0.6237482
+0.6251788
+0.6266094
+0.6280401
+0.6294706
+0.6309013
+0.6323319
+0.6337625
+0.6351932
+0.6366237
+0.6380543
+0.639485
+0.6409156
+0.6423462
+0.6437768
+0.6452074
+0.646638
+0.6480687
+0.6494993
+0.6509299
+0.6523605
+0.6537911
+0.6552218
+0.6566524
+0.658083
+0.6595135
+0.6609442
+0.6623749
+0.6638054
+0.6652361
+0.6666666
+0.6680973
+0.6695279
+0.6709585
+0.6723891
+0.6738197
+0.6752504
+0.676681
+0.6781116
+0.6795422
+0.6809728
+0.6824034
+0.6838341
+0.6852646
+0.6866953
+0.6881258
+0.6895565
+0.6909872
+0.6924177
+0.6938483
+0.6952789
+0.6967096
+0.6981402
+0.6995708
+0.7010014
+0.702432
+0.7038627
+0.7052933
+0.7067239
+0.7081545
+0.7095851
+0.7110158
+0.7124464
+0.713877
+0.7153076
+0.7167382
+0.7181688
+0.7195995
+0.7210301
+0.7224606
+0.7238913
+0.7253219
+0.7267525
+0.7281832
+0.7296137
+0.7310443
+0.732475
+0.7339056
+0.7353362
+0.7367668
+0.7381974
+0.739628
+0.7410587
+0.7424893
+0.7439198
+0.7453505
+0.7467811
+0.7482117
+0.7496424
+0.7510729
+0.7525035
+0.7539342
+0.7553648
+0.7567954
+0.758226
+0.7596566
+0.7610872
+0.7625179
+0.7639485
+0.7653791
+0.7668097
+0.7682403
+0.769671
+0.7711016
+0.7725322
+0.7739627
+0.7753934
+0.7768241
+0.7782546
+0.7796853
+0.7811158
+0.7825465
+0.7839772
+0.7854077
+0.7868384
+0.7882689
+0.7896996
+0.7911302
+0.7925608
+0.7939914
+0.795422
+0.7968526
+0.7982833
+0.7997139
+0.8011445
+0.8025751
+0.8040057
+0.8054364
+0.8068669
+0.8082976
+0.8097281
+0.8111588
+0.8125895
+0.81402
+0.8154506
+0.8168813
+0.8183119
+0.8197424
+0.8211731
+0.8226037
+0.8240343
+0.825465
+0.8268955
+0.8283262
+0.8297568
+0.8311874
+0.832618
+0.8340486
+0.8354793
+0.8369098
+0.8383405
+0.8397711
+0.8412017
+0.8426324
+0.8440629
+0.8454936
+0.8469242
+0.8483548
+0.8497854
+0.851216
+0.8526466
+0.8540772
+0.8555079
+0.8569385
+0.8583691
+0.8597997
+0.8612303
+0.8626609
+0.8640916
+0.8655221
+0.8669528
+0.8683834
+0.869814
+0.8712446
+0.8726752
+0.8741059
+0.8755365
+0.8769671
+0.8783977
+0.8798283
+0.881259
+0.8826895
+0.8841202
+0.8855508
+0.8869814
+0.8884121
+0.8898426
+0.8912732
+0.8927039
+0.8941345
+0.8955651
+0.8969957
+0.8984263
+0.8998569
+0.9012876
+0.9027182
+0.9041488
+0.9055794
+0.90701
+0.9084406
+0.9098713
+0.9113019
+0.9127324
+0.9141631
+0.9155937
+0.9170244
+0.9184549
+0.9198856
+0.9213161
+0.9227468
+0.9241775
+0.9256079
+0.9270387
+0.9284692
+0.9298998
+0.9313306
+0.932761
+0.9341917
+0.9356223
+0.9370529
+0.9384836
+0.9399141
+0.9413448
+0.9427754
+0.944206
+0.9456367
+0.9470672
+0.9484979
+0.9499285
+0.9513591
+0.9527898
+0.9542202
+0.9556509
+0.9570816
+0.9585121
+0.9599428
+0.9613733
+0.962804
+0.9642347
+0.9656652
+0.9670959
+0.9685264
+0.9699571
+0.9713877
+0.9728183
+0.974249
+0.9756795
+0.9771102
+0.9785408
+0.9799713
+0.981402
+0.9828326
+0.9842632
+0.9856939
+0.9871244
+0.9885551
+0.9899856
+0.9914163
+0.9928469
+0.9942775
+0.9957082
+0.9971387
+0.9985694
+1
diff --git a/C# DDC Algorithm/Program.cs b/C# DDC Algorithm/Program.cs
index 22d04d8..53039eb 100644
--- a/C# DDC Algorithm/Program.cs
+++ b/C# DDC Algorithm/Program.cs
@@ -1,15 +1,222 @@
using System;
using System.Collections.Generic;
+using System.IO;
using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-namespace DDC_Algorithm
+namespace Pustalorc.University.DDC_Algorithm
{
- class Program
+ internal class Program
{
- static void Main(string[] args)
+ private static void Main()
{
+ var lonScaled = File.ReadAllLines("LonScaled.csv").ToList().ConvertAll(double.Parse);
+ var latScaled = File.ReadAllLines("LatScaled.csv").ToList().ConvertAll(double.Parse);
+
+ var start = DateTime.Now;
+ Ddc(lonScaled, 0.0021);
+ Console.WriteLine($"Took {DateTime.Now.Subtract(start).TotalMilliseconds}ms to complete LonScaled.");
+
+ start = DateTime.Now;
+ Ddc(latScaled, 0.0038);
+ Console.WriteLine($"Took {DateTime.Now.Subtract(start).TotalMilliseconds}ms to complete LatScaled.");
+
+ Console.ReadKey();
+ }
+
+ public static double GetScalar(List data)
+ {
+ var total = data.Sum(d => d * d);
+ return total / data.Count;
+ }
+
+ public static List GetLocalScalar(Dictionary data)
+ {
+ return data.Select(d => Math.Pow(d.Value, 2) / data.Count).ToList();
+ }
+
+ public static List GetDensity(IEnumerable data, double mean, double scalar)
+ {
+ return data.Select(d => Math.Pow(Math.Abs(d - mean), 2) + scalar - Math.Pow(mean, 2)).ToList();
+ }
+
+ public static Dictionary GetLocalDensity(Dictionary data, double mean,
+ List scalar)
+ {
+ var density = new Dictionary();
+ for (var i = 0; i < data.Count; i++)
+ density.Add(data.Keys.ToList()[i],
+ Math.Pow(Math.Abs(data.Values.ToList()[i] - mean), 2) + scalar[i] - Math.Pow(mean, 2));
+
+ return density;
+ }
+
+ public static Dictionary SubtractFromList(List list, double value)
+ {
+ return list.ToDictionary(list.IndexOf, d => Math.Pow(d - value, 2));
+ }
+
+ public static Dictionary DivideFromList(Dictionary list, double value)
+ {
+ return list.ToDictionary(d => d.Key, d => d.Value / value);
+ }
+
+ public static Dictionary GetDistance(Dictionary list, double value)
+ {
+ return list.ToDictionary(l => l.Key, l => Math.Abs(l.Value - value));
+ }
+
+ public static Dictionary GetIndecesValues(Dictionary value, List source,
+ Predicate match)
+ {
+ return value.Where(l => match(l.Value)).ToDictionary(l => l.Key, l => source[l.Key]);
+ }
+
+ public static void Ddc(List data, double radius)
+ {
+ // Output
+ var radii = new List();
+ var centres = new List();
+
+ // Local Vars
+ var numClusters = 0;
+ var result = new List();
+
+ while (data.Count > 0)
+ {
+ numClusters++;
+ radii.Add(radius);
+
+ // Find Cluster Centre
+ var globalMean = data.Average();
+ var globalScalar = GetScalar(data);
+
+ var globalDensity = GetDensity(data, globalMean, globalScalar);
+ var centreIndex = globalDensity.IndexOf(globalDensity.Min());
+
+ // Find Points Belonging to Cluster
+ var include = SubtractFromList(data, data[centreIndex]);
+ var radSq = Math.Pow(radii[numClusters - 1], 2);
+ include = DivideFromList(include, radSq);
+ include = GetIndecesValues(include, data, value => value < 1);
+
+ // Remove outliers
+ var dist = GetDistance(include, data[centreIndex]);
+ var average = dist.Values.Average();
+ for (var i = 0; i < dist.Count; i++)
+ {
+ var std = CalculateStandardDeviation(dist.Values);
+
+ if (data.Count == 38)
+ Console.WriteLine();
+
+ if (double.IsNaN(std))
+ continue;
+
+ if (dist.Values.ToList()[i] - average <= 3 * std)
+ continue;
+
+ include.Remove(i);
+ dist.Remove(dist.Keys.ToList()[i]);
+ i--;
+ }
+
+ // Move cluster centre to local densest point
+
+ var locMean = include.Values.Average();
+ var locScalar = GetLocalScalar(include);
+ var locDens = GetLocalDensity(include, locMean, locScalar);
+ centreIndex = locDens.Min(k => k.Key);
+ centres.Add(data[centreIndex]);
+
+ // Assign data to new centre
+ include = SubtractFromList(data, centres[numClusters - 1]);
+ radSq = Math.Pow(radii[numClusters - 1], 2);
+ include = DivideFromList(include, radSq);
+ include = GetIndecesValues(include, data, value => value < 1);
+
+ // Remove outliers
+ dist = GetDistance(include, centres[numClusters - 1]);
+ average = dist.Values.Average();
+ for (var i = 0; i < dist.Count; i++)
+ {
+ var std = CalculateStandardDeviation(dist.Values);
+
+ if (data.Count == 38)
+ Console.WriteLine();
+
+ if (double.IsNaN(std))
+ continue;
+
+ if (dist.Values.ToList()[i] - average <= 3 * std)
+ continue;
+
+ include.Remove(i);
+ dist.Remove(dist.Keys.ToList()[i]);
+ i--;
+ }
+
+ // Update radii to maximum distance
+ var radiiDist = GetDistance(include, centres[numClusters - 1]);
+ if (radiiDist.Values.Max() > 0)
+ radii[numClusters - 1] = radiiDist.Values.Max();
+
+ // Assign data to cluster based on new radii
+ include = SubtractFromList(data, centres[numClusters - 1]);
+ radSq = Math.Pow(radii[numClusters - 1], 2);
+ include = DivideFromList(include, radSq);
+ include = GetIndecesValues(include, data, value => value < 1);
+
+ // Remove outliers
+ dist = GetDistance(include, centres[numClusters - 1]);
+ average = dist.Values.Average();
+ for (var i = 0; i < dist.Count; i++)
+ {
+ var std = CalculateStandardDeviation(dist.Values);
+
+ if (data.Count == 38)
+ Console.WriteLine();
+
+ if (double.IsNaN(std))
+ continue;
+
+ if (dist.Values.ToList()[i] - average <= 3 * std)
+ continue;
+
+ include.Remove(i);
+ dist.Remove(dist.Keys.ToList()[i]);
+ i--;
+ }
+
+ // Update radii to maximum distance
+ radiiDist = GetDistance(include, centres[numClusters - 1]);
+ if (radiiDist.Values.Max() > 0)
+ radii[numClusters - 1] = radiiDist.Values.Max();
+
+ // Assign data to final clusters
+
+ foreach (var i in include)
+ {
+ result.Add(data[i.Key]);
+ data.Remove(i.Value);
+ }
+ }
+
+ Console.WriteLine($"There are a total of {centres.Count} clusters, and {radii.Count} radii.");
+ }
+
+ public static double CalculateStandardDeviation(IEnumerable values)
+ {
+ double standardDeviation = 0;
+ values = values.ToList();
+
+ if (!values.Any()) return standardDeviation;
+
+ var avg = values.Average();
+ var sum = values.Sum(d => Math.Pow(d - avg, 2));
+
+ standardDeviation = Math.Sqrt(sum / (values.Count() - 1));
+
+ return standardDeviation;
}
}
-}
+}
\ No newline at end of file
diff --git a/C# DDC Algorithm/Properties/AssemblyInfo.cs b/C# DDC Algorithm/Properties/AssemblyInfo.cs
index 78d6924..a9ca65e 100644
--- a/C# DDC Algorithm/Properties/AssemblyInfo.cs
+++ b/C# DDC Algorithm/Properties/AssemblyInfo.cs
@@ -12,4 +12,4 @@ using System.Runtime.InteropServices;
[assembly: ComVisible(false)]
[assembly: Guid("44d56546-6fe3-4bb1-a4b5-6b555bc35905")]
[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
\ No newline at end of file