-
Notifications
You must be signed in to change notification settings - Fork 7
/
rss.xml
1546 lines (1541 loc) · 83 KB
/
rss.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
<title>The Art Gallery Guardian</title>
<link>https://chaoxu.prof</link>
<description><![CDATA[Mostly notes on algorithms]]></description>
<atom:link href="https://chaoxu.prof/rss.xml" rel="self"
type="application/rss+xml" />
<lastBuildDate>Sun, 06 Feb 2022 00:00:00 UT</lastBuildDate>
<item>
<title>The related employer controlled group</title>
<link>https://chaoxu.prof/posts/2022-02-06-related-companies-and-controlled-groups.html</link>
<description><![CDATA[<br />
<div>
<p>Disclaimer: Not an accountant nor a lawyer.</p>
<p>For employees in the US, employers (not just the employee) can
contribute to the employee’s retirement fund 401(k). There is an maximum
limit. It is <span class="math inline">M = \$61,000</span> for 2022.</p>
<p>If a person works for multiple <em>unrelated</em> employers, each
employer, in theory, can contribute <span class="math inline">M</span>
to their 401(k). This is because such limit is based on the plan, and
not based on the person.</p>
<p>See <a
href="https://www.kitces.com/blog/coordinating-contributions-multiple-employer-sponsored-defined-contribution-plans-401k-defined-benefit/">Michael
Kitces’s excellent article about the problem</a>.</p>
<p>Kitce’s article outlined there are two ways to determine if some
entities are related. Here we focus on the easier one, the controlled
group. Another good source for controlled groups is <a
href="https://www.betterment.com/401k/resources/controlled-groups">betterment’s
article</a>.</p>
<p>We will be very specific about the statement, what is
<em>unrelated</em>? Unfortunately. What IRS defined as controlled group
does not give us a equivalence relation. So here is an overview of what
is actually happening.</p>
<p>The IRS produce rules that group companies into sets of what is
called controlled groups. The idea is these companies are controlled by
the same entity. So they could as well be made into a single company. So
if they are a single company, they should not be contributing more than
<span class="math inline">M</span> to a employers 401(k).</p>
<p>However, there are overlap of the groups. So a partition must be
created. This partition, which I call it the controlled partition, need
to have the property that each partition class is a subset of some
controlled group.</p>
<p><a href="https://www.law.cornell.edu/uscode/text/26/1563">The actual
code states what to do with the overlaps</a>.</p>
<blockquote>
<p>The determination as to the group of which such corporation is a
component member shall be made under regulations prescribed by the
Secretary which are consistent with the purposes of this part.</p>
</blockquote>
<p>If a person works for companies that spans <span
class="math inline">k</span> different classes of the controlled
partition, then the employers in each partition class can contribute at
most <span class="math inline">M</span> to the person’s 401(k).</p>
<p>Now, we want to distill the information to a mathematically formal
one.</p>
<p>Consider we have a directed graph. The edges has a weight function
<span class="math inline">w:V\times V \to [0,1]</span>. Note for
simplicity of exposition, <span class="math inline">w(a,b)</span> for an
edge that doesn’t exists is defined as <span
class="math inline">0</span>. For each vertex, it satisfies sum of the
weight of in edges is at most <span class="math inline">1</span>.</p>
<p>The intuition is <span class="math inline">w(a,b)</span> means the
proportion of <span class="math inline">b</span> that is owned by <span
class="math inline">a</span>.</p>
<p>There is a special subset of vertices <span
class="math inline">U</span>. It correspond to individual, trusts and/or
estates.</p>
<p>We define a few terms.</p>
<ol type="1">
<li>A set <span class="math inline">S</span> of entities is a P-set, if
<span class="math inline">S</span> have the following property.</li>
</ol>
<ul>
<li>there exists a special vertex <span class="math inline">p\in
S</span>, called the parent.</li>
<li><span class="math inline">\sum_{u\in S} w(uv) \geq 0.8</span> for
all <span class="math inline">v\in S\setminus \set{p}</span>.</li>
<li><span class="math inline">w(pv)\geq 0.8</span> for at least two
distinct vertices in <span class="math inline">S\setminus
\set{p}</span>.</li>
</ul>
<ol start="2" type="1">
<li>A set <span class="math inline">S</span> is a B-set, if <span
class="math inline">|S|\geq 2</span>, and there exists a set <span
class="math inline">T\subseteq U</span> such that <span
class="math inline">|T|\leq 5</span>, and</li>
</ol>
<ul>
<li><span class="math inline">\sum_{t\in T} w(tv)\geq 0.8</span> for
each <span class="math inline">v\in S</span>,</li>
<li><span class="math inline">\sum_{t\in T} \min_{v\in S} \set{w(tv)}
\geq 0.5</span>.</li>
</ul>
<ol start="3" type="1">
<li>A set <span class="math inline">S</span> is a C-set, if <span
class="math inline">|S|\geq 3</span> and</li>
</ol>
<ul>
<li>for each <span class="math inline">v\in S</span>, <span
class="math inline">v</span> is in a P-set contained in <span
class="math inline">S</span>, or a B-set contained in <span
class="math inline">S</span>.</li>
<li>at least one vertex <span class="math inline">v\in S</span> is a
parent vertex of some P-set contained in <span
class="math inline">S</span>, and is also a vertex of a B-set contained
in <span class="math inline">S</span>.</li>
</ul>
<p>The P-set, B-set and C-set reflects Parent-Subsidiary Controlled
Group, Brother-Sister Controlled Group and Combined Controlled Group,
respecitvely. Note I’m still simplfying here. There are some attribution
problems. For example, someone could own a trust which owns a company,
and this has to be taken into consideration for the controlled
groups.</p>
<p>Here I found a few useful facts.</p>
<ol type="1">
<li>It’s possible that two B-set <span class="math inline">A</span> and
<span class="math inline">B</span> intersects, but <span
class="math inline">A\cup B</span> is not a B-set:</li>
</ol>
<p>Consider there are two sets of size <span
class="math inline">5</span> in <span class="math inline">U</span>,
<span class="math inline">T_1</span> and <span
class="math inline">T_2</span>. <span class="math inline">|T_1\cap T_2|
= 1</span>.</p>
<p>Consider two sets <span class="math inline">A = \set{a,c}</span> and
<span class="math inline">B=\set{b,c}</span>. For each vertex <span
class="math inline">v\in T_1\setminus T_2</span>, there is an edge <span
class="math inline">va</span> with weight <span
class="math inline">7/40</span>, and edge <span
class="math inline">vc</span> with weight <span
class="math inline">1/20</span>. For each vertex <span
class="math inline">v\in T_2\setminus T_1</span>, there is an edge <span
class="math inline">vb</span> with weight <span
class="math inline">7/40</span>, and edge <span
class="math inline">vc</span> with weight <span
class="math inline">1/20</span>. For <span class="math inline">v\in
T_1\cap T_2</span>, there is an edge <span class="math inline">vc</span>
with weight <span class="math inline">3/5</span>, <span
class="math inline">va</span>, <span class="math inline">vb</span> with
weight <span class="math inline">3/10</span>.</p>
<p>The claim is that <span class="math inline">A</span> and <span
class="math inline">B</span> are both B-set, but <span
class="math inline">A\cup B</span> is not. This is because no subset of
<span class="math inline">T_1\cup T_2</span> with size no larger than
<span class="math inline">5</span> can make sure incoming weights for
each vertex in <span class="math inline">A\cup B</span> is at least
<span class="math inline">0.8</span>.</p>
<ol start="2" type="1">
<li><p><span class="math inline">A\subseteq B</span> and <span
class="math inline">B</span> is a B-set, then <span
class="math inline">A</span> is a B-set if <span
class="math inline">|A|\geq 2</span>.</p></li>
<li><p>Two P-sets <span class="math inline">A</span> and <span
class="math inline">B</span> such that <span class="math inline">A\cap
B\neq \emptyset</span>, then <span class="math inline">A\cup B</span> is
a P-set.</p></li>
</ol>
<p>This mean there is a unique maximal P-set containing a particular
vertex.</p>
<ol start="4" type="1">
<li>If any set is a C-set, then the union of all P-sets and B-sets is a
C-set.</li>
</ol>
<p>Looking at the letter of the law, any C-set together with some other
P-set and B-set is still a C-set. This means two companies that is not
related in any way can be classified to be related.</p>
</div>
<div class="hide-on-print">
<div class="info">Posted by <a href="https://chaoxu.prof">Chao Xu</a> on <time datetime="2022-02-06">2022-02-06</time>. </div>
<div class="info">Tags: tax, 401(k).</div>
</div>]]></description>
<pubDate>Sun, 06 Feb 2022 00:00:00 UT</pubDate>
<guid>https://chaoxu.prof/posts/2022-02-06-related-companies-and-controlled-groups.html</guid>
<dc:creator>Chao Xu</dc:creator>
</item>
<item>
<title>Test conjectures on $k$-partitions over submodular functions</title>
<link>https://chaoxu.prof/posts/2022-01-30-test-conjectures-on-k-partitions.html</link>
<description><![CDATA[<br />
<div>
<p>This article we consider tools one can use to quickly test
conjectures. Testing conjectures quickly run into realm of infeasibility
due to the combinatorial explosion. We look through an actual example
and learn a few techniques. We use <a
href="https://www.sagemath.org/">Sage</a> and any fast linear program
solver, like <a href="https://www.gurobi.com/">Gurobi</a>.</p>
<h1 data-number="1"
id="a-conjecture-on-k-partitions-of-submodular-function"><span
class="header-section-number">1</span> A conjecture on <span
class="math inline">k</span>-partitions of submodular function</h1>
<p>A set of <span class="math inline">k</span> non-empty and disjoint
sets that partitions <span class="math inline">V</span> is called a
<span class="math inline">k</span>-partition. Let <span
class="math inline">f:2^V\to \R</span> be a submodular function, a
minimum <span class="math inline">k</span>-partition is a <span
class="math inline">k</span>-partition <span
class="math inline">\mathcal{X}</span> of <span
class="math inline">V</span> such that <span
class="math inline">\sum_{X\in \mathcal{X}} f(X)</span> is
minimized.</p>
<p>A <span class="math inline">k</span>-partition <span
class="math inline">\mathcal{X}</span> and a <span
class="math inline">j</span>-partition <span
class="math inline">\mathcal{Y}</span> is noncrossing, if <span
class="math inline">X\subseteq Y</span> for some <span
class="math inline">X\in \mathcal{X}</span> and <span
class="math inline">Y\in \mathcal{Y}</span>. We denote it <span
class="math inline">\mathcal{X}\lhd\mathcal{Y}</span>.</p>
<p>For two partitions, <span class="math inline">\mathcal{X}\sqcap
\mathcal{Y} = \set{ X\cap Y | X\in \mathcal{X},
Y\in\mathcal{Y}}</span>.</p>
<p>For two partitions <span class="math inline">\mathcal{X}</span> and
<span class="math inline">\mathcal{Y}</span>, <span
class="math inline">\mathcal{X}\leq \mathcal{Y}</span> if for each <span
class="math inline">X\in\mathcal{X}</span>, <span
class="math inline">X\subseteq Y</span> for some <span
class="math inline">Y\in\mathcal{Y}</span>.</p>
<div class="theorem-environment Conjecture" data-index="1"
type="Conjecture">
<span class="theorem-header"><span class="type">Conjecture</span><span
class="index">1</span></span>
<p><span class="math inline">f:2^V\to \R</span> is a submodular function
with <span class="math inline">|V|\geq k</span>. Let <span
class="math inline">\mathcal{X}</span> be a minimum <span
class="math inline">k-1</span>-partition and <span
class="math inline">\mathcal{Y}</span> be a minimum <span
class="math inline">k</span>-partition. There exists a minimum <span
class="math inline">k</span>-partition <span
class="math inline">\mathcal{Y}'</span> such that <span
class="math inline">\mathcal{X}\lhd \mathcal{Y}'</span> and <span
class="math inline">\mathcal{X}\sqcap \mathcal{Y} \leq
\mathcal{Y}'</span>.</p>
</div>
<p>We are interested in writing a program to test the conjecture for
small <span class="math inline">k</span>. The idea is to find different
ways <span class="math inline">\mathcal{X}</span> can intersect with
<span class="math inline">\mathcal{Y}</span>, a matrix that encodes such
information are called configurations. For each configuration, we want
to know under such configuration, can we find the desired <span
class="math inline">\mathcal{Y}'</span>.</p>
<h1 data-number="2" id="enumerate-non-isomorphic-configurations"><span
class="header-section-number">2</span> Enumerate non-isomorphic
configurations</h1>
<p>Given <span class="math inline">\mathcal{X} =
\set{X_1,\ldots,X_{k-1}}</span> and <span
class="math inline">\mathcal{Y} = \set{Y_1,\ldots,Y_{k}}</span>. Let
<span class="math inline">Z_{i,j} = X_i\cap Y_j</span>.</p>
<p>We want to show some <span
class="math inline">\mathcal{Y}'</span> is a min <span
class="math inline">k</span>-partition, where each partition class of
<span class="math inline">\mathcal{Y}'</span> has to be the union of
some <span class="math inline">Z_{i,j}</span>s.</p>
<p>It doesn’t matter if <span class="math inline">Z_{i,j}</span> has
<span class="math inline">100</span> or <span
class="math inline">1</span> vertices, only the emptyness matters.
Consider a matrix <span class="math inline">M_{i,j} =
\max(1,|Z_{i,j}|)</span>. Such a matrix is called a
<em>configuration</em>. Define two configurations are
<em>isomorphic</em>, if one can be obtained by swapping rows and columns
of the other.</p>
<p>We are interested in enumerate the possible configurations up to
isomorphism.</p>
<p>Find integer <span class="math inline">\set{0,1}</span> matrices and
then modulo the action of a permutation group (that defines the
isomorphism) can be done in Sage. There is a function that generates all
integer vectors modulo a permutation group, and the vectors has length
<span class="math inline">\ell</span> with elements in <span
class="math inline">\set{0,\ldots,n}</span>. See the reference on <a
href="https://doc.sagemath.org/html/en/reference/combinat/sage/combinat/integer_vectors_mod_permgroup.html">Integer
vectors modulo the action of a permutation group</a>.</p>
<pre><code>IntegerVectorsModPermutationGroup(P, max_part=1)</code></pre>
<p>Once we have the output, we filter the vectors to maintain the
required properties, for example, has at least a <span
class="math inline">1</span> on each row.</p>
<p>The input of the Sage function has to take the desired permutation
group <span class="math inline">P</span>.</p>
<p>One might think we just take <span class="math inline">S_{k-1}\times
S_k</span> to obtain <span class="math inline">P</span>, where <span
class="math inline">S_k</span> is the symmetric group of order <span
class="math inline">k</span>. Unfortunately, this is not correct. This
gives you the action on the rows and columns, but what we really need,
is what happens to each element in the matrix.</p>
<p>The correct way is to use the wreath products. We want to consider
<span class="math inline">S_{k-1} \wr S_k</span> intersect with <span
class="math inline">S_k \wr S_{k-1}</span>. However, we have to make
sure the mapping of the elements are correct. The following is the code
in SAGE, and the elements are numbers <span class="math inline">1</span>
to <span class="math inline">k(k-1)</span>. Note we made sure the
mapping has the same labels through permutation <code>pi</code>.</p>
<pre><code>a = SymmetricGroup(k-1)
b = SymmetricGroup(k)
matrix = [[k*x+y+1 for y in range(k-1)] for x in range(k)]
pi = list(itertools.chain.from_iterable(map(list, zip(*matrix))))
# we have to use SAGE to access GAP
GG = gap.WreathProduct(gap(a),gap(b))
HH = gap.WreathProduct(gap(b),gap(a))
G = PermutationGroup(gap_group = GG.AsPermGroup())
Hbad = PermutationGroup(gap_group = HH.AsPermGroup())
# make sure the elements are labelled correctly.
H = PermutationGroup([perm_replace(pi,g) for g in Hbad.gens()])
# The correct permutation group
P = H.intersection(G)</code></pre>
<p>At this point, we obtain all possible configurations. In particular,
for <span class="math inline">k=3,4,5,6</span>, the number of
configurations are <span class="math inline">13, 87, 1053,
28576</span>.</p>
<p>If we restrict to configurations where there is at least a <span
class="math inline">1</span> in each row and at least a <span
class="math inline">1</span> in each column, it cuts down the
configurations to <span class="math inline">5,42,633,20755</span>. We
can further observe that for some configurations, it implies <span
class="math inline">\mathcal{X}\lhd \mathcal{Y}</span> already, so we do
not have to check such configurations. Let’s call configurations after
the above filtering good configurations. The number of good
configurations for <span class="math inline">k=3,4,5,6</span> are <span
class="math inline">3, 23, 353, 12828</span>.</p>
<h1 data-number="3"
id="test-if-there-exists-a-noncrossing-mathcaly-for-a-configuration-m"><span
class="header-section-number">3</span> Test if there exists a
noncrossing <span class="math inline">\mathcal{Y}'</span> for a
configuration <span class="math inline">M</span></h1>
<p>We now have a configuration <span class="math inline">M</span>, and
now we are interested in creating a linear program to decide if there
always exists a minimum <span class="math inline">k</span>-partition
<span class="math inline">\mathcal{Y}'</span> that is non-crossing
with the minimum <span class="math inline">(k-1)</span>-partition <span
class="math inline">\mathcal{X}</span>. For a given <span
class="math inline">M</span>, one can always recover <span
class="math inline">\mathcal{X}</span> and <span
class="math inline">\mathcal{Y}</span>.</p>
<p>Let <span class="math inline">V</span> be the set of vertices, which
equals to the number of <span class="math inline">1</span>s in <span
class="math inline">M</span>. Let <span
class="math inline">P_k(V)</span> be the set of <span
class="math inline">k</span>-partitions of <span
class="math inline">V</span>. For each <span
class="math inline">U\subseteq V</span>, we create a variable <span
class="math inline">x_U</span>. It represents the value of <span
class="math inline">f(U)</span>. We also create a variable <span
class="math inline">z</span>.</p>
<p>For a partition <span class="math inline">\mathcal{S}</span>, <span
class="math inline">x_\mathcal{S}</span> is just <span
class="math inline">\sum_{S\in \mathcal{S}} x_S</span>.</p>
<p>Consider the following linear program.</p>
<p><span class="math display">
\begin{aligned}
& \max & & z &\\
& \text{s.t.} & & x_{S\cup \{a\}} + x_{S\cup \{b\}} \geq
x_{S\cup \{a,b\}} + x_{S} & \forall S\subseteq V, a,b\in V\setminus
S\\
& & & x_\mathcal{X} \leq x_{\mathcal{X}'}
& \forall \mathcal{X}'\in P_{k-1}(V)\\
& & & x_\mathcal{Y} \leq x_{\mathcal{Y}'}
& \forall \mathcal{Y}'\in P_{k}(V)\\
& & & x_\mathcal{Y} = 1 & \\
& & & z \leq x_{\mathcal{Y}'} & \forall
\mathcal{Y}'\in P_{k}(V), \mathcal{X} \lhd \mathcal{Y}'\\
\end{aligned}
</span></p>
<p>The first set of constraints are the submodular inequalities. The
second shows <span class="math inline">\mathcal{X}</span> is a minimum
<span class="math inline">k-1</span>-partition, and the third shows
<span class="math inline">\mathcal{Y}</span> is a minimum <span
class="math inline">k</span>-partition. We also set the value of the
minimum <span class="math inline">k</span>-partition to be <span
class="math inline">1</span>. Finally, we consider every <span
class="math inline">k</span>-partition that is non-crossing with <span
class="math inline">\mathcal{X}</span>, and <span
class="math inline">z</span> is a lower bound of their value.</p>
<p>If the objective value <span class="math inline">z=1</span>, then
this means there is at least <span class="math inline">1</span> <span
class="math inline">k</span>-partition <span
class="math inline">\mathcal{Y}'</span> that is non-crossing with
<span class="math inline">\mathcal{X}</span> has the value same as the
minimum <span class="math inline">k</span>-partition. Therefore the
conjecture is true if and only for every configuration <span
class="math inline">M</span>, the above linear program has optimum <span
class="math inline">1</span>.</p>
<h1 data-number="4" id="redundant-constraints"><span
class="header-section-number">4</span> Redundant constraints</h1>
<p>One can easily prove the conjecture for <span
class="math inline">k=3,4</span> by directly using the above linear
program over all good configurations. However, it runs into difficulty
with <span class="math inline">k=5</span>. This is because the linear
program is way too large. The number of <span
class="math inline">k</span> partitions for <span
class="math inline">n</span> elements is the Stirling number of the
second kind <span class="math inline">\left\{{n\atop k}\right\}</span>.
<span class="math inline">\left\{{20\atop 5}\right\} =
749206090500</span> and <span class="math inline">\left\{{20\atop
4}\right\} = 45232115901</span>. However, it seems many constraints are
redundant due to symmetry. It be interesting to see if we can cut it
down to a manageable size. If so, maybe the conjecture for <span
class="math inline">k=5</span> or even <span
class="math inline">k=6</span> might be solvable.</p>
<p>To do this, we consider the following definition. Consider a vector
<span class="math inline">s=(s_1,\ldots,s_k)</span>. We say a family of
<span class="math inline">k</span>-partitions <span
class="math inline">\mathcal{F}</span> is <span
class="math inline">s</span>-complete, if <span
class="math inline">f(\mathcal{P})\geq f(\mathcal{Y})</span> for all
<span class="math inline">\mathcal{P}\in \mathcal{C}</span>, then <span
class="math inline">f(\mathcal{P})\geq f(\mathcal{Y})</span> for all
<span class="math inline">k</span>-partition <span
class="math inline">\mathcal{P}</span>. Here <span
class="math inline">\mathcal{Y}=\{Y_1,\ldots,Y_k\}</span> is a <span
class="math inline">k</span>-partition such that <span
class="math inline">|Y_i|=s_i</span>. Let <span
class="math inline">\lambda(s)</span> to be the size of the minimum
<span class="math inline">s</span>-complete family. So instead of
considering all <span class="math inline">k</span>-partitions for the
constraints, we just have to consider the <span
class="math inline">s</span>-complete family for some <span
class="math inline">s</span>. If <span
class="math inline">\lambda(s)</span> is very small, then there is hope
to solve the problem quickly.</p>
<p>Let <span class="math inline">t</span> be a <span
class="math inline">k</span>-tuple consists of only <span
class="math inline">d</span>’s, then we define <span
class="math inline">\lambda_k(d) = \lambda(t)</span>. It would be very
interesting to see how large <span
class="math inline">\lambda_k(d)</span> is.</p>
<p>As an example, we show a simple result on <span
class="math inline">\lambda(a,b)</span>.</p>
<div class="theorem-environment Theorem" data-index="2" type="Theorem">
<span class="theorem-header"><span class="type">Theorem</span><span
class="index">2</span></span>
<p><span class="math inline">\lambda(a,b)\leq 2^a+2^b-3</span>.</p>
</div>
<div class="theorem-environment Proof" type="Proof">
<span class="theorem-header"><span class="type">Proof</span></span>
<p>Indeed, let <span class="math inline">\mathcal{Y}=(Y_1,Y_2)</span>
consists of <span class="math inline">a</span> and <span
class="math inline">b</span> elements.</p>
<p>Consider the following family <span
class="math inline">\mathcal{F}</span>: For each non-empty set <span
class="math inline">S</span> such that either <span
class="math inline">S\subsetneq Y_1</span> or <span
class="math inline">S\subsetneq Y_2</span>, <span
class="math inline">(S,V-S)\in \mathcal{F}</span>. Also, let <span
class="math inline">\mathcal{Y}\in \mathcal{F}</span>.</p>
<p>So there are <span class="math inline">2^a-2 + 2^b-2 + 1</span> sets
in <span class="math inline">\mathcal{F}</span>.</p>
<p>Next, we show <span class="math inline">\mathcal{F}</span> is an
<span class="math inline">(a,b)</span>-complete family. Consider any
<span class="math inline">(X_1,X_2)</span> not in <span
class="math inline">\mathcal{F}</span> and consider the intersection
with <span class="math inline">(Y_1,Y_2)</span>. Let <span
class="math inline">Z_{i,j} = X_i\cap Y_j</span>.</p>
<p>Let <span class="math inline">|Z_{1,1}|=x</span> and <span
class="math inline">|Z_{2,1}|=y</span>, then we have <span
class="math inline">|Z_{1,2}|=a-x</span> and <span
class="math inline">|Z_{2,2}|=b-x</span>. Consider when all <span
class="math inline">Z_{i,j}</span> is non-empty.</p>
<p><span class="math display">\begin{align*}
\sum_{i=1}^2 \sum_{j=1}^2 f(X_i)+f(Y_j) &=
2(f(X_1)+f(X_2)+f(Y_1)+f(Y_2))\\
&\geq \sum_{i=1}^2
\sum_{j=1}^2 f(Z_{i,j}) + f(X_i\cup Y_j)\\
&=\sum_{i=1}^2 \sum_{j=1}^2
f(Z_{i,j})+f(\bar{Z_{i,j}})\\
&\geq 4(f(Y_1)+f(Y_2))
\end{align*}</span></p>
<p>Which shows <span class="math inline">f(X_1)+f(X_2)\geq
f(Y_1)+f(Y_2)</span>.</p>
<p>Otherwise, if some <span class="math inline">Z_{i,j}</span> is empty,
then we have <span class="math inline">(X_1,X_2)=(Y_1,Y_2)\in
\mathcal{F}</span>.</p>
</div>
<p>In particular, <span class="math inline">\lambda_2(d)\leq
2^{d+1}</span>.</p>
<div class="theorem-environment Conjecture" data-index="3"
type="Conjecture">
<span class="theorem-header"><span class="type">Conjecture</span><span
class="index">3</span></span>
<p><span class="math inline">\lambda_k(d) = O(k^d)</span>.</p>
</div>
</div>
<div class="hide-on-print">
<div class="info">Posted by <a href="https://chaoxu.prof">Chao Xu</a> on <time datetime="2022-01-30">2022-01-30</time>. </div>
<div class="info">Tags: Conjectures, computational experiments, submodular, partition.</div>
</div>]]></description>
<pubDate>Sun, 30 Jan 2022 00:00:00 UT</pubDate>
<guid>https://chaoxu.prof/posts/2022-01-30-test-conjectures-on-k-partitions.html</guid>
<dc:creator>Chao Xu</dc:creator>
</item>
<item>
<title>Yotta Savings and covering designs</title>
<link>https://chaoxu.prof/posts/2020-07-11-yotta-savings-and-covering-designs.html</link>
<description><![CDATA[<br />
<div>
<p><a href="https://www.withyotta.com/">Yotta Savings</a> is a FDIC
insured savings account that gives you “interest” in another way. It has
a 0.2% APR. It is much better than the APR of many banks, but much worse
than actual high APR savings accounts, e.g. Marcus, Ally. However, for
each $25, Yotta gives you a ticket weekly to their drawing, which you
would have some chance of winning a big amount of money. This is very
close to <a href="https://en.wikipedia.org/wiki/Premium_Bond">Premium
Bond</a> in the UK. What if one wants to actually figure out the actual
APR one can hope for. People at <a
href="https://news.ycombinator.com/item?id=23780062">Hacker News</a>
already did a lot of analysis, and in expectation you are looking at
more than 3% APR. If you are going to sign up, please use my referral
code <code>CHAO1</code> and we both get 100 tickets.</p>
<p>What about worst case guaranteed return? For example, if you believe
Yotta is out to get you and draw numbers to minimize what you are going
to earn (paranoid? yep). The entire expectation calculation means
nothing to you. What is the guaranteed return if you save a large sum of
money in there. Note each person can have at most 10000 tickets, so a
maximum investment of $250,000.</p>
<p>Recall <span class="math inline">[n]=\set{1,\ldots,n}</span>. Each
ticket allows you to pick a size <span class="math inline">6</span>
subset <span class="math inline">X</span> of <span
class="math inline">[70]</span>, and a single element <span
class="math inline">y</span> from <span
class="math inline">[25]</span>. At the end of the week, Yotta also
would have drawn a <span class="math inline">6</span> element subset
<span class="math inline">A</span> of <span
class="math inline">[70]</span>, and a single element <span
class="math inline">b</span> from <span class="math inline">[25]</span>.
Let a combination <span class="math inline">(X,y)</span> be called a
ticket, and <span class="math inline">T</span> is the space of all
tickets. A draw is also a ticket.</p>
<p>To actually find the optimum, you can write a huge optimization
problem. Assume we have a valuation function <span
class="math inline">f:T\times T\to \R</span>, where <span
class="math inline">f(u,v)</span> is the winning for given ticket <span
class="math inline">u</span> and draw <span
class="math inline">v</span>. For <span class="math inline">n</span>
ticket, the optimum guaranteed return is <span
class="math inline">\max_{F\in T^n} \min_{v\in T} \sum_{u\in F}
f(u,v)</span>. This problem is too large to solve exactly. Let’s try
some existing tools to get a quick lower bound.</p>
<p>There are many ways to win, but we only need to concentrate on the
following, the rest are not helpful with meeting the bottom line. Let
<span class="math inline">u=(X,y), v=(A,b)</span>.</p>
<ul>
<li>If <span class="math inline">b=y</span> and <span
class="math inline">|X\cap Y|=0</span>, then <span
class="math inline">f(u,v)=0.1</span>.</li>
<li>If <span class="math inline">b=y</span> and <span
class="math inline">|X\cap Y|=1</span>, then <span
class="math inline">f(u,v)=0.2</span>.</li>
<li>If <span class="math inline">b=y</span> and <span
class="math inline">|X\cap Y|=2</span>, then <span
class="math inline">f(u,v)=0.8</span>.</li>
<li>If <span class="math inline">b=y</span> and <span
class="math inline">|X\cap Y|=3</span>, then <span
class="math inline">f(u,v)=10</span>.</li>
<li>If <span class="math inline">b\neq y</span> and <span
class="math inline">|X\cap Y|=3</span>, then <span
class="math inline">f(u,v)=0.4</span>.</li>
</ul>
<p>It is easy to see just by looking at <span
class="math inline">y</span>, if you have 25 tickets, you can win at
least $0.1 weekly by picking each possible <span
class="math inline">y</span>. This gives you already a 0.83% APR by
simply saving $625.</p>
<p>How about <span class="math inline">X</span>? Let <span
class="math inline">a_0=.1, a_1=.2, a_2=.8</span>. If we can find a
small family of <span class="math inline">6</span> element subsets, such
that every set of size <span class="math inline">i</span> are covered,
then we can earn at least <span class="math inline">a_i</span>.</p>
<div class="theorem-environment Definition" data-index="1"
type="Definition">
<span class="theorem-header"><span class="type">Definition</span><span
class="index">1</span></span>
<p>A <span class="math inline">(v,k,t)</span><em>-covering design</em>
is family of <span class="math inline">k</span>-element subsets of <span
class="math inline">[v]</span>, such that every <span
class="math inline">t</span>-element subset of <span
class="math inline">[v]</span> is covered. The <span
class="math inline">k</span>-element subsets are called
<em>blocks</em>.</p>
</div>
<p>So we are looking for a <span class="math inline">(70,6,k)</span>
design of small size. <a href="https://www.dmgordon.org">Dan Gordon</a>
has curated a good <a href="https://www.dmgordon.org/cover/">collection
of covering designs</a>. The smallest known covering designs for each
<span class="math inline">k</span> are <span class="math inline">12,
172, 3258</span>. The last one is too large to be useful, but gives an
indication on the size we are looking at. In fact, we can ask for
stronger property.</p>
<div class="theorem-environment Definition" data-index="2"
type="Definition">
<span class="theorem-header"><span class="type">Definition</span><span
class="index">2</span></span>
<p>A <span class="math inline">n</span>-block <span
class="math inline">(v,k,t)</span>-design is called <em>nice</em>, if
for each <span class="math inline">t'\leq t</span> subset, it is
covered by at least <span class="math inline">\left\lfloor n{v\choose
k}/{v\choose t'} \right\rfloor</span> blocks.</p>
</div>
<p><a
href="https://ljcr.dmgordon.org/show_cover.php?v=70&k=6&t=2">The
<span class="math inline">(70,6,2)</span>-covering design by Jan de Heer
and Steve Muir</a> is a nice design.</p>
<p>At <span class="math inline">12\times 25=300</span> tickets, we can
guarantee a win of <span class="math inline">.2+11\times .1=1.3</span>
by creating 25 copies of the <span
class="math inline">(70,6,1)</span>-covering design. This is 0.9% APR if
you put in $7500.</p>
<p>Similarly, at <span class="math inline">172\times 25=4300</span>
tickets, one can guarantee at least a win of <span
class="math inline">.8</span> by creating 25 copies of the <span
class="math inline">(70,6,2)</span>-covering design. Due to it is also a
nice design, each element appears at least 14 times. So we are looking
at <span class="math inline">.8+13\times .2 + 158\times .1=19.2</span>,
which is a 0.93% APR for a investment of $107,500. </p>
<p>This is only a lower bound to the optimization problem, so maybe even
more APR can be obtained through better design. Together with the 0.2%
interest you earn a guaranteed 1.13% APR for having a lot of money.</p>
<p>We can do more if certain design exists. If we can find a <span
class="math inline">(70,6,3)</span>-covering design of <span
class="math inline">25 \times n</span> blocks that can be partitioned
into 25 nice <span class="math inline">(70,6,2)</span>-covering designs,
then we can do more. In theory, a nice <span
class="math inline">(70,6,2)</span>-covering design has a lower bound of
164 blocks. So taking <span class="math inline">n=164</span>, we are
looking at:</p>
<ol type="1">
<li>1 ticket of .8 winning,</li>
<li>1 ticket of .4 winning,</li>
<li>13 tickets of .2 winning,</li>
<li>150 tickets of .1 winning.</li>
</ol>
<p>So you get 0.96% APR for $102,500 in savings. My guess is there is a
potential of finding a spot of 1% APR by solving the optimization
problem exactly.</p>
<p>Input the entire design into the Yotta system every week is <em>a
crazy amount</em> of work, and clearly not worth the time. It is better
to be not paranoid and let the algorithm give you random numbers. Or
hope one day Yotta allows one to import a list of numbers.</p>
</div>
<div class="hide-on-print">
<div class="info">Posted by <a href="https://chaoxu.prof">Chao Xu</a> on <time datetime="2020-07-11">2020-07-11</time>. </div>
<div class="info">Tags: banking, probability.</div>
</div>]]></description>
<pubDate>Sat, 11 Jul 2020 00:00:00 UT</pubDate>
<guid>https://chaoxu.prof/posts/2020-07-11-yotta-savings-and-covering-designs.html</guid>
<dc:creator>Chao Xu</dc:creator>
</item>
<item>
<title>The value of a gift card in beancount</title>
<link>https://chaoxu.prof/posts/2020-06-05-the-value-of-a-gift-card.html</link>
<description><![CDATA[<br />
<div>
<p>I’m using beancount to do accounting. In beancount, you are allowed
to have commodities. One can view gift card as commodity, but also as a
currency.</p>
<p>Say, I bought an $100 Amazon gift card for $90, I would write
<code>100 AMAZON {0.9 USD}</code>, which means 100 units of Amazon with
unit cost $0.9. Later on, I used $50 Amazon gift card, then I can write
<code>50 AMAZON {0.9 USD} @ 1 USD</code>. Here <code>@ 1 USD</code>
means the price is $1, and <code>{0.9 USD}</code> tells the program to
look for 50 unit of Amazon with unit cost $0.9.</p>
<p>Of course, often one do not care which amazon gift card was used. So
beancount allows one to write <code>50 AMAZON {} @ 1 USD</code>, and
beancount automatically finds 50 units of amazon gift card through some
predefined rules (For example, first in first out). I sold the remaining
$50 Amazon gift card for $47.5. So I would write
<code>50 AMAZON {} @ 0.95 USD</code>.</p>
<p>During the event where the gift card is used, we can record the
profit by subtract cost from price. So just like stocks, we can obtain
realized profit and loses. This is great and all, except a simple
operations is impossible in beancount. It is impossible to move these
amazon gift card to another account without losing all the cost
information. This actually happens in real life. I might buy amazon gift
card, but load gift card to different accounts. In beancount, I have no
way of relaying this info.</p>
<p>Here is a hack. Having a proxy price.</p>
<p>The idea is amazon gift card should always have a value of $x.
Whenever you buy amazon gift card for $y per unit, you record a
profit/loss of $x - $y. Whenever you use your amazon gift card at value
$z per unit, you record a profit/loss of $z-$x.</p>
<p>Here you can set <span class="math inline">x</span> to be anything.
But for simplifying calculation, 1 is sufficient. Setting it to <span
class="math inline">1</span> is the best option since it simplifies the
computation.</p>
</div>
<div class="hide-on-print">
<div class="info">Posted by <a href="https://chaoxu.prof">Chao Xu</a> on <time datetime="2020-06-05">2020-06-05</time>. </div>
<div class="info">Tags: accounting.</div>
</div>]]></description>
<pubDate>Fri, 05 Jun 2020 00:00:00 UT</pubDate>
<guid>https://chaoxu.prof/posts/2020-06-05-the-value-of-a-gift-card.html</guid>
<dc:creator>Chao Xu</dc:creator>
</item>
<item>
<title>Maximize Cash Back</title>
<link>https://chaoxu.prof/posts/2020-04-10-maximize-cash-back.html</link>
<description><![CDATA[<br />
<div>
<p>Credit cards often offers rewards for purchases. For example, a card
that gives 5% cash back for grocery stores. Also, credit cards often can
be used to buy gift cards for specific stores.</p>
<p>For example, one can use Chase Ink Cash (CIC) and go to Staples and
buy gift card for Amazon for effectively 7.5% off Amazon (I value UR at
1.5 cents each).</p>
<p>However, there is usually a limit. CIC caps the reward spending to
$25000. Still, it would translate to $1875 of savings. Anything
afterwards only earns 1.5%.</p>
<p>I often do large purchases at some retailers, and I have huge number
of credit cards. It make sense for me to optimize spending. I use
historical data to estimate amount of spending at retailers, and come up
with a nice optimization problem.</p>
<p>There are <span class="math inline">k</span> stores, we want to
purchase an item of value <span class="math inline">d_i</span> in store
<span class="math inline">i</span>, and want spend the least amount of
money.</p>
<p>Stores can also sell gift cards for specific stores (some gives cash
back), and one can use the gift card to buy item from other stores. For
simplicity, we assume gift card for a particular store can be used to
buy gift cards (so it work just like cash). <span
class="math inline">g_{i,j}</span> is the cash back one obtain for
buying <span class="math inline">1</span> unit of gift card for store
<span class="math inline">j</span> from store <span
class="math inline">i</span>.</p>
<p>We also have <span class="math inline">n</span> credit cards. Each
credit card have an upper limit <span class="math inline">u_i</span>.
For credit card <span class="math inline">i</span>, it gives cash back
of <span class="math inline">c_{i,j}</span> per unit on store <span
class="math inline">j</span> if total spend of the credit card is no
larger than <span class="math inline">u_i</span>, otherwise it give cash
back <span class="math inline">c'_{i,j}</span>.</p>
<p>This is a min-cost flow problem. Indeed, let’s build the graph. Edges
default to have infinite capacity and 0 cost. Node default to have 0
demand.</p>
<p>For credit card <span class="math inline">i</span>, we create <span
class="math inline">3</span> nodes, <span class="math inline">a_i,
b_i^+, b_i^-</span>. There is is edge <span
class="math inline">(a_i,b_i^+)</span> with capacity <span
class="math inline">u_i</span>, there is an edge <span
class="math inline">(a_i,b_i^-)</span> with infinite capacity. For each
store, we create a node <span class="math inline">s_i</span>, and there
are edges <span class="math inline">(s_i,s_j)</span> with cost <span
class="math inline">-g_{i,j}</span>. The demand on <span
class="math inline">s_i</span> is <span class="math inline">d_i</span>.
For each credit card <span class="math inline">i</span> and store <span
class="math inline">j</span>, there is an edge <span
class="math inline">(b_i^+,s_i)</span> with cost <span
class="math inline">-c_{i,j}</span>, and an edge <span
class="math inline">(b_i^-,s_i)</span> with cost <span
class="math inline">-c'_{i,j}</span>. Finally add a source node
connect to each <span class="math inline">a_i</span>. Source node has
demand <span class="math inline">-\sum_{i} d_i</span>.</p>
<p>Some stores does not allow gift card to be used to purchase more gift
cards. Indeed, this was not the case a long time ago, until people
abused the price difference to generate infinite money.</p>
<p>This can be fixed by duplicate this store into a cash version, so
<span class="math inline">s_{c,i}</span> and gift card version <span
class="math inline">s_{g,i}</span>. We redirect edges to the correct
ones. Namely credit card goes to <span
class="math inline">s_{c,i}</span> and edges from stores goes to <span
class="math inline">s_{g,i}</span>. Also, create edges <span
class="math inline">(s_{c,i},s_i)</span> and <span
class="math inline">(s_{g,i},s_i)</span>.</p>
<p>We are only thinking about cash backs, but there could also be
discounts. It is fairly rare to see discounts, especially for companies
that sell other gift cards. The difference between cash back and
discount is when you obtain your money back. Cash back you get your
money back after the transaction. For discounts, you pay less.</p>
<p>Adding discounts <em>fundamentally</em> changes the problem. In the
min-cost flow formulation, the cost keeps track of cash backs, and
demand is keep track of how much money is spent. This does not work when
there are discounts.</p>
<p>Instead, we have to venture into generalized flow. There is an extra
factor of <span class="math inline">\gamma</span> on each edge, such
that the flow going in is <span class="math inline">1</span>, then the
flow going out is <span class="math inline">\gamma</span>.</p>
<p>Anyway, one thing I learned is using credit cards to buy gift cards
from grocery store (Amex Gold) or staples (using Chase Ink Cash) are
amazing. Netting you large discounts on many vendors you usually cannot
get a huge discount for.</p>
<p>Some more interesting things to add. Buying gift cards from grocery
stores can obtain fuel points. Fuel points translate to discounts on
gas. However, there is only so much gas one can use (unless you selling
it to others). So one can view grocery stores as having a higher
discount up to a certain limit. This can also be modeled in the
graph.</p>
</div>
<div class="hide-on-print">
<div class="info">Posted by <a href="https://chaoxu.prof">Chao Xu</a> on <time datetime="2020-04-10">2020-04-10</time>. </div>
<div class="info">Tags: math, life.</div>
</div>]]></description>
<pubDate>Fri, 10 Apr 2020 00:00:00 UT</pubDate>
<guid>https://chaoxu.prof/posts/2020-04-10-maximize-cash-back.html</guid>
<dc:creator>Chao Xu</dc:creator>
</item>
<item>
<title>Bounds on number of cuts</title>
<link>https://chaoxu.prof/posts/2019-11-27-bounds-on-cuts.html</link>
<description><![CDATA[<br />
<div>
<p>Consider we have an undirected graph <span
class="math inline">G=(V,E)</span> of <span class="math inline">n</span>
vertices, and there are <em>positive</em> cost <span
class="math inline">c:E\to \R^+</span> on the edges. We define <span
class="math inline">c(F)=\sum_{e\in F}c(e)</span>, to be the cost
(value) of <span class="math inline">F\subset E</span>.</p>
<p>Let <span class="math inline">\mathcal{P}</span> be a partition of
<span class="math inline">V</span> where each partition class is
non-empty. We define <span class="math inline">E(\mathcal{P})</span> to
be the set of edges with end points in two different partition classes.
A set of edges <span class="math inline">F</span> is called a <em><span
class="math inline">k</span>-cut</em>, if <span
class="math inline">F=E(\mathcal{P})</span> for some <span
class="math inline">\mathcal{P}</span> such that <span
class="math inline">|\mathcal{P}|\geq k</span>.</p>
<p>We stress that by this definition, a <span
class="math inline">k</span>-cut is always a <span
class="math inline">j</span>-cut for <span class="math inline">j\leq
k</span>. A <em>cut</em> is defined as a <span
class="math inline">2</span>-cut. A min-<span
class="math inline">k</span>-cut is a <span
class="math inline">k</span>-cut of minimum value (cost). We let <span
class="math inline">\lambda_k</span> to denote the value of the
min-<span class="math inline">k</span>-cut. A <span
class="math inline">\alpha</span>-approximate <span
class="math inline">k</span>-cut is a cut of value at most <span
class="math inline">\alpha\lambda_k</span>.</p>
<p>It is well known that the number of min-cuts in a graph is <span
class="math inline">{n\choose 2}</span>. <span class="citation"
data-cites="KargerS96">[<a href="#ref-KargerS96"
role="doc-biblioref">1</a>]</span></p>
<p>Unless specifically stated, we assume <span
class="math inline">k</span> is a fixed integer at least <span
class="math inline">2</span>, and <span
class="math inline">\alpha</span> is a fixed value at least <span
class="math inline">1</span>.</p>
<p>We can express the state alternatively.</p>
<div class="theorem-environment Theorem" data-index="1" type="Theorem">
<span class="theorem-header"><span class="type">Theorem</span><span
class="index">1</span></span>
<p>The number of cuts <span class="math inline">F</span> such that <span
class="math inline">c(F)\leq \lambda_2</span> is <span
class="math inline">O(n^2)</span>.</p>
</div>
<h1 data-number="1" id="bounds-related-to-approximate-min-cuts"><span
class="header-section-number">1</span> Bounds related to approximate
min-cuts</h1>
<p>What happens when we want to know about the number of cuts with value
at most <span class="math inline">\alpha \lambda_2</span>?</p>
<p>By simply analyzing Karger’s algorithm, one can obtain the
following.</p>
<div class="theorem-environment Theorem" data-index="2" type="Theorem">
<span class="theorem-header"><span class="type">Theorem</span><span
class="index">2</span></span>
<p>The number of cuts <span class="math inline">F</span> such that <span
class="math inline">c(F)\leq \alpha \lambda_2</span> is <span
class="math inline">O(n^{2\alpha})</span>.</p>
</div>
<p>With more careful analysis using tree packing, Karger added a floor
function to the exponent <span class="citation"
data-cites="Karger00">[<a href="#ref-Karger00"
role="doc-biblioref">2</a>]</span>.</p>
<div class="theorem-environment Theorem" data-index="3" type="Theorem">
<span class="theorem-header"><span class="type">Theorem</span><span
class="index">3</span></span>
<p>The number of cuts <span class="math inline">F</span> such that <span
class="math inline">c(F)\leq \alpha \lambda_2</span> is <span
class="math inline">O(n^{\floor{2\alpha}})</span>.</p>
</div>
<p>Indeed, we do have a lower bound of <span class="math inline">{n
\choose \floor{2\alpha}}</span>. Just consider an unweighted cycle,
where min-cut has value <span class="math inline">2</span>. We can pick
any <span class="math inline">\floor{2\alpha}</span> edges, which forms
a cut of value at most <span class="math inline">\alpha</span> times the
min-cut.</p>
<p>Note that we require <span class="math inline">\alpha</span> to a
fixed value. This is because there is a dependency on <span
class="math inline">\alpha</span> hidden inside the big <span
class="math inline">O</span>. Our lower bound is absolute and does not
depending on <span class="math inline">\alpha</span> being fixed. It
would be interesting to obtain a matching upper bound for arbitrary
<span class="math inline">\alpha</span>. Hence we can consider the
problem with <strong>strict inequality</strong>.</p>
<div id="approxcutconjecture" class="theorem-environment Conjecture"
data-index="4" type="Conjecture">
<span class="theorem-header"><span class="type">Conjecture</span><span
class="index">4</span></span>
<p>The number of cuts <span class="math inline">F</span> such that <span
class="math inline">c(F)< \alpha \lambda_2</span> is <span
class="math inline">O(n^{\ceil{2\alpha}-1})</span>.</p>
</div>
<p>Henzinger and Williamson showed the conjecture true for all <span
class="math inline">\alpha\leq \frac{3}{2}</span> <span class="citation"
data-cites="HenzingerW96">[<a href="#ref-HenzingerW96"
role="doc-biblioref">3</a>]</span>.</p>
<h1 data-number="2"
id="bounds-related-to-alpha-approximate-min-k-cut"><span
class="header-section-number">2</span> Bounds related to <span
class="math inline">\alpha</span>-approximate min-<span
class="math inline">k</span>-cut</h1>
<p>There are multiple ways to obtain the following theorem. For example,
directly generalize Karger’s argument for cut counting.</p>
<div class="theorem-environment Theorem" data-index="5" type="Theorem">
<span class="theorem-header"><span class="type">Theorem</span><span
class="index">5</span></span>
<p>The number of cuts <span class="math inline">F</span> such that <span
class="math inline">c(F)\leq \lambda_k</span> is <span
class="math inline">O(n^{2(k-1)})</span>.</p>
</div>
<p>One can show a lower bounds of the form <span
class="math inline">{n\choose k}</span>. Again, a cycle would be an
example of such lower bound. The min-<span
class="math inline">k</span>-cut has value <span
class="math inline">k</span>, and can be obtained by picking any <span
class="math inline">k</span> edges. Recently, the upper bound has been
closed (up to constant factor if <span class="math inline">k</span> is
fixed) <span class="citation" data-cites="GuptaHLL21">[<a
href="#ref-GuptaHLL21" role="doc-biblioref">4</a>]</span>.</p>
<div class="theorem-environment Theorem" data-index="6" type="Theorem">
<span class="theorem-header"><span class="type">Theorem</span><span
class="index">6</span></span>
<p>The number of cuts <span class="math inline">F</span> such that <span
class="math inline">c(F)\leq \lambda_k</span> is <span
class="math inline">n^k k^{O(k^2)}</span>. Namely <span
class="math inline">O(n^k)</span> for fixed <span
class="math inline">k</span>.</p>
</div>
<p>In fact, they proved it by prorving the stronger theorem on <span
class="math inline">\alpha</span>-approximate min-<span
class="math inline">k</span>-cuts.</p>
<div class="theorem-environment Theorem" data-index="7" type="Theorem">
<span class="theorem-header"><span class="type">Theorem</span><span
class="index">7</span></span>
<p>The number of cuts <span class="math inline">F</span> such that <span
class="math inline">c(F)\leq \alpha \lambda_k</span> is <span
class="math inline">n^{\alpha k} k^{O(\alpha k^2)}</span>. Namely <span
class="math inline">O(n^{\alpha k})</span> for fixed <span
class="math inline">k</span>.</p>
</div>
<p>Unlike <span class="math inline">\alpha</span>-approximate min-cuts,
there is no floor function in the exponent. Hence a natural conjecture
would be.</p>
<div class="theorem-environment Conjecture" data-index="8"
type="Conjecture">
<span class="theorem-header"><span class="type">Conjecture</span><span
class="index">8</span></span>
<p>The number of cuts <span class="math inline">F</span> such that <span
class="math inline">c(F)\leq \alpha \lambda_k</span> is <span
class="math inline">O(n^{\lfloor \alpha k\rfloor})</span>.</p>
</div>
<h1 data-number="3" id="bounds-on-approximate-parametric-cuts"><span
class="header-section-number">3</span> Bounds on (approximate)
parametric cuts</h1>
<p>Consider we have <span class="math inline">d</span> weight functions
<span class="math inline">c_1,\ldots,c_d:E\to \R_{\geq 0}</span>. Define
<span class="math inline">c^\mu(e) = \sum_{i=1}^d \mu_i c_i(e)</span>
for <span class="math inline">\mu\in \R_{\geq 0}^d</span>. We are
interested in knowing about cuts <span class="math inline">F</span> such
that <span class="math inline">c^\mu(F)</span> is bounded by <span
class="math inline">\alpha \lambda_{\mu,k}</span>, where <span
class="math inline">\lambda_{\mu,k}</span> is the min-<span
class="math inline">k</span>-cut value when the cost function is <span
class="math inline">c^\mu</span>.</p>
<p>Karger showed the following <span class="citation"
data-cites="Karger16">[<a href="#ref-Karger16"
role="doc-biblioref">5</a>]</span>.</p>
<div class="theorem-environment Theorem" data-index="9" type="Theorem">
<span class="theorem-header"><span class="type">Theorem</span><span
class="index">9</span></span>
<p>The number of cuts <span class="math inline">F</span> such that <span
class="math inline">c^\mu(F)\leq \lambda_{\mu,2}</span> for some <span
class="math inline">\mu\in \R_{\geq 0}^d</span> is <span
class="math inline">O(n^{d+1})</span>.</p>
</div>
<p>A even more general theorem follows, allowing <span
class="math inline">\alpha</span>-approximate <span
class="math inline">k</span>-cuts.</p>
<div class="theorem-environment Theorem" data-index="10" type="Theorem">
<span class="theorem-header"><span class="type">Theorem</span><span
class="index">10</span></span>
<p>The number of cuts <span class="math inline">F</span> such that <span
class="math inline">c^\mu(F)\leq \alpha \lambda_{\mu,k}</span> for some
<span class="math inline">\mu\in \R_{\geq 0}^d</span> is <span
class="math inline">O(n^{2\alpha(k-1)+d-1})</span>.</p>
</div>
<p>Of course, knowing the current result for number of <span
class="math inline">\alpha</span>-approximate <span
class="math inline">k</span>-cuts, we would conjecture the following for
parametric cuts.</p>
<div class="theorem-environment Conjecture" data-index="11"
type="Conjecture">
<span class="theorem-header"><span class="type">Conjecture</span><span
class="index">11</span></span>
<p>The number of cuts <span class="math inline">F</span> such that <span
class="math inline">c^\mu(F) \leq \alpha \lambda_{\mu,k}</span> for
<span class="math inline">\mu\in \R_{\geq 0}^d</span> is <span
class="math inline">O(n^{\alpha k+d-1})</span>.</p>
</div>
<p>Note, we might relax the requirement that all <span
class="math inline">c_i</span> and <span class="math inline">\mu</span>