• 28-04-2023, 23:47:35
    #1
    Merhaba PHP de ve mySql de bir sistem tasarlamaya çalışıyorum. tercih robotu adlı bir sistem var ona benzer bir sistem yapmaya çalışıyoruz sistemin çoğu kısmını tamamladık. Sistemi basitçe anlatmak gerekirse admin kullanıcı kaydı ve okul kaydı yapıyor daha sonrasında bu kaydettiği kullanıcılar kaydedilen okullara 40 tercih yapma hakkı elde ediyor. Daha sonra kullanıcı kullanıcı adı ve şifresi ile giriş yapıyor ve tercihlerini yapıyor. kullanıcıların başarı sıralamasına göre birinci tercihten 40. tercihe kadar tercihlerde okulların kontenjanına göre okulu kazanıyor veya kazanamiyor. Her kullanıcı sadece bir okul kazanabilir. Sistemde tercihleri yaptırabiliyoruz veri tabanına hangi okulu tercih ettiğini yazdırıyoruz fakat tercih ettiği okuldaki okul kontenjan sayısına göre en yüksek puanlı kisiler okulu kazandı Ve başka bir kullanıcının okulu kazanamadığı durumda okulu kazananlardan birisi tercihini değiştirirse yani silerse diğer ikinci üçüncü tercih yapan kişilenin üst sıraya çıkıp okulu kazanması gerekiyor bunun veritabanındaki ve php'deki algoritmasını tam olarak kuramadım.

    Yardımcı olabilecek birileri var mı?
  • 29-04-2023, 03:34:41
    #2
    kullanıcıları puanlarına göre yüksek düşüğe sıraladık.
    kullanıcıları döndürdük
    terchilerinden yukardan aşağı doğru,okulun kontenjanında yer varsa yerleştirdik, okulun da kontanjını bir düşürdük
    veya kontenjan yoksa tercihlerinden sonrakine geçtik, bir önceki kontejanda yer varsa yoksa durumuyla yerleştirme olmazsa tercihlerin sonuna kadar uyguladık.
    eğer 1 inci tercihine yerleştirilmediyse, kontenjandan dolayı yerleştirlemediği okul id lerini kullanıcıya özel bir yere yazdık.
    daha sonra kazanan bir öğrenci kazandığı x sıradaki terchini değiştirdi,
    yeni tercihine göre ve mevcut sıralamaya göre bu tercihine yerleşebiliyor mu ona bakıyoruz. yerleşemiyorsa bu kullanıcı ile işimiz bitti. fakat diğer kullanıcılarla iş var.
    boşa çıkan tercih, diğer kullanıcıların kontenjan dolayı yerleşemediği okullar arasında var ise. etkilenen kulanıcıların puanlarına göre sıralayıp mini bir ilk tercih döngüsü yapılacak.
    tabi bu işlem yapıldığında bir tercih daha boş çıkmış olacak ve sonraki etkilenen kullanıcılar için mini tercih döngüsü , etkilenen kullanıcı kalmayana kadar yapılacak.

    ilk başa dönelim, tercihini değiştren ilk kullanıcı yeni tercihine yerleşebiliyorsa durumu için, yeni yerleştiği bölüme yerleşen en düşük puanı alan kendisi değilse için tercih döngüsü yapılacak, en düşük puanı alanın yerleşimi değiştiği için bu durumdan kaynaklanan etkilenme durumu için de tercih döngüsü yapılacak
    hem de boşa çıkan ilk tercih için mini tercih döngüsü tekrar olacak.
    tabi bu yazdığım durumlar kontenjanları dolu olduğu durum için boş olduğu durum farklı.
    sadece etkilenenlerden yola çıkarak bayağı bir alt durum ve iç içe geçmiş döngüler oluşuyor.

    en kısa yol ise birisi tercihini değiştirdiğinde o kişiden ve ondan daha az puan alan herkes için tercih döngüsünün baştan yapılması. ama bunu yaparken de işlem yapıalcak grupdaki herkesin yerleştirmediği varsayılacak ve bu grubun tercihleri kadar daha kontenjan boşa çıkmış olacak.