|
|
A090702
|
|
a(n) is the minimal number k such that every binary word of length n can be transformed into a palindrome or an antipalindrome by deleting at most k letters.
|
|
2
|
|
|
0, 0, 1, 1, 1, 2, 2, 2, 3, 4, 4, 4, 5, 5, 5, 6, 7, 7, 7, 8, 8, 8, 9, 10, 10, 10, 11, 11, 11, 12, 13, 13, 13, 14, 14
(list;
graph;
refs;
listen;
history;
text;
internal format)
|
|
|
OFFSET
|
1,6
|
|
COMMENTS
|
A word l_0...l_n is called a palindrome if l_i = l_{n-i} for all i <= n.
A binary word l_0...l_n is called an antipalindrome if l_i <> l_{n-i} for all i <= n.
|
|
LINKS
|
|
|
FORMULA
|
a(n) >= floor((n+2*floor((n-3)/7))/3) for every n and for 2 <= n <= 35 equality holds.
|
|
PROG
|
(Python)
from itertools import product
from functools import lru_cache
def ispal(w): return all(w[i] == w[-1-i] for i in range(len(w)//2+1))
def isantipal(w): return all(w[i] != w[-1-i] for i in range(len(w)//2+1))
@lru_cache(maxsize=None)
def d(w): # min deletions needed to transform w into a pal or antipal
if ispal(w) or isantipal(w): return 0
ch = set(w[:i] + w[i+1:] for i in range(len(w)))
return 1 + min(d(wc) for wc in ch)
def a(n): return max(d("0"+"".join(w)) for w in product("01", repeat=n-1))
|
|
CROSSREFS
|
|
|
KEYWORD
|
nonn,base,more
|
|
AUTHOR
|
Sasha Ravsky (oravsky(AT)mail.ru), Jan 12 2004
|
|
EXTENSIONS
|
|
|
STATUS
|
approved
|
|
|
|