Rumah > hujung hadapan web > tutorial js > Cara Menggunakan Percubaan Terbalik untuk Pengesanan Domain E-mel Pakai Pantas

Cara Menggunakan Percubaan Terbalik untuk Pengesanan Domain E-mel Pakai Pantas

DDD
Lepaskan: 2024-12-14 03:42:09
asal
591 orang telah melayarinya

How to Use a Reverse Trie for Fast Disposable Email Domain Detection

Ketahui cara menggunakan Cubaan terbalik untuk mengesan domain e-mel pakai buang dengan cekap. Optimumkan carian domain anda dengan penyelesaian berskala yang cekap memori yang disesuaikan untuk hasil yang pantas dan tepat.

  • Baca artikel di laman web saya
  • Gunakan Pengesan Domain E-mel Pakai Percuma

E-mel pakai buang boleh menyebabkan isu seperti pendaftaran palsu dan spam. Pengguna mengambil alamat daripada salah satu daripada ribuan penjana e-mel sementara dan menyerahkannya. Malah kambing regex e-mel tidak dapat menyelamatkan anda di sini.

Secara peribadi, saya mendapati mempunyai senarai besar semua domain e-mel pakai buang ialah penyelesaian yang paling mudah lagi berkesan. Tetapi sebelum anda menyusun senarai itu dan memulakan gelung untuk ... untuk menyemaknya, fikirkan kerumitan O(n)!

Cara terbaik untuk mengenal pasti mereka adalah dengan menggunakan Ujian Terbalik, struktur data yang cekap untuk carian pantas.

Apakah Percubaan Terbalik?

Pertama, mari kita fahami apa itu Trie. Ia ialah struktur data dengan rentetan:

  • dicincang, char setiap char
  • dipasang dalam struktur pokok

contohnya, jika kita memberi makan boa, bro, brie, ia akan mengumpulkannya menggunakan Peta sebagai:

b
 ├── o ── a
 └── r ── o  
     └─── i ── e
Salin selepas log masuk

Pendekatan ini membolehkan carian terus tanpa melayari keseluruhan senarai. Setiap watak membimbing carian dengan lebih mendalam.

Ia menukar memori untuk kecekapan. Masa yang diperlukan untuk mencari rentetan tidak bergantung pada saiz senarai, tetapi pada panjang rentetan!

Satu Ujian Terbalik menyimpan rentetan dalam susunan terbalik, sesuai untuk domain:

  • mailinator.com menjadi moc.rotanliam
  • trashmail.com menjadi moc.liambhsart

Nota tentang Implementatin Ini

Dengan membalikkan domain, carian bermula pada TLD (mis., .com), yang dikongsi merentas banyak domain. Untuk mengoptimumkan lagi, ia menyimpan TLD sebagai kunci tunggal (com), dan bukannya membahagikannya kepada aksara. Selebihnya domain mengikut struktur Trie standard.

Pelaksanaan Reverse Trie Domains

Memandangkan ini ialah struktur pokok, setiap nod akan merujuk kepada anak-anaknya:

type TrieNode = Map<string, TrieNode>;
Salin selepas log masuk

Pertama, fungsi utiliti untuk memisahkan TLD daripada domain yang lain:

private splitTLDFromRest(input: string) {
    const dot = input.lastIndexOf('.');
    const TLD = input.substring(dot + 1);
    const rest = input.substring(0, dot);
    return [TLD, rest];
}
Salin selepas log masuk

Menggunakan lastIndexOf memastikan subdomain seperti foo.bar.baz.com dikendalikan dengan betul.

Seterusnya, pembina akan memasang Trie:

export class ReverseTrieDomains {
    private root: TrieNode = new Map();

    // ...

    constructor(...domains: string[]) {
        for (const domain of domains) {
            // For "didof.dev"
            const [TLD, rest] = this.splitTLDFromRest(domain);
            // dev, didof

            // Keep the refence to the TLD node for final set
            let node = this.root.get(TLD);
            if (!node) node = new Map();

            // Start from TLD node, walk along the string in reverse
            let currentNode: TrieNode = node;
            for (let i = rest.length - 1; i >= 0; i--) {
                const char = rest[i];
                let childNode = currentNode.get(char);
                if (!childNode) {
                    childNode = new Map();
                    currentNode.set(char, childNode);
                }
                currentNode = childNode;
            }

            this.root.set(TLD, node);
        }
    }
}
Salin selepas log masuk

Untuk menyemak sama ada domain boleh guna, lewati Trie:

export class ReverseTrieDomains {
    // ...

    public has(domain: string) {
        const [TLD, rest] = this.splitTLDFromRest(domain)

        const node = this.root.get(TLD)
        if (!node) return false

        let currentNode: TrieNode = node
        let isFullDomainFound = false
        for (let i = rest.length - 1; i >= 0; i--) {
            const char = rest[i]
            const childNode = currentNode.get(char)
            if (!childNode) return false
            currentNode = childNode
            if (i === 0) {
                isFullDomainFound = currentNode.size === 0;
            }
        }

        return isFullDomainFound
    }
}
Salin selepas log masuk

Kesimpulan

Menggunakan Trie terbalik menawarkan beberapa faedah:

  • Pencarian Pantas: Lintas aksara langkah demi langkah untuk mendapatkan hasil yang pantas.
  • Kecekapan Memori: Akhiran biasa seperti .com disimpan sekali sahaja.
  • Skalabiliti: Mengendalikan senarai domain yang besar dengan mudah.

Jika anda berurusan dengan e-mel pakai buang, ini ialah penyelesaian yang bijak dan berskala untuk dilaksanakan.

Atas ialah kandungan terperinci Cara Menggunakan Percubaan Terbalik untuk Pengesanan Domain E-mel Pakai Pantas. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan