Palindrom Problemi ve Bit

August 1, 2020

Arşivden çıkan bir başka probleme bakalım.

Soru metnini yine tam hatırlayamıyorum ancak aşağıdakine benzerdi.

Oyun-sever alex bir string oluşturuyor.

Önce alfebenin ilk harfini yazıyor. Sıradaki harfi yazdıktan sonra o harfe kadar yazdıklarının palindromunu metnin sonuna ekliyor.

Alex a harfini yazdı ve sıradaki harfi yazdıktan sonra önceki kısmın palindromunu ekledi.

aba

İşlemi tekrarlayalım.

abacaba
abacabadabacaba
abacabadabacabadabacabadabacaba

bu işlemi alfabedeki tüm harfler bitinceye kadar tekrarlıyor.

Bizden istenen input olarak verilen bir positif tamsayı n için metnin n. elemanını bulmak. 1 <= N < 2^27

Çözüm

Problemi ağaç şeklinde ifade edersek root eleman z karakteri olur. z karakteri 2 tane y node u içerir. her bir y node u 2 şer tane x içerir. Bu şekilde leaf nodeların hepsi a karakteri olur.

Eğer dikkatlice incelersek

Problemimiz şuna dönüştü. Input değeri binary olarak ifade edip right most set bitin karşılık geldiği indexi bulduğumuzda, alfabedeki indexinci karakter bize metindeki n. karakteri verir.

Böylelikle problemi O(Bit Count) zamanda çözebildik. Bit işlemleri genellikle hardware seviyesinde desteklendiği bunları yapabilecek cpu instructionlara sahip oluyor. Bunu bildiğimize göre O(1) zamanda çözülmüştür diyebiliriz.

1
2
3
4
5
6
7
#include <bits/stdc++.h>
using namespace std;

int main(){
    int N = 350;
    printf("%c\n", (char)(96 + ffs(N));
}

hidden

AI: Where in the Loop Should Humans Go?

This is a re-publishing of a blog post I originally wrote for work, but wanted on my own blog as well.AI is everywhere, and its impressive claims are leading to rapid adoption. At this stage, I’d qualify it as charismatic technology—someth…

via Ferd.ca

More Good Programming Quotes, Part 6

Here are more good programming quotes I have found since my last post. Programming “Configuration is coding in a poorly designed programming language without tests, version control, or documentation.”Gregor Hohpe “It’s the developers misunderstanding, not…

via Henrik Warne's blog

HOWTO: Change your behavior

In theory, behavior change should be easy. At first glance, it seems like you control your behavior. So, if you desire different behavior, why doesn’t your behavior change as instantly as your desire to change it? In short, lasting change of habitual behavio…

via Matt Might's blog