cari
Rumahpembangunan bahagian belakangtutorial phpBagaimana untuk menghasilkan gabungan permutasi yang tidak diulangi dan tidak bersebelahan dengan watak -watak yang sama berdasarkan set aksara dan bilangan lapisan yang diberikan?

Bagaimana untuk menghasilkan gabungan permutasi yang tidak diulangi dan tidak bersebelahan dengan watak -watak yang sama berdasarkan set aksara dan bilangan lapisan yang diberikan?

Set dan Lapisan Karakter: Menjana permutasi yang unik

Artikel ini meneroka cara menjana gabungan permutasi tanpa pendua dan tanpa aksara identik berturut -turut berdasarkan set aksara dan bilangan lapisan yang diberikan. Sebagai contoh, set aksara {a, b}, kombinasi permutasi tiga lapisan harus mengandungi AAB, ABA, ABB, BAA, BAB, BBA, dan lain-lain, tetapi bukan AAA, BBB dan watak berulang berturut-turut. Ini memerlukan algoritma untuk mengendalikan deduplikasi dan mengelakkan pertindihan aksara yang berterusan.

Cabaran teras adalah untuk merancang algoritma yang boleh menyesuaikan diri dengan set dan lapisan aksara yang berbeza dan menjana permutasi dengan cekap yang memenuhi kriteria. Artikel ini akan memperkenalkan dua kaedah: kaedah penggantian digital dan kaedah backtracking.

Kaedah 1: Kaedah Penggantian Digital

Kaedah ini merawat kombinasi permutasi sebagai nombor M-digit (M ialah saiz set aksara). Sebagai contoh, set aksara {a, b} sepadan dengan nombor binari. 00 mewakili AA, 01 mewakili AB, dan sebagainya. Dengan melintasi semua nombor M-angka dan menggantikan watak, anda boleh mendapatkan semua kombinasi yang mungkin. Untuk mengelakkan aksara yang sama, nombor m-digit tertentu perlu dikecualikan, seperti nombor di mana semua bit adalah sama.

Contoh kod python:

 def solve_digit (arr, m, allow_all_same = false):
    res, cur = [], [''] * m
    n = len (arr)
    all_same_num = 0
    untuk _ dalam julat (m):
        all_same_num = all_same_num * n 1
    untuk D dalam julat (n ** m):
        jika membenarkan_all_same atau d % all_same_num! = 0:
            untuk saya dalam julat (m -1, -1, -1):
                cur [i] = arr [d % n]
                d // = n
            res.Append (''. Sertai (CUR))
    Kembali res

cetak (solve_digit ('ab', 2)) # ['ab', 'ba']
cetak (solve_digit ('ab', 2, true)) # ['aa', 'ab', 'ba', 'bb']
cetak (solve_digit ('ab', 3)) # ['aab', 'aba', 'abb', 'baa', 'bab', 'bba']
cetak (solve_digit ('abc', 2)) # ['ab', 'ac', 'ba', 'bc', 'ca', 'cb']

Kaedah 2: Kaedah Backtracking

Backtrace adalah algoritma rekursif yang mendapati hasil dengan mencuba semua kombinasi yang mungkin. Tambah watak pada kombinasi semasa pada setiap langkah dan rekursif menghasilkan kombinasi yang lebih lama. Pada masa yang sama, adalah perlu untuk mengesan sama ada watak -watak terdahulu adalah sama untuk mengelakkan kombinasi yang tidak memenuhi syarat -syarat.

Contoh kod python:

 def solve_backtracking (arr, m, allow_all_same = false):
    res, cur = [], [''] * m

    def dfs (i, sama):
        jika i == m:
            Sekiranya tidak sama:
                res.Append (''. Sertai (CUR))
            Kembali
        untuk arr:
            cur [i] = a
            DFS (I 1, sama dan A == Cur [i - 1])

    untuk arr:
        cur [0] = a
        dfs (1, tidak membenarkan_all_same)

    Kembali res

cetak (solve_backtracking ('ab', 2)) # ['ab', 'ba']
cetak (solve_backtracking ('ab', 2, true)) # ['aa', 'ab', 'ba', 'bb']
cetak (solve_backtracking ('ab', 3)) # ['aab', 'aba', 'abb', 'baa', 'bab', 'bba']
cetak (solve_backtracking ('abc', 2)) # ['ab', 'ac', 'ba', 'bc', 'ca', 'cb']

Kedua -dua kaedah dapat menyelesaikan masalah ini. Kaedah penggantian digital lebih efisien dan kaedah mundur lebih mudah difahami. Kaedah yang mana untuk dipilih bergantung pada senario aplikasi tertentu dan keutamaan peribadi.

Atas ialah kandungan terperinci Bagaimana untuk menghasilkan gabungan permutasi yang tidak diulangi dan tidak bersebelahan dengan watak -watak yang sama berdasarkan set aksara dan bilangan lapisan yang diberikan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
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
Kontena Suntikan Ketergantungan PHP: Permulaan yang cepatKontena Suntikan Ketergantungan PHP: Permulaan yang cepatMay 13, 2025 am 12:11 AM

AphpdependencyInjectionContainerisatoLthatMatagesClassDependencies, EnhancingCodeModularity, Testability, andMaintainability.itactsascentralHubforcreatingandinjectingdependencies, sheReducingTightCouplingandeaseaseaseSunittesting.

Suntikan ketergantungan berbanding pencari perkhidmatan di phpSuntikan ketergantungan berbanding pencari perkhidmatan di phpMay 13, 2025 am 12:10 AM

Pilih DependencyInjection (DI) Untuk aplikasi besar, servicelocator sesuai untuk projek kecil atau prototaip. 1) DI meningkatkan kesesuaian dan modulariti kod melalui suntikan pembina. 2) ServiceLocator memperoleh perkhidmatan melalui pendaftaran pusat, yang mudah tetapi boleh menyebabkan peningkatan gandingan kod.

Strategi Pengoptimuman Prestasi PHP.Strategi Pengoptimuman Prestasi PHP.May 13, 2025 am 12:06 AM

Phpapplicationscanbeoptimizedforspeedandeficiencyby: 1) enablingopcacheinphp.ini, 2) menggunakan preparedSwithpdofordatabasequeries, 3) menggantikanloopswitharray_filterandarray_mapfordataprocessing, 4) configuringnginywinginywinyvinyvinginy

Pengesahan E -mel PHP: Memastikan e -mel dihantar dengan betulPengesahan E -mel PHP: Memastikan e -mel dihantar dengan betulMay 13, 2025 am 12:06 AM

PhpeMailvalidationInvolvestHreesteps: 1) formatValidationingRegularExpressionStocheckTheemailFormat; 2) dnsvalidationtoensurethedomainhasavalidmxrecord;

Cara membuat aplikasi php lebih cepatCara membuat aplikasi php lebih cepatMay 12, 2025 am 12:12 AM

Tomakephpapplicationsfaster, ikutiTheseSteps: 1) UseopcodecachinglikeopcachetostorePrecompiledscriptbytecode.2) minimizedatabasequeriesbyusingquerycachingandeficientindexing.3)

Senarai Semak Pengoptimuman Prestasi PHP: Meningkatkan Kelajuan SekarangSenarai Semak Pengoptimuman Prestasi PHP: Meningkatkan Kelajuan SekarangMay 12, 2025 am 12:07 AM

ToimprovePhpapPlicationspeed, ikutiTheSesteps: 1) EnableopCodeCachingWithApcutoreduceScriptExecutionTime.2) pelaksanaanDatabasequerycachingingPdotominimizedataBaseHits.3)

Suntikan Ketergantungan PHP: Meningkatkan kebolehlaksanaan kodSuntikan Ketergantungan PHP: Meningkatkan kebolehlaksanaan kodMay 12, 2025 am 12:03 AM

Suntikan ketergantungan (DI) dengan ketara meningkatkan kesesuaian kod PHP oleh kebergantungan transitif secara eksplisit. 1) Kelas Decoupling dan pelaksanaan khusus menjadikan ujian dan penyelenggaraan lebih fleksibel. 2) Di antara tiga jenis, pembina menyuntik kebergantungan ekspresi eksplisit untuk memastikan keadaan konsisten. 3) Gunakan bekas DI untuk menguruskan kebergantungan kompleks untuk meningkatkan kualiti kod dan kecekapan pembangunan.

Pengoptimuman Prestasi PHP: Pengoptimuman Pertanyaan Pangkalan DataPengoptimuman Prestasi PHP: Pengoptimuman Pertanyaan Pangkalan DataMay 12, 2025 am 12:02 AM

DatabaseQueryoptimizationInpinvolvesseverSlegatiesToenhancePratePratePratePratePratePregiesToRperformance.1) selectOnlynessaryColumnStoReducedatatatransfer.2) UseIndexingTospeedupdatareTrieval.3) PrevancequerycachingToStoreresultSoffReFfeFfffffffffffffffffffffffffffffffffffffffffffferseprewfffffffffffersepresseprespersepresperseprespersepresperseprespersepresperseprespers

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Mandragora: Whispers of the Witch Tree - Cara Membuka Kunci Cangkuk Bergelut
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
Nordhold: Sistem Fusion, dijelaskan
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Persekitaran pembangunan bersepadu PHP yang berkuasa

SecLists

SecLists

SecLists ialah rakan penguji keselamatan muktamad. Ia ialah koleksi pelbagai jenis senarai yang kerap digunakan semasa penilaian keselamatan, semuanya di satu tempat. SecLists membantu menjadikan ujian keselamatan lebih cekap dan produktif dengan menyediakan semua senarai yang mungkin diperlukan oleh penguji keselamatan dengan mudah. Jenis senarai termasuk nama pengguna, kata laluan, URL, muatan kabur, corak data sensitif, cangkerang web dan banyak lagi. Penguji hanya boleh menarik repositori ini ke mesin ujian baharu dan dia akan mempunyai akses kepada setiap jenis senarai yang dia perlukan.

Dreamweaver Mac版

Dreamweaver Mac版

Alat pembangunan web visual

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan