22 Ağustos 2011 12:24 tarihinde Onur AKTAŞ <[email protected]> yazdı:

> Merhaba;
> Elimde şöyle bir text var,
>
> *a
> b
> c*
> a
> d
> e
> g
> h
> j
> *a
> b
> c*
> *h
> n*
> j
> r
> t
> b
> *h
> n*
>
>
> h ve n satırlar alt atla iki kere gelmiş(hn-2)
> a b c satırları alt alta 3 kere gelmiş(abc-3)
>
> Bu şekilde bir text içinde en çok tekrar eden satır kümelerini nasıl
> bulabilirim ?
>
>
> --
> Onur AKTAŞ
> Kişisel, http://www.onuraktas.net
> Blog, http://www.alonon.net
>
> _______________________________________________
> Linux-programlama mailing list
> [email protected]
> https://liste.linux.org.tr/mailman/listinfo/linux-programlama
> Liste kurallari: http://liste.linux.org.tr/kurallar.php
>
>
En güzel yöntem hash'dir.
### Açıklama

En başta listenin(sizin text dosyasındaki harfleri liste yaptık sayıyoruz)
içinde geziyoruz.
Bu listemiz için ilk karakterden başlayarak 5 uzunlugunda olana kadar
alıyoruz
list[0:1]
list[0:2]
list[0:3]
... gibi

sonrasında alınan her karakter kümesi için
"uniq listemizde var mı ?" diye soruyoruz
var ise 1 arttır(+1)
yok ise 1 ile ilklendir.

### Kod

#!/usr/bin/python
#-*- coding:utf-8 -*-
import string

def uniq_find(request, min, max):
    uniqs = {}
    length = len(request)
    for i in range(length):
        for j in range(min, max):
            find = string.join(request[i:i + j], "")
            if length == i + j: return uniqs
            if find in uniqs.keys(): uniqs[find] += 1
            else: uniqs[find] = 1

request = ['a', 'b', 'c', 'd', 'k', 'l', 'm', 'a', 'b', 'c', 'k', 'a', 'b',
'c', 'd', 'k']
print uniq_find(request, 2, 5)


-- 
gdemir
_______________________________________________
Linux-programlama mailing list
[email protected]
https://liste.linux.org.tr/mailman/listinfo/linux-programlama
Liste kurallari: http://liste.linux.org.tr/kurallar.php

Cevap